本文說明如何設定及使用 Workload Identity 叢集驗證,適用於裸機上的 Google Distributed Cloud (僅限軟體)。Workload Identity 叢集驗證會使用短期權杖和 Workload Identity 聯盟,建立及保護叢集,而非服務帳戶金鑰。服務帳戶的短期憑證採用 OAuth 2.0 存取權杖的形式。存取權杖預設會在 1 小時後失效。同樣地,根據預設,映像檔提取權杖也會在 1 小時後失效。
相較之下,金鑰模式是建立及保護叢集的標準方法,會使用下載的服務帳戶金鑰。建立自行管理的 (管理、混合或獨立) 叢集時,請指定已下載金鑰的路徑。然後,這些金鑰會以密碼的形式儲存在叢集和所有受管理的使用者叢集中。服務帳戶金鑰預設不會過期,如果管理不當就會帶來安全風險。如要瞭解如何設定服務帳戶金鑰的到期時間,請參閱「使用者管理金鑰的到期時間」。
相較於使用服務帳戶金鑰,Workload Identity 叢集驗證有兩大優點:
提升安全性:如未妥善管理服務帳戶金鑰,可能會產生安全性風險,OAuth 2.0 權杖和 Workload Identity 聯盟是服務帳戶金鑰的最佳替代方案。如要進一步瞭解服務帳戶權杖,請參閱「短期服務帳戶憑證」。如要進一步瞭解 Workload Identity Federation,請參閱「 Workload Identity Federation」。
減少維護作業:服務帳戶金鑰需要更多維護作業。 定期輪替及保護這些金鑰可能會造成龐大的管理負擔。
我們在 1.30 版搶先版中推出 Workload Identity 叢集驗證功能,並在 1.33 以上版本中正式發布。只有在建立新叢集時,才能啟用 Workload Identity 叢集驗證。更新或升級期間,您無法將現有叢集設定為使用 Workload Identity 叢集驗證。如需其他限制,請參閱「限制」一節。
本文適用於負責設定、監控及管理基礎技術基礎架構生命週期的管理員、架構師和營運人員。如要進一步瞭解Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
事前準備
在接下來的章節中,您將建立服務帳戶,並授予 Workload Identity 叢集驗證所需的角色。本文中的設定說明並非設定 Google Cloud資源中的說明替代方案,而是標準 Google Distributed Cloud 軟體專用安裝作業的必要先決條件。Workload Identity 叢集驗證所需的服務帳戶,與「設定Google Cloud 資源」一文所述的服務帳戶類似,但名稱獨一無二,因此不會干擾使用預設服務帳戶金鑰的叢集。
Workload Identity 叢集驗證所需的服務帳戶,在搶先版和正式版中有所不同,詳情請參閱下表:
1.33 以上版本
服務帳戶 | 目的 | 角色 |
---|---|---|
admin-sa |
您可以使用這個服務帳戶產生權杖。每個權杖都具有與服務帳戶角色相關聯的權限。 |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin roles/resourcemanager.projectIamAdmin
|
baremetal-gcr |
Google Distributed Cloud 會使用這個服務帳戶,從 Artifact Registry 下載容器映像檔。 | 無 |
1.30-1.32
服務帳戶 | 目的 | 角色 |
---|---|---|
admin-sa |
您可以使用這個服務帳戶產生權杖。每個權杖都具有與服務帳戶角色相關聯的權限。 |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin
|
baremetal-controller |
Connect 代理程式會使用這個服務帳戶來維持叢集和 Google Cloud 之間的連線,並向 機群註冊叢集。這個服務帳戶也會為 baremetal-gcr 服務帳戶更新權杖。 |
roles/gkehub.admin roles/monitoring.dashboardEditor roles/serviceusage.serviceUsageViewer
|
baremetal-cloud-ops |
Stackdriver 代理程式會使用這個服務帳戶,將叢集的記錄檔和指標匯出至 Cloud Logging 和 Cloud Monitoring。 |
roles/kubernetesmetadata.publisher roles/logging.logWriter roles/monitoring.dashboardEditor roles/monitoring.metricWriter roles/monitoring.viewer roles/opsconfigmonitoring.resourceMetadata.writer roles/serviceusage.serviceUsageViewer roles/stackdriver.resourceMetadata.writer
|
baremetal-gcr |
Google Distributed Cloud 會使用這個服務帳戶,從 Artifact Registry 下載容器映像檔。 | 無 |
設定服務帳戶
以下章節包含建立必要服務帳戶的說明,並介紹如何授予這些帳戶 Workload Identity 叢集驗證所需的角色。如需服務帳戶和必要角色的清單,請參閱前一節的表格。
建立服務帳戶
如要建立 Workload Identity 叢集驗證的服務帳戶,請按照下列步驟操作:
在管理工作站上登入 Google Cloud CLI:
gcloud auth login
為 Workload Identity 叢集驗證建立必要的服務帳戶:
admin-sa
服務帳戶名稱可任意指定。如果名稱與專案中的其他名稱衝突,您可以變更名稱。工作負載身分識別叢集驗證的其他服務帳戶都有預先決定的名稱,您可以視需要自訂這些名稱。1.33 以上版本
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
將
PROJECT_ID
替換為專案 ID。Google Cloud1.30-1.32
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-controller \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-cloud-ops \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
將
PROJECT_ID
替換為專案 ID。Google Cloud
為服務帳戶新增 Identity and Access Management 政策繫結
如要將必要的 Identity and Access Management 政策繫結套用至新服務帳戶,請按照下列步驟操作:
1.33 以上版本
為
admin-sa
服務帳戶新增必要角色的 IAM 政策繫結:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/resourcemanager.projectIamAdmin
1.30-1.32
為
admin-sa
服務帳戶新增必要角色的 IAM 政策繫結:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin
為
baremetal-controller
服務帳戶新增必要角色的 IAM 政策繫結:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer
為
baremetal-cloud-ops
服務帳戶新增必要角色的 IAM 政策繫結:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/kubernetesmetadata.publisher gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/opsconfigmonitoring.resourceMetadata.writer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/stackdriver.resourceMetadata.writer
授予
baremetal-controller
服務帳戶權限,代表baremetal-gcr
服務帳戶產生存取權杖:gcloud iam service-accounts add-iam-policy-binding \ baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
設定驗證方法
請按照下列步驟設定驗證流程,使用短期權杖驗證叢集作業:
在管理工作站上登入 Google Cloud CLI:
gcloud auth login
在管理工作站上,為
admin-sa
服務帳戶建立並下載金鑰:授權
admin-sa
服務帳戶存取權時,需要使用這組金鑰。gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
將
TMP_KEY_FILE_PATH
替換為下載的金鑰檔案路徑 (包括檔案名稱)。在管理工作站上,建立
GOOGLE_APPLICATION_CREDENTIALS
環境變數,並將值設為下載的服務帳戶金鑰:export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
在管理工作站上,建立
GCP_ACCESS_TOKEN
環境變數,其值為admin-sa
服務帳戶建立的存取權杖:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
根據預設,存取權杖的效期為 1 小時。
確認權杖是由
admin-sa
服務帳戶產生,且到期時間正確:curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
回應應包含類似下列的行:
... "exp": "1759512810", "expires_in": "3589", ...
到期值以秒為單位,且應小於
3600
,表示權杖會在不到一小時內到期。
為叢集設定 Workload Identity 聯盟
如要透過 GKE 適用的工作負載身分聯盟提供存取權,請建立 IAM 允許政策,將特定Google Cloud 資源的存取權授予與應用程式身分相應的主體。 Google Cloud 在此情況下,Workload Identity Federation 會授予叢集中特定運算子的存取權。如要進一步瞭解 GKE 適用的 Workload Identity Federation,請參閱 IAM 說明文件中的「Workload Identity Federation」。
1.33 以上版本
如果叢集版本中 Workload Identity 叢集驗證功能已正式發布,您可以使用 bmctl configure
projects
指令,為叢集設定 Workload Identity 聯盟。這個指令已納入建立管理員叢集和建立使用者叢集的步驟中。
1.30-1.32
如果叢集版本中 Workload Identity 叢集驗證功能處於搶先版階段,您必須按照下列章節所述,手動為叢集設定 Workload Identity 聯盟。
為叢集運算子新增 IAM 政策繫結
下列指令會授予 anthos-cluster-operator
Kubernetes 服務帳戶模擬 baremetal-controller
服務帳戶的能力,並代表叢集與 Google Cloud 資源互動:
針對設定為 Workload Identity 叢集驗證 (或打算使用 Workload Identity 叢集驗證) 的每個叢集 (包括啟動程序叢集),在叢集中授予
anthos-cluster-operator
模擬baremetal-controller
服務帳戶的權限:在下列指令中,
principalSet
包含工作負載身分識別集區和 Kubernetes 服務帳戶anthos-cluster-operator
,位於kube-system
命名空間中。gcloud iam service-accounts add-iam-policy-binding \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
更改下列內容:
驗證
baremetal-controller
服務帳戶的政策繫結:gcloud iam service-accounts get-iam-policy \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
回應內容應如下所示:
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator role: roles/iam.workloadIdentityUser etag: BwYoN3QLig0= version: 1
為 Google Cloud Observability 運算子新增 IAM 政策繫結
下列指令會授予下列 Google Cloud Observability Kubernetes 服務帳戶模擬 baremetal-cloud-ops
服務帳戶的能力,並代表叢集與 Google Cloud 資源互動:
cloud-audit-logging
gke-metrics-agent
kubestore-collector
metadata-agent
stackdriver-log-forwarder
針對設定 Workload Identity 叢集驗證 (或打算使用 Workload Identity 叢集驗證) 的每個叢集 (包括啟動程序叢集),授予叢集中的 Google Cloud Observability 運算子模擬
baremetal-cloud-ops
服務帳戶的能力:在下列每個指令中,
principalSet
包含工作負載身分集區和 Kubernetes 服務帳戶,例如kube-system
命名空間中的cloud-audit-logging
。gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
驗證
baremetal-cloud-ops
服務帳戶的政策繫結:gcloud iam service-accounts get-iam-policy \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
回應內容應如下所示:
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder role: roles/iam.workloadIdentityUser etag: BwYhT4gL-dY= version: 1
建立管理員叢集
建立管理員叢集的步驟在預先發布版 (1.30 至 1.32 版) 和正式版 (1.33 以上版本) 中略有不同。正式發布步驟會使用 bmctl configure
projects
指令,為叢集設定 Workload Identity 聯盟。
1.33 以上版本
使用 Workload Identity 叢集驗證的叢集,最明顯的叢集設定差異在於您不必指定已下載服務帳戶金鑰的路徑。
在設定檔中填寫叢集設定時,請將憑證區段中的服務帳戶金鑰路徑留空,如下列範例所示:
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
將
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
註解新增至叢集設定檔:gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
在管理員工作站上,使用新擷取的存取權杖更新
GCP_ACCESS_TOKEN
環境變數:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。使用 Workload Identity 叢集驗證時,
bmctl
會檢查權杖到期時間。如果權杖在 1800 秒 (30 分鐘) 內到期,bmctl
會回報錯誤並結束。為要建立的叢集設定 Workload Identity Federation:
bmctl configure projects --project-id=PROJECT_ID \ --admin-cluster=ADMIN_CLUSTER_NAME
執行
bmctl create cluster
指令來建立管理員叢集。
1.30-1.32
使用 Workload Identity 叢集驗證的叢集,最明顯的叢集設定差異在於您不必指定已下載服務帳戶金鑰的路徑。
在設定檔中填寫叢集設定時,請將憑證區段中的服務帳戶金鑰路徑留空,如下列範例所示:
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
在管理工作站上,為
admin-sa
服務帳戶建立並下載金鑰:授權
admin-sa
服務帳戶存取權時需要這組金鑰,授權完成後請立即刪除。gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
將
TMP_KEY_FILE_PATH
替換為下載的金鑰檔案路徑 (包括檔案名稱)。使用
admin-sa
服務帳戶授權存取 Google Cloud :gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
刪除下載的 JSON 金鑰檔案:
rm TMP_KEY_FILE_PATH
存取權杖的效期很短,因此您通常需要先重新產生權杖,才能執行叢集作業的
bmctl
指令,例如建立、升級或重設叢集。在管理工作站上,建立
GCP_ACCESS_TOKEN
環境變數,其值為admin-sa
服務帳戶建立的存取權杖:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。
執行
bmctl create cluster
指令來建立管理員叢集。
建立使用者叢集
建立管理員叢集的步驟在預先發布版 (1.30 至 1.32 版) 和正式版 (1.33 以上版本) 中略有不同。正式發布步驟會使用 bmctl configure
projects
指令,為叢集設定 Workload Identity 聯盟。
1.33 以上版本
將
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
註解新增至叢集設定檔:apiVersion: v1 kind: Namespace metadata: name: cluster-USER_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: USER_CLUSTER_NAME namespace: cluster-USER_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
存取權杖的效期很短,因此您通常需要先重新產生權杖,才能執行叢集作業的
bmctl
指令,例如建立、升級或重設叢集。在管理員工作站上,使用新擷取的存取權杖更新
GCP_ACCESS_TOKEN
環境變數:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。
為要建立的叢集設定 Workload Identity Federation:
bmctl configure projects --project-id=PROJECT_ID \ --user-clusters=USER_CLUSTER_NAME
使用
kubectl
部署使用者叢集資訊清單:kubectl apply -f USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_KUBECONFIG
更改下列內容:
USER_CLUSTER_CONFIG
:使用者叢集設定檔的路徑。ADMIN_KUBECONFIG
:管理員叢集 kubeconfig 檔案的路徑。
1.30-1.32
在管理工作站上,為
admin-sa
服務帳戶建立並下載金鑰:授權
admin-sa
服務帳戶存取權時需要這組金鑰,授權完成後請立即刪除。gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
將
TMP_KEY_FILE_PATH
替換為下載的金鑰檔案路徑 (包括檔案名稱)。使用
admin-sa
服務帳戶授權存取 Google Cloud :gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
刪除下載的 JSON 金鑰檔案:
rm TMP_KEY_FILE_PATH
存取權杖的效期很短,因此您通常需要先重新產生權杖,才能執行叢集作業的
bmctl
指令,例如建立、升級或重設叢集。在管理工作站上,建立
GCP_ACCESS_TOKEN
環境變數,其值為admin-sa
服務帳戶建立的存取權杖:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。
執行
bmctl create cluster
指令來建立使用者叢集。
其他叢集作業
如果叢集使用 Workload Identity 叢集驗證,下列 bmctl
指令必須將 GCP_ACCESS_TOKEN
環境變數設為有效的有效存取權杖:
bmctl configure projects
bmctl create cluster
bmctl reset cluster
bmctl upgrade cluster
如果 bmctl
偵測到已設定 GCP_ACCESS_TOKEN
環境變數,就會執行權杖驗證:
如果權杖有效,
bmctl
就會使用該權杖執行叢集作業。如果權杖無效,請擷取新權杖:
存取權杖的效期很短,因此您通常需要先重新產生權杖,才能執行叢集作業的
bmctl
指令,例如建立、升級或重設叢集。在管理員工作站上,使用新擷取的存取權杖更新GCP_ACCESS_TOKEN
環境變數:1.33 以上版本
export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
1.30-1.32
export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。使用 Workload Identity 叢集驗證時,
bmctl
會檢查權杖到期時間。如果權杖在 1800 秒 (30 分鐘) 內到期,bmctl
會回報錯誤並結束。
自訂
只要服務帳戶具有必要角色繫結,您就能使用名稱不重複的服務帳戶進行 Workload Identity 叢集驗證。
1.33 以上版本
根據預設,1.33 以上版本叢集的 Workload Identity 叢集驗證只會使用 baremetal-gcr
服務帳戶。因此,只有這個服務帳戶可以自訂。
確認要使用的服務帳戶具備「事前準備」表格中列出的角色。
為叢集設定檔加上註解,指定 Workload Identity 叢集驗證服務帳戶的自訂名稱:
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
將 CUSTOM_AR_GSA
替換為 Google Distributed Cloud 用來從 Artifact Registry 下載容器映像檔的服務帳戶電子郵件名稱。
1.30-1.32
請確認要使用的服務帳戶具備「事前準備」表格中列出的角色。
為叢集設定檔加上註解,指定 Workload Identity 叢集驗證服務帳戶的自訂名稱:
指定自訂名稱可讓您使用現有的服務帳戶。請務必確保您指定的自訂服務帳戶名稱互不相同。我們不支援使用單一服務帳戶取代兩個以上的預設服務帳戶。
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA" baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA" baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.30.0-gke.1930 ...
更改下列內容:
CUSTOM_CONTROLLER_GSA
:Connect 代理程式使用的服務帳戶電子郵件名稱,用於維持叢集與 Google Cloud之間的連線,以及註冊叢集。CUSTOM_CLOUD_OPS_GSA
:Stackdriver 代理程式用來將叢集的記錄檔和指標匯出至 Cloud Logging 和 Cloud Monitoring 的服務帳戶電子郵件名稱。CUSTOM_AR_GSA
:Google Distributed Cloud 用來從 Artifact Registry 下載容器映像檔的服務帳戶電子郵件名稱。
限制
在裸機上使用 Google Distributed Cloud (僅限軟體) 的 Workload Identity 叢集驗證時,系統不支援下列功能:
- 使用 Proxy 伺服器
- VPC Service Controls
- 更新現有的金鑰模式叢集,改用 Workload Identity 叢集驗證
- 使用 GKE On-Prem API 用戶端 (例如 Google Cloud CLI、Terraform 或 Google Cloud 控制台) 管理叢集生命週期