首先,假設我們已經創建了一個部署「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情況下,內部流量(來自羣集內部)如何對此服務進行負載平衡?
再次請參閱您的雲提供商的文檔。
根據azure負載均衡器的說明「您可以配置負載均衡器以負載均衡您的VIRTUAL計算機上的傳入流量。」 因此,如果負載均衡器只是將流量重定向到其中一個節點上的NodePort,那麼運行在該節點上的kube-proxy會選擇在其自己的空間內運行的pod,還是會從運行在不同節點上的所有可用pod中選擇節點? –
由於天藍色負載均衡器只是將流量重定向到服務端口,並且它是決定選擇pod的kube-proxy,那麼負載均衡器的目的是什麼?實際的負載平衡仍然由kube-proxy完成。 –