堅持原創,共同進步!請關注我,後續分享更精彩!!!
k8s集群內部服務對外暴露有幾種方式:nodeport、LoadBalancer、ingress。
nodeport通過宿主機埠來暴露不同service的訪問入口。當集群對外暴露service很多時,對外的埠開放也會急劇膨脹,而且是集群中每臺宿主機都暴露一樣多的埠,在可維護性和安全性都具有很大挑戰;
LoadBalance需要配合雲廠商的負載均衡服務一起使用,有一定費用成本;
Ingress通常對外暴露兩個埠(http和https)。通過rule的規則定義來映射不同流量和service的對應關係。可以看做是nodeport方式的優化方案。
本文將向大家分享,如何通過ingress對外暴露集群中的服務?希望對大家有所幫助和參考。
ingress是k8s中的一個對象,該對象實現了這樣一種抽象:它通過配置http和https的路由規則,暴露了外部請求到集群內部service的訪問方式。
internet | [ Ingress ] --|-----|-- [ Services ]
ingress只負責規則定義,規則的執行將委託給具體的ingress controller。可選擇的ingress controller有很多(可點擊查看),這裡只介紹常用的ingress NGINX controller。
ingress controller非集群默認組件,需單獨安裝。
ingress NGINX controller,會運行一個service和deployment對象。service以nodeport方式對外暴露http和https兩個埠,用以接收外網流量;deployment實時監聽集群中的ingress和service,當發現ingress rule變更或service調整後,做出相關響應,如覆蓋rule 規則,重載NGINX conf配置等。
點擊查看官方文檔。
這裡以Bare-metal(裸機)方式安裝。
下載以下文件(地址無法訪問,度娘域名ip,綁定本地主機host)
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yaml
打開文件,找到image: us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller:v0.34.1內容,替換為image: paynege/ingress-nginx-controller:v0.34.1
替換原因:ingress-nginx鏡像地址為Google私有倉庫,國內網絡限制,無法訪問。需要替換為其他網絡地址。這裡選擇docker hub中的一個可用版本。解決方案可參考
master節點執行ingress-NGINX安裝:
kubectl apply -f deploy.yaml
查看安裝狀態:
kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --watch
上圖,ingress-nginx-controller running status表示啟動成功。
新建ingress規則文件,ingress規則可點擊查看。
如上圖,ingress中定義了兩個規則。
啟動ingress
kubectl apply -f {替換ingress文件名稱}
查看ingress-nginx svc對外埠
kubectl get svc -n ingress-nginx
如上圖,對外暴露埠,http對應32461埠;https對應31626埠。
本地電腦綁定訪問dctl.ms.consumer.com/dctl.ms.provider.com域名對應的k8s集群宿主機ip地址,瀏覽器請求測試接口。
接口正常響應,ingress規則生效。
本文介紹了k8s集群內部服務對外暴露的幾種方式:nodeport、LoadBalancer、ingress;這幾種方式的工作方式及優缺點;最後對ingress的ingress-NGINX安裝進行了演示。
由於個人能力所限,若有疏漏之處,請不吝指正。謝謝!