Ingress介紹與安裝(Ingress V0.3)
Ingress介紹
Service對集群之外暴露服務的主要方式有兩種:NotePort和LoadBalancer(略),但是這兩種方式,都有一定的缺點:
- NodePort方式的缺點是會占用很多集群機器的端口,那么當集群服務變多的時候,這個缺點就愈發明顯
- LB方式的缺點是每個service需要一個LB,浪費、麻煩,并且需要kubernetes之外設備的支持
基于這種現狀,kubernetes提供了Ingress資源對象,Ingress只需要一個NodePort或者一個LB就可以滿足暴露多個Service的需求。
工作機制大致如下圖表示:

實際上,Ingress相當于一個7層的負載均衡器,是kubernetes對反向代理的一個抽象,它的工作原理類似于Nginx,可以理解成在Ingress里建立諸多映射規則,
Ingress Controller通過監聽這些配置規則并轉化成Nginx的反向代理配置 , 然后對外部提供服務。
在這里有兩個核心概念:
- ingress:kubernetes中的一個對象,作用是定義請求如何轉發到service的規則
- ingress controller:具體實現反向代理及負載均衡的程序,對ingress定義的規則進行解析,根據配置的規則來實現請求轉發,實現方式有很多,比如Nginx, Contour, Haproxy等等
Ingress(以Nginx為例)的工作原理如下:
1. 用戶編寫Ingress規則,說明哪個域名對應kubernetes集群中的哪個Service 2. Ingress控制器動態感知Ingress服務規則的變化,然后生成一段對應的Nginx反向代理配置 3. Ingress控制器會將生成的Nginx配置寫入到一個運行著的Nginx服務中,并動態更新 4. 到此為止,其實真正在工作的就是一個Nginx了,內部配置了用戶定義的請求轉發規則

安裝Ingress V0.3
# 創建文件夾 [root@master ~]# mkdir ingress-controller [root@master ~]# cd ingress-controller/ # 獲取ingress-nginx,本次案例使用的是0.30版本 [root@master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml [root@master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml [root@master ingress-controller]# kubectl apply -f ./ # 查看ingress-nginx [root@master ingress-controller]# kubectl get pod -n ingress-nginx # 查看service [root@master ingress-controller]# kubectl get svc -n ingress-nginx

參考
黑馬B站k8s課程https://www.bilibili.com/video/BV1Qv41167ck/
https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md
https://www.yuque.com/fairy-era/yg511q/xyqxge
浙公網安備 33010602011771號