kubernetes ingress 原理、部署

一、 ingress 原理

1、数据流向

ingress为七层负载均衡,理解为nginx。源于官网的数据流向图,客户端访问进入ingress,ingress根据域名进行解析 ,随后找到关联的service服务获取pod信息,直接代理至pod节点
kubernetes ingress 原理、部署

2、ingress 模式 hostnetwork nodeport

hostnetwork模式:

kubernetes ingress 原理、部署
每个节点都创建一个ingress-controller的容器,容器的网络模式设为hostNetwork。访问请求通过80/443端口将直接进入到pod-nginx中。而后nginx根据ingress规则再将流量转发到对应的web应用容器中。

nodeport模式 :

kubernetes ingress 原理、部署
访问流量先通过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.yaml

2) 修改镜像

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.0

3) 修改为hostnetwork模式

vim mandatory

kubernetes ingress 原理、部署

4) 部署

kubectl apply -f mandatory.yaml

kubernetes ingress 原理、部署

5) ingress-nginx pod 随机分配检验
ingress-nginx pod 随机被调配到node节点,新加nod02节点,再重新部署

kubectl apply -f mandatory.yaml

kubernetes ingress 原理、部署

kubernetes ingress 原理、部署
6) 修改为daemon-set模式
kubernetes ingress 原理、部署
ingress-controller pod 在所有节点都有部署
kubernetes ingress 原理、部署
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 --overwrite

kubernetes ingress 原理、部署

2>daemon-set,亲和性配置
根据 nodeselector配置亲和性,node节点配置设置limit上限
kubernetes ingress 原理、部署
kubernetes ingress 原理、部署
3>apply

kubectl apply -f mandatory.yaml

pod被调度到nod02节点。(如果使用label 的 key value配置,配置错误不会报错并且配置不会生效,命名空间看不到任何pod)
kubernetes ingress 原理、部署

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-ingress

kubernetes ingress 原理、部署
kubernetes ingress 原理、部署

2)将依赖拉到本地,修改nodeport

helm pull nginx-stable/nginx-ingress
tar xf nginx-ingress-0.8.1.tgz
vim ./nginx-inress/values.yaml

kubernetes ingress 原理、部署
3) 安装

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

kubernetes ingress 原理、部署

kubectl get pods -o wide -n ingress-nginx
kubectl get svc -n ingress-nginx

kubernetes ingress 原理、部署

三、结构

ingress入口分组节点用于流量入口,外部必然是负载均衡。现在大部分是云环境,服务暴露大部分通过4层7层SLB,deployment部署通过加载annotation,loadbalance-id 实现对4层或者7层关联。或者直接使用ingress来实现7层负载。不论什么环境考虑不外乎两点,高并发大流量必然带来的是高可用性以及横向扩展能力的需求。

上一篇:k8s ingress 增加跨域配置


下一篇:Nginx流量控制