啟用手動負載平衡模式

建議您設定下列其中一種負載平衡模式:

  • 在組合模式中,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 位址,並在管理員叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑。

如果叢集未使用拓撲網域,請在管理員叢集設定檔的 network.controlPlaneIPBlock.ips 區段中新增 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 位址,並在使用者叢集設定檔的 network.ipMode.ipBlockFilePath 欄位中新增路徑。

如果叢集未使用拓撲網域,請在使用者叢集設定檔的 network.controlPlaneIPBlock.ips 區段中新增 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 位址。

  • 如果啟用進階叢集,您需要按照下列方式設定負載平衡器:

    1. loadBalancer.vips.controlPlaneVIP 欄位中指定 IP 位址。

    2. 設定下列對應:

      • (controlPlaneVIP:443) -> (CONTROL_PLANE_NODE_IP_ADDRESSES:6433)
    3. 確認後端健康狀態檢查設定正確無誤。健康狀態檢查必須使用 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 位址。

  • 如果啟用進階叢集,您需要按照下列方式設定負載平衡器:

    1. loadBalancer.vips.controlPlaneVIP 欄位中指定 IP 位址。

    2. 設定下列對應:

      • (controlPlaneVIP:443) -> (CONTROL_PLANE_NODE_IP_ADDRESSES:6433)
    3. 確認後端健康狀態檢查設定正確無誤。健康狀態檢查必須使用 HTTPS,並檢查通訊埠 6443 上的 /readyz 端點。健康狀態檢查必須驗證這個端點是否傳回狀態碼 200,才能將節點視為健康狀態良好。

資料層流量

您需要設定的對應取決於建立使用者叢集時,是否要啟用進階叢集。

  • 如果未啟用進階叢集,請在建立叢集前執行下列步驟:

    1. 在使用者叢集設定檔中,設定 loadBalancer.vips.ingressVIPloadBalancer.manualLB.ingressHTTPNodePortloadBalancer.manualLB.ingressHTTPSNodePort

    2. 在負載平衡器中,為每個 Ingress NodePort 設定 IP 位址到通訊埠的對應:

      • (ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort)
      • (ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)
  • 如果已啟用進階叢集,請按照下列步驟操作:

    1. 建立叢集前,請在使用者叢集設定檔中設定 loadBalancer.vips.ingressVIP。您不需要為每個 Ingress NodePort 設定值,因為啟用進階叢集時,這些值不會生效。

    2. 叢集建立完成後,請擷取每個 Ingress NodePort 的值:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gke-system get service istio-ingress -oyaml
      

      在 Service spec 的連接埠部分中尋找 HTTP 和 HTTPS,並記下 NodePort 值。

    3. 在負載平衡器中,為每個 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 不支援以手動負載平衡模式設定的負載平衡器。如果負載平衡器發生問題,請與負載平衡器供應商聯絡。

後續步驟