2

如何在Google容器引擎上實現跨區域負載均衡?谷歌容器引擎上的跨區域負載均衡+路由

我將在幾個地區的每個地區有一個Kubernetes羣集,我需要將流量從單個域名路由到最接近地理位置的羣集。

一些選項我已經調查:

  • Kubernetes負載平衡器似乎被限制在一個集羣。
  • 我不知道你如何得到Kubernetes Ingress與不同的集羣交談。 (這聽起來像這個目的是通過Compute Engine的HTTP負載均衡器雖然支持。)談論暴露集羣sounds right
  • Compute Engine的HTTP負載平衡器,但我引用的鏈接似乎有一些舊的術語如gcloud beta
  • 而不是所有這些,我真的可以得到一個Kubernetes集羣跨越不同的地區?

現在,如果我想將不同的URL路徑路由到一個吊艙內的不同容器,我該怎麼做?如果它位於Ingress或HTTP負載平衡器級別,那麼我沒有足夠的粒度來處理特定的容器。這是否意味着我將不得不爲每個不同的URL路徑使用不同的pod +服務?

回答

5

谷歌的Network load balancing(L3)的負載均衡是具體地,每區(這些是如果你創建LoadBalancer類型的服務,將自動配置負載均衡)。正如Alex在他的回答中所述,如果您使用網絡負載平衡,則需要爲每個區域配置一個負載平衡器,然後使用DNS將用戶請求分發到每個負載平衡器。 Google的HTTP(S) load balancing是跨區域(例如全球)。這意味着您可以獲得一個可平衡跨所有HTTP(S)後端的單個IP,這些後端可以分佈在多個區域的多個羣集中。對於跨羣集負載平衡,您必須按照Is it possible to use 1 Kubernetes ingress object to route traffic to k8s services in different clusters?中所述自行配置HTTP(S)負載平衡器。

無論哪種情況,您都需要爲每個要路由到唯一後端的URL路徑創建不同的服務。這些服務不必使用不同的Pod,儘管如果他們收到不同數量的流量並希望獨立擴展它們,您可能需要使用不同的Pod。

如果您使用HTTP(S)負載平衡器,則可以將這些服務和URL映射定義爲負載平衡器配置的一部分,並讓HTTP(S)平衡器爲您執行請求檢查/路由。如果使用網絡負載平衡器,則需要自行運行HTTP(S)服務器來終止連接,檢查請求並將其路由到適當的服務。

而不是所有這些,我真的可以得到一個Kubernetes集羣跨越不同的地區?

不是開箱即用的。您可以配置多區域羣集(在一個區域內),但我們不提供配置羣集的明確支持,而不是跨區域。雖然您可以自己手動執行此操作,但我們不建議這樣做,因爲集羣管理軟件中包含許多參數,這些參數已經通過集羣中主節點和節點之間的低延遲通信進行了調整。

+0

我已閱讀您鏈接的Ingress文檔,但無法弄清楚如何將其備份到後端多個羣集。特別是''backend:'引用'serviceName:'這可能表示在運行Ingress控制器的集羣上的服務?如何指定不同的羣集? –

+0

特別是,http://kubernetes.io/docs/api-reference/extensions/v1beta1/definitions/#_v1beta1_ingressbackend似乎只允許爲後端指定'serviceName:'和'servicePort:'。也許我錯過了什麼? –

+0

我想我帶你進入錯誤的方向,因爲它不能解決你的特殊問題(多個集羣中的後端)。它適用於單個羣集,但如果您想要在多個羣集中使用後端,則需要手動配置HTTP(S)負載平衡器。請參閱http://stackoverflow.com/questions/35446512/is-it-possible-to-use-1-kubernetes-ingress-object-to-route-traffic-to-k8s-servic/35447985#35447985配置這個。 –

1

現在最直接的選擇是在每個羣集中運行可替代副本,爲每個羣集配置一個負載均衡器,並手動設置您的DNS記錄以指向負載均衡器。

雖然這確實不是很好。一個更好的解決方案正爲即將到來的1.3版本:https://github.com/kubernetes/kubernetes/issues/23848

+0

雖然我不需要跨區域負載均衡器而不是每個羣集負載均衡器嗎?那麼我會通過NodePort公開集羣嗎? –

+0

跨區域負載平衡器會更好,但只需將多個IP地址(每個區域一個)與單個DNS名稱關聯即可。可以使用Geo DNS服務來確保地理上合理的路由,如下所示:http://stackoverflow.com/a/21082285/1925481 –

+0

當然,可能有一種方法可以配置全局負載均衡器來執行您所需的操作,我只是沒有立即意識到它:) –