Kubernetes Ingress 高可靠部署最佳實踐

摘要: 在Kubernetes集羣中,Ingress做爲集羣流量接入層,Ingress的高可靠性顯得尤其重要,今天咱們主要探討如何部署一套高性能高可靠的Ingress接入層。前端

 

簡介node

 

在Kubernetes集羣中,Ingress是受權入站鏈接到達集羣服務的規則集合,爲您提供七層負載均衡能力,您能夠經過 Ingress 配置提供外部可訪問的 URL、負載均衡、SSL、基於名稱的虛擬主機等。做爲集羣流量接入層,Ingress的高可靠性顯得尤其重要,今天咱們主要探討如何部署一套高性能高可靠的Ingress接入層。nginx

 

高可靠部署架構git

 

高可靠性首先要解決的就是單點故障問題,通常經常使用的是採用多副本部署的方式,咱們在Kubernetes集羣中部署高可靠Ingress接入層一樣採用多節點部署架構,同時因爲Ingress做爲集羣流量接入口,建議採用獨佔Ingress節點的方式,以免業務應用與Ingress服務發生資源爭搶。github

 

如上述部署架構圖,由多個獨佔Ingress實例組成統一接入層承載集羣入口流量,同時可依據後端業務流量水平擴縮容Ingress節點。固然若是您前期的集羣規模並不大,也能夠採用將Ingress服務與業務應用混部的方式,但建議進行資源限制和隔離。後端

 

在阿里雲容器服務集羣中部署高可靠Ingress接入層架構

 

部署說明app

  • Ingress SLB:Ingress接入層前端SLB實例
  • Ingress Node:部署Ingress Pod的集羣節點
  • Ingress Pod:Ingress服務實例

這三者之間依據標籤node-role.kubernetes.io/ingress=true進行關聯:負載均衡

1.Ingress SLB後端只會掛載打標了node-role.kubernetes.io/ingress=true的集羣Node;ide

2.Ingress Pod只會被部署到打標了node-role.kubernetes.io/ingress=true的集羣Node;

開始部署

 

一、建立 Kubernetes 集羣

 

在建立集羣以前,咱們須要依據自身具體業務場景來適當規劃集羣的規模以及集羣內各節點角色,好比業務節點數、Ingress節點數等,注意集羣默認會初始化3臺Master節點來部署集羣管控服務。

 

咱們經過阿里雲容器服務控制檯建立一個Kubernetes集羣,這裏以建立3臺Worker節點集羣爲例。

 

二、打標 Ingress Node

 

因爲測試集羣規模較小,咱們暫採用混部的方式:即3臺Worker節點既做爲業務節點又做爲Ingress節點。咱們給3臺Worker節點同時打標node-role.kubernetes.io/ingress=true,注意不建議將Ingress Pod部署在集羣Master節點上,由於Master節點承載着集羣的全部管控服務,以免集羣接入流量太高時對管控服務形成影響。

 

~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdb node-role.kubernetes.io/ingress=true node "cn-hangzhou.i-bp1ecwpuisra0y0bizdb" labeled ~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdc node-role.kubernetes.io/ingress=true node "cn-hangzhou.i-bp1ecwpuisra0y0bizdc" labeled ~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdd node-role.kubernetes.io/ingress=true node "cn-hangzhou.i-bp1ecwpuisra0y0bizdd" labeled ~ kubectl get no NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp11psgsvkxklfvb8vvj Ready master 1h v1.9.3 cn-hangzhou.i-bp183t1a82uun0s12ddr Ready master 1h v1.9.3 cn-hangzhou.i-bp1ecwpuisra0y0bizdb Ready ingress 56m v1.9.3 cn-hangzhou.i-bp1ecwpuisra0y0bizdc Ready ingress 56m v1.9.3 cn-hangzhou.i-bp1ecwpuisra0y0bizdd Ready ingress 57m v1.9.3 cn-hangzhou.i-bp1gb2498ykvy23k0jsy Ready master 1h v1.9.3

 

三、建立 Ingress 服務

 

集羣初始化時默認部署了一個Ingress Controller,具體部署說明請參考。這裏咱們經過DaemonSet方式將其從新部署到目標Ingress Node上,固然您也能夠採用Deployment配合親和性方式來部署。

 

~ kubectl -n kube-system delete deploy nginx-ingress-controller deployment "nginx-ingress-controller" deleted ~ kubectl create -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-controller-ds.yml daemonset "nginx-ingress-controller" created ~ kubectl -n kube-system get ds | grep nginx-ingress-controller nginx-ingress-controller 3 3 3 3 3 node-role.kubernetes.io/ingress=true 42s ~ kubectl -n kube-system get pod -o wide | grep nginx-ingress-controller nginx-ingress-controller-57j4l 1/1 Running 0 1m 172.16.3.2 cn-hangzhou.i-bp1ecwpuisra0y0bizdd nginx-ingress-controller-d7cxb 1/1 Running 0 1m 172.16.5.7 cn-hangzhou.i-bp1ecwpuisra0y0bizdc nginx-ingress-controller-m9w75 1/1 Running 0 1m 172.16.4.2 cn-hangzhou.i-bp1ecwpuisra0y0bizdb

 

四、更新 Ingress SLB 服務

 

集羣初始化時默認部署了一個Ingress LoadBalancer Service,具體部署說明請參考,這裏須要更新下Ingress LoadBalancer Service,以自動識別掛載打標的Ingress Node。

~ kubectl apply -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-slb-service.yml service "nginx-ingress-lb" configured

 

五、此時具備3個Ingress實例的高可靠接入層部署完成。

 

快速擴容

 

隨着您的業務流量不斷增加,集羣規模不斷擴大,您只須要簡單地經過打標的方式來快速擴容Ingress接入層。

 

全方位監控

 

集羣Ingress接入層的監控是必不可少的,您能夠經過阿里雲容器服務監控以及阿里云云監控對Ingress Pod和Ingress Node進行全方位監控。

 

原文連接

閱讀更多幹貨好文,請關注掃描如下二維碼: 

相關文章
相關標籤/搜索