2017-03-13 56 views
0

我剛剛開始使用Kubernetes,並且對kubernetes有一些疑問負載均衡方法,無法在kubernetes文檔中找到明確的答案。有關Kubernetes羣集中負載均衡的查詢

首先,可以說我們已經創建了一個部署「iis」,並將其擴展爲3個副本。現在,如果不創建服務,我們如何訪問這些端點?

現在,我們已經使用ClusterIP創建了一個用於此部署(具有3個副本)的服務,因此它只在羣集中暴露。現在,該服務如何負載平衡集羣內部的這項服務的流量?它是使用循環法還是隨機選擇端點?根據kubernetes的文檔,有2個服務代理,用戶空間或iptables,我怎麼知道我的服務使用哪一個?

接下來,我們使用LoadBalancer公開了該服務。它在雲提供商上創建負載均衡器並使用它。我的問題是,這個外部負載均衡如何平衡流量到豆莢?它是否將業務和服務的流量平衡重定向到端點,還是將流量直接平衡到端點(pod)?此外,在此LoadBalancer情況下,內部流量(來自羣集內)對此服務的負載平衡如何?

請儘量給出詳細的答案。

回答

1

首先,假設我們已經創建了一個部署「iis」,並將其擴展爲3個副本。現在,如果不創建服務,我們如何訪問這些端點?

除非你有這種帶外解決方案(就像你註冊POD IPS的標準負載平衡器)你不能。。服務是爲了緩解豆莢之間的連接。使用它們!

現在,服務如何負載平衡集羣內到達此服務的流量?

爲了理解這一點,值得了解Kubernetes的服務如何工作。

服務由kube-proxy處理。 KUBE-代理(現在默認)創建看起來有點像這樣的iptables規則:

-A KUBE-SERVICES ! -s 192.168.0.0/16 -d <svc-ip>/32 -p tcp -m comment --comment "namespace/service-name: cluster IP" -m tcp --dport svc-port -j KUBE-MARK-MASQ 

會發生什麼事是,iptables的着眼於所有目的地爲SVC-IP的數據包,然後引導他們的莢IP如果在iptables規則看一看進一步,然後搜索「概率」,這是生產服務

- 你會看到這樣的事情:

-A KUBE-SVC-AGR3D4D4FQNH4O33 -m comment --comment "default/redis-slave:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-25QOXGEMBWAVOAG5 
-A KUBE-SVC-GYQQTB6TY565JPRW -m comment --comment "default/frontend:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-JZXZFA7HRDMGR3BA 
-A KUBE-SVC-GYQQTB6TY565JPRW -m comment --comment "default/frontend:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-ZW5YSZGA33MN3O6G 

因此,答案是,它是隨機與一些probab權重權重。的概率是如何加權更詳盡的解釋可以在此github comment

可以看出據kubernetes的文檔,有2個服務代理,用戶空間或iptables的,我怎麼能知道哪一個我的服務使用?

同樣,這由kube-proxy確定,並且在kube-proxy啓動時決定。這是kube-proxy進程上的命令行標誌。默認情況下,它會使用iptables,強烈建議你堅持使用,除非你知道你在做什麼。

我的問題是,這個外部負載均衡如何平衡流量到豆莢?

這完全取決於您的雲提供商和您選擇的LoadBalance。 LoadBalancer服務類型會在NodePort上公開服務,然後將負載均衡器上的外部端口映射回該服務。 所有LoadBalancer類型的做法都不相同,都是在外部提供程序的負載均衡器中註冊爲該服務提供服務的節點IP,例如:ELB,而不是內部羣集IP服務。我建議閱讀您的雲提供商的文檔來確定這一點。

此外,在此LoadBalancer情況下,內部流量(來自羣集內部)如何對此服務進行負載平衡?

再次請參閱您的雲提供商的文檔。

+0

根據azure負載均衡器的說明「您可以配置負載均衡器以負載均衡您的VIRTUAL計算機上的傳入流量。」 因此,如果負載均衡器只是將流量重定向到其中一個節點上的NodePort,那麼運行在該節點上的kube-proxy會選擇在其自己的空間內運行的pod,還是會從運行在不同節點上的所有可用pod中選擇節點? –

+0

由於天藍色負載均衡器只是將流量重定向到服務端口,並且它是決定選擇pod的kube-proxy,那麼負載均衡器的目的是什麼?實際的負載平衡仍然由kube-proxy完成。 –