咪付:採用谷歌“同款”開源容器平臺 探究其負載均衡實現

Google 軟件 Linux Docker 咪付 2017-04-29

Kubernetes,希臘語中“船長”的意思。

作為Docker生態圈中重要一員,Kubernetes是Google多年大規模容器管理技術的開源版本,擁有快速、輕量化、較高的資源利用率等優點。

因此,Kubernetes是也受到了Microsoft、VMWare、CoreOS等巨頭及初創公司的青睞。

為什麼要用Kubernetes?

每個應用的運行都要依賴一個環境,容器為應用提供了隔離的環境。但這些相互隔離的容器需要管理,也需要跟外面的世界溝通。共享的文件系統,網絡,調度,負載均衡和資源分配都是挑戰。

而Kubernetes的作用,就是為了生產環境中成千上萬的容器,構建一個健壯的平臺,將應用按邏輯單元進行分組,方便管理和服務發現。

Kubernetes負載均衡是如何實現的?

要理解Kubernetes負載均衡器工作原理,就先要理解Kubernetes集群整體架構,知道從集群外部是如何訪問到集群內部的Pod業務容器。

咪付:採用谷歌“同款”開源容器平臺 探究其負載均衡實現

圖1 Kubernetes 整體架構圖

Kubernetes集群外部訪問業務服務的方式是:外部連接到集群中任意工作節點node上監聽的服務端口(Service NodePort),再由node負載將流量轉發到各個業務Pod上,實現集群業務對外服務。

通過linux系統ip_tables內核模塊,Kubernetes實現流量負載均衡,具體實現如下:

咪付:採用谷歌“同款”開源容器平臺 探究其負載均衡實現

圖2 kube-proxy 與 iptables 關係圖

上圖中,訪問app-web的流量在經過iptables內核模塊規則判斷後,流量將被均衡的分發到app-web業務Pod1和Pod2上。

咪付:採用谷歌“同款”開源容器平臺 探究其負載均衡實現

圖3 kube-proxy生成iptables規則時序圖

kube-proxy定時根據kube-apiserver上service所關聯的endpoints信息,重新生成業務訪問的iptables規則,通過調用linux用戶層iptables工具,將規則作用到內核模塊ip_tables上,實現業務流量負載均衡控制。

咪付:採用谷歌“同款”開源容器平臺 探究其負載均衡實現

圖4 iptables 負載均衡

iptables 通過statistic模塊,根據規則給定的概率,將流量包負載分發到不同的Pod IP上,最終實現了業務訪問負載均衡。

Kuberntes最終是採用linux系統內核ip_tables模塊實現業務訪問流量負載均衡器,其是基於IP層包數據NAT轉發,比類似於nginx的TCP層數據轉發性能要高很多。

但是在流量比較大時,還需要針對iptables NAT linux內核配置參數優化,如空對話防止、設定連接超時等,以取得最佳的負載性能。

相關推薦

推薦中...