連結 AKS 叢集

連結叢集是指將叢集連線至 Google Cloud ,方法是向 Google Cloud 機群管理註冊叢集,並在叢集上安裝 GKE 連接的叢集軟體。

您可以使用 gcloud CLI 或 Terraform 連結叢集。如要瞭解如何使用 Terraform 建立及連結 AKS 叢集,請查看 GKE 連結叢集的範例 GitHub 存放區

如要使用 gcloud 連結 AKS 叢集,請執行下列步驟。

必要條件

請確保叢集符合叢集需求條件

附加叢集時,您必須指定下列項目:

  • 支援的 Google Cloud 行政區
  • 平台版本

管理區域是 Google Cloud 區域 ,用於管理附加叢集。您可以選擇任何支援的區域,但最佳做法是選擇最靠近叢集的地理區域。管理區域不會儲存任何使用者資料。

平台版本是指要安裝在叢集上的 GKE 附加叢集版本。如要列出所有支援的版本,請執行下列指令:

gcloud container attached get-server-config  \
  --location=GOOGLE_CLOUD_REGION

GOOGLE_CLOUD_REGION 替換為要從中管理叢集的Google Cloud 位置名稱。

平台版本編號

這些文件將 GKE 附加叢集版本稱為平台版本,以區別於 Kubernetes 版本。GKE 附加叢集採用的版本編號慣例與 GKE 相同,例如 1.21.5-gke.1。附加或更新叢集時,您必須選擇平台版本,其子版本與叢集的 Kubernetes 版本相同,或低一個層級。舉例來說,您可以將執行 Kubernetes v1.22.* 的叢集,附加至 GKE 附加叢集平台版本 1.21.* 或 1.22.*。

這樣一來,您就能先將叢集升級至下一個子版本,再升級 GKE 連結的叢集。

連結 AKS 叢集

如要將 AKS 叢集附加至 Google Cloud 機群管理,請執行下列指令:

  1. 確認 kubeconfig 檔案中包含要附加的叢集項目:

    az aks get-credentials -n AKS_CLUSTER_NAME \
      -g RESOURCE_GROUP
    
  2. 執行下列指令,擷取叢集的 kubeconfig 環境,並儲存在 KUBECONFIG_CONTEXT 環境變數中:

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  3. 視您是使用預設的私有 OIDC 簽發者,還是實驗性公開簽發者設定叢集而定,註冊叢集的指令會略有不同。選擇適用於叢集的分頁:

    私人 OIDC 核發者 (預設)

    使用 gcloud container attached clusters register 指令註冊叢集:

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=aks \
      --context=KUBECONFIG_CONTEXT \
      --has-private-issuer \
      --kubeconfig=KUBECONFIG_PATH
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。這個名稱可以與步驟 1 中使用的 AKS_CLUSTER_NAME 相同。CLUSTER_NAME 必須符合 RFC 1123 標籤名稱標準
    • GOOGLE_CLOUD_REGION:用來管理叢集的 Google Cloud 區域
    • PROJECT_NUMBER:要註冊叢集的機群主專案
    • PLATFORM_VERSION:叢集使用的平台版本
    • KUBECONFIG_CONTEXT:kubeconfig 中的內容,用於存取 AKS 叢集
    • KUBECONFIG_PATH:kubeconfig 的路徑

    公開 OIDC 核發者

    1. 使用下列指令擷取叢集的 OIDC 簽發者 URL:

        az aks show -n CLUSTER_NAME \
          -g RESOURCE_GROUP \
          --query "oidcIssuerProfile.issuerUrl" -otsv
      

      RESOURCE_GROUP 替換為叢集所屬的 AKS 資源群組。

      這項指令會輸出 OIDC 核發者的網址。請儲存這個值,以供日後使用。

    2. 執行下列指令,擷取叢集的 kubeconfig 環境,並儲存在 KUBECONFIG_CONTEXT 環境變數中:

      KUBECONFIG_CONTEXT=$(kubectl config current-context)
      
    3. 使用 gcloud container attached clusters register 指令註冊叢集:

      gcloud container attached clusters register CLUSTER_NAME \
        --location=GOOGLE_CLOUD_REGION \
        --fleet-project=PROJECT_NUMBER \
        --platform-version=PLATFORM_VERSION \
        --distribution=aks \
        --issuer-url=ISSUER_URL \
        --context=KUBECONFIG_CONTEXT \
        --kubeconfig=KUBECONFIG_PATH
      

      更改下列內容:

      • CLUSTER_NAME:叢集名稱。這個名稱可以與步驟 1 中使用的 AKS_CLUSTER_NAME 相同。CLUSTER_NAME 必須符合 RFC 1123 標籤名稱標準
      • GOOGLE_CLOUD_REGION:管理叢集的 Google Cloud 區域
      • PROJECT_NUMBER:叢集要註冊的 Fleet 主機專案
      • PLATFORM_VERSION:叢集使用的 GKE 附加叢集版本
      • ISSUER_URL:先前擷取的核發者網址
      • KUBECONFIG_CONTEXT:kubeconfig 中的內容,用於存取叢集 (如先前擷取)
      • KUBECONFIG_PATH:kubeconfig 的路徑

授權 Cloud Logging / Cloud Monitoring

如要讓 GKE 附加叢集建立系統記錄檔和指標並上傳至Google Cloud,必須先獲得授權。

如要授權 Kubernetes 工作負載身分 gke-system/gke-telemetry-agent 將記錄檔寫入 Google Cloud Logging,以及將指標寫入 Google Cloud Monitoring, 請執行下列指令:

gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
  --member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
  --role=roles/gkemulticloud.telemetryWriter

GOOGLE_PROJECT_ID 替換為叢集的 Google Cloud 專案 ID。

這個 IAM 繫結會授予 Google Cloud 專案中所有叢集上傳記錄和指標的權限。您只需要在為專案建立第一個叢集後執行這項指令。

除非 Google Cloud 專案中已建立至少一個叢集,否則新增這項 IAM 繫結會失敗。這是因為在建立叢集之前,系統不會佈建所參照的工作負載身分集區 (GOOGLE_PROJECT_ID.svc.id.goog)。