設定多叢集 Ingress


本頁面說明如何使用多叢集 Ingress,在不同地區的多個 Google Kubernetes Engine (GKE) 叢集之間轉送流量,並提供使用兩個叢集的範例。

如要詳細比較多叢集 Ingress (MCI)、多叢集閘道 (MCG) 和負載平衡器與獨立網路端點群組 (LB 和獨立 NEG),請參閱為 GKE 選擇多叢集負載平衡 API

如要進一步瞭解如何部署多叢集 Ingress,請參閱「部署橫跨多個叢集的 Ingress」。

這些步驟需要提升權限,應由 GKE 管理員執行。

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

需求條件和限制

多叢集 Ingress 必須符合下列條件:

  • Google Cloud CLI 290.0.0 以上版本。

如果您使用標準模式叢集,請確認符合下列需求。Autopilot 叢集已符合這些規定。

多叢集 Ingress 有下列限制:

  • 僅支援外部應用程式負載平衡器
  • 請勿在同一個專案中建立前置字元為  的 Compute Engine 負載平衡器,否則這些負載平衡器會遭到刪除。會使用前置字元  管理 Multi Cluster Ingress 部署的 Compute Engine 資源。mci- Google Cloud mci-[6 char hash]
  • 設定 HTTPS 時,需要預先分配的靜態 IP 位址。臨時 IP 位址不支援 HTTPS。

總覽

在本練習中,您將執行下列步驟:

  1. 選取要使用的定價。
  2. 部署叢集。
  3. 設定叢集憑證。
  4. 將叢集註冊至機群
  5. 指定設定叢集。這個叢集可以是專屬的控制層,也可以執行其他工作負載。

下圖顯示完成練習後,環境的樣貌:

叢集拓撲,顯示區域、機群和專案之間的關係。

在圖表中,區域 europe-west1us-central1 中有兩個名為 gke-usgke-eu 的 GKE 叢集。叢集已註冊至機群,因此多叢集 Ingress 控制器可以辨識這些叢集。機群可讓您有條理地將 GKE 叢集分類並正規化,方便管理基礎架構,並使用多叢集 Ingress 等多叢集功能。如要進一步瞭解車隊的優點和建立方式,請參閱車隊管理說明文件

選取價格

如果您只使用多叢集 Ingress 這項 GKE Enterprise 功能,建議採用獨立定價。如果專案使用 Google Cloud 上的其他 GKE Enterprise 元件或功能,請啟用整個 GKE Enterprise 平台。這樣一來,您就能以單一 vCPU 費用使用所有 GKE Enterprise 功能。

您必須啟用的 API 取決於使用的多叢集 Ingress 定價

  • 如果啟用 GKE Enterprise API (anthos.googleapis.com),系統會根據叢集 vCPU 數量和 GKE Enterprise 價格向專案收費。
  • 如果停用 GKE Enterprise API,系統會根據專案中的後端多叢集 Ingress Pod 數量向您收費。

您可以隨時將多叢集 Ingress 的帳單模式從獨立模式變更為 GKE Enterprise,或從 GKE Enterprise 變更為獨立模式,不會影響多叢集 Ingress 資源或流量。

獨立定價

如要啟用獨立價格,請按照下列步驟操作:

  1. 確認專案已停用 GKE Enterprise API:

    gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
    

    PROJECT_ID 替換為執行 GKE 叢集的專案 ID。

    如果輸出內容為空白回應,表示專案已停用 GKE Enterprise API,且系統會按照獨立定價向您收取所有多叢集 Ingress 資源的費用。

  2. 在專案中啟用必要的 API:

    gcloud services enable \
        multiclusteringress.googleapis.com \
        gkehub.googleapis.com \
        container.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project=PROJECT_ID
    

GKE Enterprise 定價

如要啟用 GKE Enterprise 定價,請在專案中啟用下列 API:

gcloud services enable \
    anthos.googleapis.com \
    multiclusteringress.googleapis.com \
    gkehub.googleapis.com \
    container.googleapis.com \
    multiclusterservicediscovery.googleapis.com \
    --project=PROJECT_ID

在專案中啟用 anthos.googleapis.com 後,向 Connect 註冊的任何叢集都會按照 GKE Enterprise 定價計費。

部署叢集

europe-west1us-central1 區域中,建立名為 gke-usgke-eu 的兩個 GKE 叢集。

Autopilot

  1. us-central1 區域中建立 gke-us 叢集:

    gcloud container clusters create-auto gke-us \
        --location=us-central1 \
        --release-channel=stable \
        --project=PROJECT_ID
    

    PROJECT_ID 替換為專案 ID。 Google Cloud

  2. europe-west1 區域中建立 gke-eu 叢集:

    gcloud container clusters create-auto gke-eu \
        --location=europe-west1 \
        --release-channel=stable \
        --project=PROJECT_ID
    

標準

建立兩個叢集,並啟用 Workload Identity Federation for GKE

  1. us-central1 區域中建立 gke-us 叢集:

    gcloud container clusters create gke-us \
        --location=us-central1 \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=stable \
        --project=PROJECT_ID
    

    PROJECT_ID 替換為專案 ID。 Google Cloud

  2. europe-west1 區域中建立 gke-eu 叢集:

    gcloud container clusters create gke-eu \
        --location=europe-west1 \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=stable \
        --project=PROJECT_ID
    

