建議您設定下列其中一種負載平衡模式:
在組合模式中,Google Distributed Cloud 會提供及管理負載平衡器。您不必取得負載平衡器授權,而且只需進行最少的設定。
在手動模式下,Google Distributed Cloud 會使用您選擇的負載平衡器,例如 F5 BIG-IP 或 Citrix。手動負載平衡模式需要比隨附模式更多的設定。
下列叢集類型支援手動負載平衡:
已啟用 Controlplane V2 的使用者叢集。使用 Controlplane V2 時,使用者叢集的控制層節點位於使用者叢集本身。
使用 kubeception 的使用者叢集。kubeception 一詞是指使用者叢集的控制層在一或多個管理員叢集節點上執行的情況。如果未啟用 Controlplane V2,使用者叢集會使用 kubeception。
本文說明選擇手動負載平衡模式時,必須採取的步驟。
本文會預留控制層節點和工作站節點的 IP 位址,以供稍後使用。您也為虛擬 IP (VIP) 保留 IP 位址,並決定 NodePort 值。概念是選擇要使用的 IP 位址和 NodePort 值,然後記錄在試算表或其他工具中。準備好建立叢集時,您需要 IP 位址和 NodePort 值,填入管理員叢集和使用者叢集的設定檔,以及叢集的 IP 區塊檔案。
手動為使用者叢集設定負載平衡器時,您也需要 IP 位址和 NodePort 值。
為控制層設定不同類型的負載平衡器
在 1.32 以上版本中,啟用進階叢集時,您可以在建立新叢集時,選擇為控制層設定不同類型的負載平衡器。如要瞭解詳情,請參考下列資源:
預留節點 IP 位址
手動負載平衡模式無法使用 DHCP。您必須為叢集節點指定靜態 IP 位址。您需要為管理員叢集中的節點,以及您打算建立的所有使用者叢集中的節點,預留足夠的位址。如要瞭解要預留多少節點 IP 位址,請參閱「規劃 IP 位址 (Controlplane V2)」和「規劃 IP 位址 (kubeception)」。
設定 IP 位址
您預留的靜態 IP 位址設定位置,取決於叢集類型,以及使用者叢集是否已啟用 Controlplane V2。
高可用性管理員叢集
下表說明 IP 位址的用途,以及您在何處為 HA 管理員叢集設定 IP 位址。
| 靜態 IP | 設定 |
|---|---|
| 控制層節點 | 如果
叢集使用拓撲網域,請在管理員叢集的 IP 區塊檔案中新增 IP 位址,並在管理員叢集設定檔的 如果叢集未使用拓撲網域,請在管理員叢集設定檔的 |
| 1.16 以下:外掛程式節點 | 管理員叢集 IP 區塊檔案,並在管理員叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑 |
在 1.28 以上版本中,新的 HA 管理員叢集沒有外掛程式節點,因此您不需要像舊版一樣,為外掛程式節點預留 IP 位址。
非高可用性管理員叢集
下表說明 IP 位址的用途,以及如何為非高可用性管理員叢集設定 IP 位址。
| 靜態 IP | 設定 |
|---|---|
| 控制層節點 | 管理員叢集 IP 區塊檔案,並在管理員叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑 |
| 加購節點 | 管理員叢集 IP 區塊檔案 |
在 1.28 以上版本中,所有新的管理員叢集都必須是高可用性 (HA) 叢集,且具有 3 個控制層節點。
CP V2 使用者叢集
下表說明 IP 位址的用途,以及在啟用 Controlplane V2 的使用者叢集中設定 IP 位址的位置。
| 靜態 IP | 設定 |
|---|---|
| 控制層節點 | 如果
叢集使用拓撲網域,請在使用者叢集的 IP 區塊檔案中新增 IP 位址,並在使用者叢集設定檔的 如果叢集未使用拓撲網域,請在使用者叢集設定檔的 |
| 工作站節點 | 使用者叢集 IP 區塊檔案,並在使用者叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑 |
Kubeception 使用者叢集
下表說明 IP 位址的用途,以及在使用者叢集 (使用 kubeception) 中設定 IP 位址的位置。
| 靜態 IP | 設定 |
|---|---|
| 控制層節點 | 管理員叢集 IP 區塊檔案,並在管理員叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑 |
| 工作站節點 | 使用者叢集 IP 區塊檔案,並在使用者叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑 |
在 1.30 以上版本中,新使用者叢集必須使用 Controlplane V2。
為 VIP 預留 IP 位址
無論使用整合式、隨附或手動負載平衡模式,您都必須預留幾個 IP 位址,用於負載平衡的虛擬 IP (VIP)。外部用戶端可透過這些 VIP 連線至 Kubernetes API 伺服器,以及使用者叢集上的 Ingress 服務。
設定 VIP
設定 VIP 的位置取決於叢集類型。
高可用性管理員叢集
下表說明 VIP 的用途,以及您在何處為 HA 管理員叢集設定 VIP。
| VIP | 設定 |
|---|---|
| 管理員叢集 Kubernetes API 伺服器的 VIP | loadBalancer.vips.controlPlaneVIP 欄位中的管理員叢集設定檔 |
| 1.15 以下:外掛程式 VIP | loadBalancer.vips.addonsVIP 欄位中的管理員叢集設定檔 |
請注意以下版本差異:
在 1.16 以上版本中,您不需要為 HA 管理叢集設定外掛程式 VIP。
在 1.28 以上版本中,新的 HA 管理員叢集沒有外掛程式節點。
非高可用性管理員叢集
下表說明 VIP 的用途,以及如何為非高可用性管理員叢集設定 VIP。
| VIP | 設定 |
|---|---|
| 管理員叢集 Kubernetes API 伺服器的 VIP | loadBalancer.vips.controlPlaneVIP 欄位中的管理員叢集設定檔 |
| 1.15 以下:外掛程式 VIP | loadBalancer.vips.addonsVIP 欄位中的管理員叢集設定檔 |
請注意以下版本差異:
在 1.16 以上版本中,您不需要為非 HA 管理員叢集設定外掛程式 VIP。
CP V2 使用者叢集
下表說明 VIP 的用途,以及在啟用 Controlplane V2 的使用者叢集中設定 VIP 的位置。
| VIP | 設定 |
|---|---|
| 使用者叢集 Kubernetes API 伺服器的 VIP | loadBalancer.vips.controlPlaneVIP 欄位中的使用者叢集設定檔 |
| 使用者叢集 Ingress 服務的 VIP | loadBalancer.vips.ingressVIP 欄位中的使用者叢集設定檔 |
Kubeception 使用者叢集
下表說明 VIP 的用途,以及在採用 kubeception 的使用者叢集中設定 VIP 的位置。
| VIP | 設定 |
|---|---|
| 使用者叢集 Kubernetes API 伺服器的 VIP | loadBalancer.vips.controlPlaneVIP 欄位中的使用者叢集設定檔 |
| 使用者叢集 Ingress 服務的 VIP | loadBalancer.vips.ingressVIP 欄位中的使用者叢集設定檔 |
保留 NodePort 值
在 Google Distributed Cloud 中,Kubernetes API 伺服器和 Ingress 服務會由 Kubernetes Service 公開。在手動負載平衡模式下,您必須為這些服務選擇自己的 NodePort 值。請選擇介於 30000 至 32767 之間的值。
設定 NodePort 值
設定 NodePort 值的位置,取決於使用者叢集是否已啟用 ControlPlane V2。
高可用性管理員叢集
下表說明 NodePort 的用途,以及您在何處為 HA 管理員叢集設定 NodePort。
nodePort |
設定 |
|---|---|
1.15 以下:nodePort (適用於外掛程式節點) |
loadBalancer.manualLB.addonsNodePort 欄位中的管理員叢集設定檔 |
在 1.16 以上版本中,您不需要為 HA 管理員叢集的附加元件節點設定 NodePort。
非高可用性管理員叢集
下表說明 NodePort 值的用途,以及在非高可用性管理員叢集中設定這些值的位置。
nodePort |
設定 |
|---|---|
1.16 和更早版本:管理員叢集的 Kubernetes API 伺服器 nodePort |
1.15 以下版本:loadBalancer.vips.controlPlaneNodePort 欄位中的管理員叢集設定檔 |
1.15 和更早版本:nodePort 適用於外掛程式節點 |
loadBalancer.manualLB.addonsNodePort 欄位中的管理員叢集設定檔 |
在 1.16 以上版本中,非高可用性管理員叢集的附加元件節點不需要設定 NodePort。
CP V2 使用者叢集
下表說明 NodePort 的用途,以及在啟用 Controlplane V2 的使用者叢集中設定 NodePort 的位置。在 1.30 以上版本中,您不需要設定 Ingress NodePort 的值。
nodePorts |
設定 |
|---|---|
使用者叢集 Ingress 服務的 HTTP nodePort |
loadBalancer.manualLB.ingressHTTPNodePort 中的使用者叢集設定檔 |
使用者叢集 Ingress 服務的 HTTPS nodePort |
loadBalancer.manualLB.ingressHTTPSNodePort 中的使用者叢集設定檔 |
Kubeception 使用者叢集
下表說明 NodePort 值的用途,以及在採用 kubeception 的使用者叢集中設定這些值的位置。
nodePort |
設定 |
|---|---|
nodePort 使用者叢集的 Kubernetes API 伺服器 |
loadBalancer.manualLB.controlPlaneNodePort 欄位中的使用者叢集設定檔 |
nodePort 使用者叢集的 Konnectivity 伺服器 (Konnectivity 伺服器使用控制層 VIP) |
loadBalancer.manualLB.konnectivityServerNodePort 欄位中的使用者叢集設定檔 |
使用者叢集 Ingress 服務的 HTTP nodePort |
loadBalancer.manualLB.ingressHTTPNodePort 中的使用者叢集設定檔 |
使用者叢集 Ingress 服務的 HTTPS nodePort |
loadBalancer.manualLB.ingressHTTPSNodePort 中的使用者叢集設定檔 |
叢集設定檔範例
以下範例顯示管理員和使用者叢集設定檔的一部分:
高可用性管理員叢集
1.16 以上版本:
network: controlPlaneIPBlock: netmask: "255.255.248.0" gateway: "21.0.143.254" ips: - ip: "21.0.140.226" hostname: "admin-cp-vm-1" - ip: "21.0.141.48" hostname: "admin-cp-vm-2" - ip: "21.0.141.65" hostname: "admin-cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" kind: ManualLB1.15 版以前的附加元件節點需要 VIP 和 NodePort。
network: controlPlaneIPBlock: netmask: "255.255.248.0" gateway: "21.0.143.254" ips: - ip: "21.0.140.226" hostname: "admin-cp-vm-1" - ip: "21.0.141.48" hostname: "admin-cp-vm-2" - ip: "21.0.141.65" hostname: "admin-cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" addonsVIP: "203.0.113.4" kind: ManualLB manualLB: addonsNodePort: 31405
非高可用性管理員叢集
1.16 以上版本:
network: ipMode: type: static ipBlockFilePath: "ipblock-admin.yaml" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" kind: ManualLB manualLB: controlPlaneNodePort: 30562如果是 1.15 以下版本,外掛程式節點需要 VIP 和 NodePort。
network: ipMode: type: static ipBlockFilePath: "ipblock-admin.yaml" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" addonsVIP: "172.16.21.41" kind: ManualLB manualLB: controlPlaneNodePort: 30562 addonsNodePort: 30563
CP V2 使用者叢集
network:
ipMode:
type: static
ipBlockFilePath: "ipblock1.yaml"
controlPlaneIPBlock:
netmask: "255.255.255.0"
gateway: "172.16.21.1"
ips:
- ip: "172.16.21.6"
hostname: "cp-vm-1"
- ip: "172.16.21.7"
hostname: "cp-vm-2"
- ip: "172.16.21.8"
hostname: "cp-vm-3"
loadBalancer:
vips:
controlPlaneVIP: "172.16.21.40"
ingressVIP: "172.16.21.30"
kind: ManualLB
manualLB:
ingressHTTPNodePort: 30243
ingressHTTPSNodePort: 30879
Kubeception 使用者叢集
network:
ipMode:
type: static
ipBlockFilePath: "ipblock1.yaml"
loadBalancer:
vips:
controlPlaneVIP: "172.16.21.40"
ingressVIP: "172.16.21.30"
kind: ManualLB
manualLB:
ingressHTTPNodePort: 30243
ingressHTTPSNodePort: 30879
konnectivityServerNodePort: 30563
controlPlaneNodePort: 30562
設定負載平衡器
請使用負載平衡器的管理主控台或工具,在負載平衡器中設定下列對應。操作方式取決於負載平衡器。
高可用性管理員叢集
控制層節點的流量
您需要設定的對應取決於建立管理員叢集時,是否啟用進階叢集。
如果未啟用進階叢集: Google Distributed Cloud 會自動處理高可用性管理員叢集的控制層流量負載平衡。雖然您不需要在負載平衡器中設定對應,但必須在
loadBalancer.vips.controlPlaneVIP欄位中指定 IP 位址。如果啟用進階叢集,您需要按照下列方式設定負載平衡器:
在
loadBalancer.vips.controlPlaneVIP欄位中指定 IP 位址。設定下列對應:
- (
controlPlaneVIP:443) -> (CONTROL_PLANE_NODE_IP_ADDRESSES:6433)
- (
確認後端健康狀態檢查設定正確無誤。健康狀態檢查必須使用 HTTPS,並檢查通訊埠
6443上的/readyz端點。健康狀態檢查必須驗證這個端點是否傳回狀態碼200,才能將節點視為健康狀態良好。
傳入附加節點中服務的流量
1.15 和更早版本:下圖顯示附加節點中服務的流量對應至 IP 位址和 NodePort 值:
- (
addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)
為管理員叢集中的所有節點 (包括控制層節點和附加元件節點) 新增這項對應。
在 1.16 以上版本中,您不需要為 HA 管理叢集的附加節點設定這項對應。
非高可用性管理員叢集
控制層流量
以下顯示控制層節點的 IP 位址和 NodePort 值對應:
- (
controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)
為管理員叢集中的所有節點 (包括控制層節點和附加元件節點) 新增這項對應。
傳入附加節點中服務的流量
1.15 和更早版本:下圖顯示在附加節點中執行的服務,對應的 IP 位址和 NodePort 值:
- (
addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)
為管理員叢集中的所有節點 (包括控制層節點和附加元件節點) 新增這項對應。
在 1.16 以上版本中,您不需要為非高可用性管理員叢集的附加節點設定這項對應。
CP V2 使用者叢集
控制層流量
您需要設定的對應取決於建立使用者叢集時,是否會啟用進階叢集。
如果未啟用進階叢集: Google Distributed Cloud 會自動處理使用者叢集的控制層流量負載平衡。雖然您不需要在負載平衡器中設定對應,但必須在
loadBalancer.vips.controlPlaneVIP欄位中指定 IP 位址。如果啟用進階叢集,您需要按照下列方式設定負載平衡器:
在
loadBalancer.vips.controlPlaneVIP欄位中指定 IP 位址。設定下列對應:
- (
controlPlaneVIP:443) -> (CONTROL_PLANE_NODE_IP_ADDRESSES:6433)
- (
確認後端健康狀態檢查設定正確無誤。健康狀態檢查必須使用 HTTPS,並檢查通訊埠
6443上的/readyz端點。健康狀態檢查必須驗證這個端點是否傳回狀態碼200,才能將節點視為健康狀態良好。
資料層流量
您需要設定的對應取決於建立使用者叢集時,是否要啟用進階叢集。
如果未啟用進階叢集,請在建立叢集前執行下列步驟:
在使用者叢集設定檔中,設定
loadBalancer.vips.ingressVIP、loadBalancer.manualLB.ingressHTTPNodePort和loadBalancer.manualLB.ingressHTTPSNodePort。在負載平衡器中,為每個 Ingress NodePort 設定 IP 位址到通訊埠的對應:
- (
ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort) - (
ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)
- (
如果已啟用進階叢集,請按照下列步驟操作:
建立叢集前,請在使用者叢集設定檔中設定
loadBalancer.vips.ingressVIP。您不需要為每個 Ingress NodePort 設定值,因為啟用進階叢集時,這些值不會生效。叢集建立完成後,請擷取每個 Ingress NodePort 的值:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gke-system get service istio-ingress -oyaml在 Service spec 的連接埠部分中尋找 HTTP 和 HTTPS,並記下 NodePort 值。
在負載平衡器中,為每個 Ingress NodePort 設定 IP 位址到通訊埠的對應:
- (
ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort) - (
ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)
- (
在這兩種情況下,請為使用者叢集中的所有控制層節點和工作站節點新增這些對應。由於您在叢集上設定了 NodePort,Kubernetes 會開啟所有叢集節點上的 NodePort。這項設定可讓叢集中的任何節點處理資料層流量。
設定對應後,負載平衡器會在標準 HTTP 和 HTTPS 連接埠上,監聽您為使用者叢集 Ingress VIP 設定的 IP 位址流量。負載平衡器會將要求轉送至叢集中的任何節點。要求轉送至叢集節點後,Kubernetes 內部網路會接手,並將要求轉送至目的地 Pod。
Kubeception 使用者叢集
控制層流量
以下顯示控制層流量的 IP 位址和 NodePort 值對應:
- (
controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort) - (
controlPlaneVIP:8132) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort)
為管理員叢集中的所有節點新增這項對應,包括管理員叢集和使用者叢集控制層節點。
資料層流量
以下顯示資料平面流量的 IP 位址和 NodePort 值對應:
- (
ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort) - (
ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)
為使用者叢集中的所有節點新增這些對應關係。使用 kubeception 的使用者叢集,所有節點都是工作站節點。
重設與失敗節點的連線 (建議)
除了上述需求外,建議您將負載平衡器設為在偵測到後端節點故障時,重設用戶端連線。如果沒有這項設定,伺服器執行個體停止運作時,Kubernetes API 伺服器的用戶端可能會停止回應幾分鐘,導致 Kubernetes 控制層不穩定。
- 使用 F5 BIG-IP 時,這項設定在後端集區設定頁面中稱為「Action On Service Down」。
- 在 HAProxy 中,這項設定稱為後端伺服器設定中的 on-marked-down shutdown-sessions。
- 如果您使用其他負載平衡器,請參閱相關文件,找出對應的設定。
取得手動負載平衡支援
Google 不支援以手動負載平衡模式設定的負載平衡器。如果負載平衡器發生問題,請與負載平衡器供應商聯絡。