建議您設定下列其中一種負載平衡模式:
在組合模式中,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 位址,並在管理員叢集設定檔的 如果叢集未使用拓撲網域,請在管理員叢集設定檔的 |
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: ManualLB
1.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 不支援以手動負載平衡模式設定的負載平衡器。如果負載平衡器發生問題,請與負載平衡器供應商聯絡。