設定叢集憑證

設定叢集的憑證,並重新命名叢集環境,以便在部署資源時輕鬆切換叢集。

  1. 擷取叢集的憑證:

    gcloud container clusters get-credentials gke-us \
        --location=us-central1 \
        --project=PROJECT_ID
    
    gcloud container clusters get-credentials gke-eu \
        --location=europe-west1 \
        --project=PROJECT_ID
    

    憑證會儲存在本機,方便您使用 kubectl 用戶端存取叢集 API 伺服器。根據預設,系統會為憑證建立自動產生的名稱。

  2. 重新命名叢集環境:

    kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us
    kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
    

將叢集註冊至機群

請按照下列步驟,將叢集註冊至專案的機群。

  1. 註冊叢集:

    gcloud container fleet memberships register gke-us \
        --gke-cluster us-central1/gke-us \
        --enable-workload-identity \
        --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-eu \
        --gke-cluster europe-west1/gke-eu \
        --enable-workload-identity \
        --project=PROJECT_ID
    
  2. 確認叢集已成功註冊至機群:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    輸出結果會與下列內容相似:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    

註冊叢集後,GKE 會將 gke-mcs-importer Pod 部署至叢集。

如要進一步瞭解如何註冊叢集,請參閱「將 GKE 叢集註冊至機群」。

指定設定叢集

設定叢集是您選擇的 GKE 叢集,可做為成員叢集 Ingress 的中央控制點。這個叢集必須已向機群註冊。詳情請參閱「設定叢集設計」。

啟用多叢集 Ingress,並選取 gke-us 做為設定叢集:

gcloud container fleet ingress enable \
    --config-membership=gke-us \
    --location=us-central1 \
    --project=PROJECT_ID

設定叢集最多需要 15 分鐘才能完成註冊。成功輸出結果會與下列內容相似:

Waiting for Feature to be created...done.
Waiting for controller to start...done.

如果輸出結果不成功,會與下列內容相似:

Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.

如果上一個步驟發生失敗,請檢查功能狀態:

gcloud container fleet ingress describe \
    --project=PROJECT_ID

如果成功生成嵌入,輸出結果會與下列內容相似:

createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
 projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
 state:
   code: ERROR
   description: '...is not a VPC-native GKE Cluster.'
   updateTime: '2021-08-10T13:58:50.298191306Z'
 projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
 state:
   code: OK
   updateTime: '2021-08-10T13:58:08.499505813Z'

如要進一步瞭解如何排解多叢集 Ingress 錯誤,請參閱「疑難排解和作業」。

對即時叢集的影響

您可以在運作中的叢集上使用 gcloud container fleet ingress enable 安全地啟用多叢集 Ingress,因為這不會導致任何停機時間,也不會影響叢集上的流量。

共用虛擬私有雲

您可以在共用虛擬私有雲網路中為叢集部署 MultiClusterIngress 資源,但所有參與的後端 GKE 叢集都必須位於同一個專案中。不支援在不同專案中,讓 GKE 叢集使用相同的 Cloud Load Balancing VIP。

在非共用虛擬私有雲網路中,多叢集 Ingress 控制器會管理防火牆規則,允許健康狀態檢查從負載平衡器傳遞至容器工作負載。

在共用虛擬私有雲網路中,主專案管理員必須代表多叢集 Ingress 控制器,手動建立負載平衡器流量的防火牆規則。

如果叢集位於共用虛擬私有雲網路,您必須建立下列防火牆規則。來源範圍是負載平衡器用來將流量傳送至後端的範圍。這項規則必須存在於 MultiClusterIngress 資源的運作生命週期內。

如果叢集位於共用虛擬私有雲網路,請建立防火牆規則:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --project=HOST_PROJECT \
    --network=SHARED_VPC \
    --direction=INGRESS \
    --allow=tcp:0-65535 \
    --source-ranges=130.211.0.0/22,35.191.0.0/16

更改下列內容:

  • FIREWALL_RULE_NAME:您選擇的新防火牆規則名稱。
  • HOST_PROJECT:共用虛擬私有雲主專案的 ID。
  • SHARED_VPC:共用 VPC 網路的名稱。

已知問題

本節說明多叢集 Ingress 的已知問題。

欄位 config_membership 的 InvalidValueError

已知問題會導致 Google Cloud CLI 無法與多叢集 Ingress 互動。 這個問題是在 346.0.0 版中出現,並在 348.0.0 版中修正。 我們不建議搭配使用 gcloud CLI 346.0.0 和 347.0.0 版與多叢集 Ingress。

「resource」欄位的值無效

Google Cloud Armor 無法與下列 GKE 版本執行的多叢集 Ingress 設定叢集通訊:

  • 1.18.19-gke.1400 以上版本
  • 1.19.10-gke.700 以上版本
  • 1.20.6-gke.700 以上版本

設定 Google Cloud Armor 安全性政策時,系統會顯示下列訊息:

Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist

如要避免這個問題,請將設定叢集升級至 1.21 以上版本,或使用下列指令更新 BackendConfig CustomResourceDefinition

kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'

後續步驟