一、 ingress 原理
1、数据流向
ingress为七层负载均衡,理解为nginx。源于官网的数据流向图,客户端访问进入ingress,ingress根据域名进行解析 ,随后找到关联的service服务获取pod信息,直接代理至pod节点
2、ingress 模式 hostnetwork nodeport
hostnetwork模式:
每个节点都创建一个ingress-controller的容器,容器的网络模式设为hostNetwork。访问请求通过80/443端口将直接进入到pod-nginx中。而后nginx根据ingress规则再将流量转发到对应的web应用容器中。
nodeport模式 :
访问流量先通过nodeport进入到node节点,经iptables (svc) 转发至ingress-controller容器,再根据rule转发至后端各业务的容器中。
二、部署
1、hostnetwork模式
1) 下载yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml2) 修改镜像
cp mandatory.yaml mandatory.yaml_back quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0 改为,registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.30.0 3) 先把镜像拉取下来 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.30.03) 修改为hostnetwork模式
vim mandatory4) 部署
kubectl apply -f mandatory.yaml5) ingress-nginx pod 随机分配检验ingress-nginx pod 随机被调配到node节点,新加nod02节点,再重新部署
kubectl apply -f mandatory.yaml6) 修改为daemon-set模式ingress-controller pod 在所有节点都有部署7) 使用标签分组部署ingress-controller找一组专用于ingress入口的node节点做为流量入口,使用10.0.0.104做为流量入口。对于亲和性的配置需要k8s v1.10+
1>nod02做为ingress 专用节点,打标签
kubectl get nodes --show-labels kubectl label nodes nod02 httpin=ingressfor kubectl label nodes nod02 httpin=podforingress --overwrite2>daemon-set,亲和性配置根据 nodeselector配置亲和性,node节点配置设置limit上限3>apply
kubectl apply -f mandatory.yamlpod被调度到nod02节点。(如果使用label 的 key value配置,配置错误不会报错并且配置不会生效,命名空间看不到任何pod)
2、nodeport 模式部署
nodeport 可以使用deploy部署或者helm部署,此处使用helm部署
1) 添加helm依赖
helm repo add nginx-stable https://helm.nginx.com/stable helm repo list helm search repo nginx-ingress2)将依赖拉到本地,修改nodeport
helm pull nginx-stable/nginx-ingress tar xf nginx-ingress-0.8.1.tgz vim ./nginx-inress/values.yaml3) 安装
kubectl create namespace ingress-nginx helm install ingress-nginx ./nginx-ingress -n ingress-nginx [root@k8s01 ingress]# helm install ingress-nginx ./nginx-ingress -n ingress-nginx Error: cannot re-use a name that is still in use [root@k8s01 ingress]# helm uninstall ingress-nginx -n ingress-nginx release "ingress-nginx" uninstalled kubectl get pods -o wide -n ingress-nginx kubectl get svc -n ingress-nginx三、结构
ingress入口分组节点用于流量入口,外部必然是负载均衡。现在大部分是云环境,服务暴露大部分通过4层7层SLB,deployment部署通过加载annotation,loadbalance-id 实现对4层或者7层关联。或者直接使用ingress来实现7层负载。不论什么环境考虑不外乎两点,高并发大流量必然带来的是高可用性以及横向扩展能力的需求。
【转自:武汉网站制作 http://www.wh5w.com提供,感恩】