如果您要在 Google Cloud上註冊 GKE 叢集,可能需要先執行下列一或多項操作,才能註冊叢集,具體視您選擇的註冊選項而定。本指南假設您已完成叢集註冊的一般必要條件。
啟用 GKE 適用的工作負載身分聯盟
建議您註冊已啟用機群 Workload Identity Federation 的 GKE 叢集,這樣叢集上的應用程式就能以一致的方式向 Google Cloud API 和服務進行驗證。如要進一步瞭解啟用機群 Workload Identity 聯盟的優點,請參閱「使用機群 Workload Identity 聯盟」。
如要使用這項功能,請務必先在叢集上啟用 GKE 適用的 Workload Identity 聯盟,再進行註冊。如果叢集未啟用 GKE 適用的工作負載身分聯盟,註冊採用機群工作負載身分聯盟的 GKE 叢集,可能會導致叢集中的工作負載主張身分的方式不一致,因此不支援這項設定。Autopilot 叢集預設會啟用 Workload Identity Federation for GKE。
gcloud
如要檢查叢集是否已啟用 GKE 適用的工作負載身分聯盟,請執行下列指令,列出叢集的工作負載身分集區。如果您尚未指定gcloud
的預設區域或地區,執行這項指令時,請指定 --region
或 --zone
旗標。
gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"
更改下列內容:
- CLUSTER_NAME:GKE 叢集的
name
。
如果看到類似下列的結果,表示叢集已啟用 Workload Identity Federation for GKE:
GKE_PROJECT_ID.svc.id.goog
如果沒有結果,表示 Workload Identity Federation for GKE 未啟用。按照「啟用 GKE 適用的工作負載身分聯盟」一文中的指示操作。
控制台
如要檢查叢集是否已啟用 Workload Identity Federation for GKE,請按照下列步驟操作:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
在叢集詳細資料頁面的「安全性」部分,確認「Workload Identity」列為「已啟用」。
如果 Workload Identity 處於「已停用」狀態,且您想啟用這項功能:
- 在叢集詳細資料頁面中,按一下 「編輯 Workload Identity」。
- 在「Edit Workload Identity」(編輯 Workload Identity) 對話方塊中,勾選「Enable Workload Identity」(啟用 Workload Identity) 核取方塊。
- 按一下 [儲存變更]。
授予權限,將叢集註冊至其他專案
在自有專案中向機群註冊 GKE 叢集時,除了「授予存取權限」一節所述權限外,不需要任何特殊權限。不過,如要將 GKE 叢集從自有專案 (GKE_PROJECT) 註冊至不同專案 (FLEET_HOST_PROJECT) 中的機群,FLEET_HOST_PROJECT 服務代理程式帳戶gcp-sa-gkehub
必須在 GKE_PROJECT 專案中具備 gkehub.serviceAgent
角色。這個角色會授予服務帳戶在該專案中管理叢集資源的權限。
如要檢查機群主專案 gcp-sa-gkehub
服務帳戶是否具備叢集專案的必要角色,請使用 gcloud CLI 或 Google Cloud 控制台,方法如下。
gcloud
執行下列指令:
gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub
其中 GKE_PROJECT_ID 是叢集專案的 ID。
如果機群主專案 gcp-sa-gkehub
在叢集專案中具有必要角色,輸出內容應會顯示 service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
。例如:
- members:
- serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
role: roles/gkehub.serviceAgent
控制台
選取叢集的專案後,前往 Google Cloud 控制台的「IAM & Admin」(IAM 與管理) 頁面。
選取「包含 Google 提供的角色授予項目」核取方塊,即可查看完整允許政策,包括服務代理程式。
如果機群主專案服務帳戶 gcp-sa-gkehub
在叢集專案中具備必要角色,這個帳戶應該會以 service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
形式顯示在清單中。
如果專案的 IAM 允許政策未列出服務代理,請按照下列步驟更新必要權限:
gcloud
如要授予
gcp-sa-gkehub
gkehub.serviceAgent
角色,請先確認這個服務帳戶存在於車隊主機專案中。如果您先前已在這個機群專案中註冊叢集,這個服務帳戶應該已經存在。您可以查看機群主專案的 IAM 允許政策,確認是否已啟用:gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
如要建立
gcp-sa-gkehub
服務帳戶,請執行下列指令:gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
這項指令應會輸出下列內容:
Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
執行下列指令,在兩個專案中將
roles/gkehub.serviceAgent
角色授予服務帳戶,並在叢集專案中授予roles/gkehub.crossProjectServiceAgent
角色:GKE_PROJECT_ID=GKE_PROJECT_ID FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)") gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \ --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \ --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \ --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.crossProjectServiceAgent
其中:
- GKE_PROJECT_ID 是 GKE 叢集的專案 ID。 Google Cloud
- FLEET_HOST_PROJECT_ID 是您要在當中註冊叢集的 Google Cloud 專案 ID。瞭解如何找到這個值。
如要確認系統已授予角色繫結,請再次執行下列指令:
gcloud projects get-iam-policy GKE_PROJECT_ID
若您看到服務帳戶名稱及
gkehub.serviceAgent
和gkehub.crossProjectServiceAgent
角色,表示系統已授予角色繫結。例如:- members: - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.serviceAgent - members: - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.crossProjectServiceAgent
設定 Terraform 的服務帳戶
如要使用 Terraform 註冊 Google Kubernetes Engine 叢集,您需要建立服務帳戶,供 Terraform 存取 Fleet API 來建立成員資格。
gcloud
請按照下列步驟建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
將
gkehub.admin
IAM 角色繫結至服務帳戶,讓 Terraform 能搭配 Fleet API 使用:FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/gkehub.admin"
如要使用 Terraform 建立新叢集,然後註冊該叢集,您也需要將
roles/container.admin
角色繫結至服務帳戶,這樣 Terraform 才能使用這個服務帳戶存取 GKE API 來建立叢集。FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/container.admin"
更改下列內容:
- FLEET_HOST_PROJECT_ID 是您要在當中註冊叢集的 Google Cloud 專案 ID。瞭解如何找到這個值。
- SERVICE_ACCOUNT_NAME 是您為 [服務帳戶]選擇的顯示名稱。
按照「使用
gcloud
建立服務帳戶 Google Cloud 」一文的說明,下載服務帳戶的私密金鑰 JSON 檔案。您需要這個檔案,才能使用 Terraform 建立及註冊叢集。
設定 Config Connector 的服務帳戶
如要使用 Config Connector 註冊 GKE 叢集,請按照下列步驟操作:
gcloud
確認您已安裝 Config Connector 外掛程式。Config Connector 版本應高於 1.47.0。
按照 Config Connector 操作說明建立服務帳戶。
將
gkehub.admin
IAM 角色繫結至這個服務帳戶,讓 Config Connector 可以使用這個服務帳戶存取 Fleet API:FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/gkehub.admin"
如要使用 Config Connector 建立新叢集,然後註冊叢集,您也需要將
roles/container.admin
角色繫結至服務帳戶,這樣 Config Connector 控制器才能使用這個服務帳戶存取 GKE API,進而建立叢集。FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/container.admin"
更改下列內容:
- FLEET_HOST_PROJECT_ID 是您要在當中註冊叢集的 Google Cloud 專案 ID。瞭解如何找到這個值。
- SERVICE_ACCOUNT_NAME 是您為 [服務帳戶]選擇的顯示名稱。
按照設定連接器操作說明,使用這個服務帳戶設定設定連接器。
後續步驟
按照操作說明註冊叢集。