Workload Identity 叢集驗證功能可讓您使用短期權杖和 Workload Identity Federation,為 Distributed Cloud 軟體 (僅限裸機) 建立及保護叢集。這種做法會以 OAuth 2.0 存取權杖取代永久服務帳戶金鑰,減少維護負擔,並消除長期憑證的安全風險。
這項功能只能在建立新叢集時啟用。這項功能適用於 1.33 以上版本,以及 1.30、1.31 和 1.32 的預先發布版。您無法更新現有叢集來使用這項功能。如要瞭解其他限制,請參閱「限制」一節。
Workload Identity 叢集驗證的運作方式
服務帳戶的短期憑證會以 OAuth 2.0 存取權杖的形式提供。存取權杖預設會在 1 小時後失效。同樣地,映像檔提取權杖預設也會在 1 小時後失效。
相較之下,金鑰模式是建立及保護叢集的標準方法,會使用下載的服務帳戶金鑰。建立自行管理的叢集 (管理員、混合式或獨立叢集) 時,請指定下載金鑰的路徑。接著,金鑰會以 Secret 的形式儲存在叢集和任何代管使用者叢集中。根據預設,服務帳戶金鑰不會過期,如果管理不當,可能會產生安全性風險。如要瞭解如何設定服務帳戶金鑰的到期時間,請參閱「使用者自行管理金鑰的到期時間」。
相較於使用服務帳戶金鑰,Workload Identity 叢集驗證有兩大優點:
提升安全性:如未妥善管理服務帳戶金鑰,可能會產生安全性風險,OAuth 2.0 權杖和 Workload Identity Federation 是服務帳戶金鑰的最佳替代方案。如要進一步瞭解服務帳戶權杖,請參閱「短期服務帳戶憑證」。如要進一步瞭解 Workload Identity Federation,請參閱「 Workload Identity Federation」。
減少維護工作:服務帳戶金鑰需要更多維護工作。定期輪替及保護這些金鑰,可能會造成重大的管理負擔。
事前準備
在下列各節中,您將建立服務帳戶,並授予 Workload Identity 叢集驗證所需的角色。本文件中的設定操作說明並非取代「設定 Google Cloud資源」中的操作說明,而是除了標準 Distributed Cloud 軟體專用安裝必要條件外,還需要完成的步驟。Workload Identity 叢集驗證所需的服務帳戶,與「設定Google Cloud 資源」一節所述的服務帳戶類似,但名稱不重複,因此不會干擾使用預設服務帳戶金鑰的叢集。
Workload Identity 叢集驗證所需的服務帳戶,會因預先發布版和正式發布版而異,如下表所示:
1.33 以上版本
| 服務帳戶 | 目的 | 角色 |
|---|---|---|
admin-sa |
您可以使用這個服務帳戶產生權杖。每個權杖都具備與服務帳戶角色相關聯的權限。 |
roles/gkehub.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountTokenCreatorroles/iam.workloadIdentityPoolAdmin*roles/logging.adminroles/monitoring.adminroles/resourcemanager.projectIamAdmin
|
baremetal-gcr |
Google Distributed Cloud 會使用這個服務帳戶,從 Artifact Registry 下載容器映像檔。 | 無 |
*只有 1.34 以上版本才需要 roles/iam.workloadIdentityPoolAdmin IAM 角色。
1.30-1.32
| 服務帳戶 | 目的 | 角色 |
|---|---|---|
admin-sa |
您可以使用這個服務帳戶產生權杖。每個權杖都具備與服務帳戶角色相關聯的權限。 |
roles/gkehub.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountTokenCreatorroles/logging.adminroles/monitoring.admin
|
baremetal-controller |
Connect 代理程式會使用這個服務帳戶,維持叢集與 Google Cloud 之間的連線,並向 機群註冊叢集。這個服務帳戶也會重新整理 baremetal-gcr 服務帳戶的權杖。 |
roles/gkehub.adminroles/monitoring.dashboardEditorroles/serviceusage.serviceUsageViewer
|
baremetal-cloud-ops |
Stackdriver 代理程式會使用這個服務帳戶,將叢集的記錄檔和指標匯出至 Cloud Logging 和 Cloud Monitoring。 |
roles/kubernetesmetadata.publisherroles/logging.logWriterroles/monitoring.dashboardEditorroles/monitoring.metricWriterroles/monitoring.viewerroles/opsconfigmonitoring.resourceMetadata.writerroles/serviceusage.serviceUsageViewerroles/stackdriver.resourceMetadata.writer
|
baremetal-gcr |
Google Distributed Cloud 會使用這個服務帳戶,從 Artifact Registry 下載容器映像檔。 | 無 |
設定服務帳戶
下列各節說明如何建立必要的服務帳戶,並授予 Workload Identity 叢集驗證所需的角色。如需服務帳戶及其必要角色的清單,請參閱上一節的表格。
建立服務帳戶
如要建立 Workload Identity 叢集驗證的服務帳戶,請按照下列步驟操作:
在管理員工作站登入 Google Cloud CLI:
gcloud auth login建立 Workload Identity 叢集驗證所需的服務帳戶:
admin-sa服務帳戶名稱可任意指定。如果名稱在專案中造成衝突,您可以變更名稱。Workload Identity 叢集驗證的其他服務帳戶有名稱預設值,但您也可以自訂。1.33 以上版本
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID將
PROJECT_ID替換為Google Cloud 專案 ID。1.30-1.32
```sh gcloud iam service-accounts create admin-sa
--project=PROJECT_IDgcloud iam service-accounts create baremetal-controller
--project=PROJECT_IDgcloud iam service-accounts create baremetal-cloud-ops
--project=PROJECT_IDgcloud iam service-accounts create baremetal-gcr
--project=PROJECT_ID ```將
PROJECT_ID替換為Google Cloud 專案 ID。
新增服務帳戶的身分與存取權管理政策繫結
請按照下列步驟,將必要的 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 Federation
如要透過 GKE 適用的 Workload Identity 聯盟提供 Google Cloud 存取權,請建立 IAM 允許政策,將特定Google Cloud 資源的存取權授予與應用程式身分對應的主體。在這種情況下,Workload Identity Federation 會將存取權授予叢集中的特定運算子。如要進一步瞭解 Workload Identity Federation for GKE,請參閱 IAM 說明文件中的「Workload Identity Federation」。
1.33 以上版本
如果叢集版本的 Workload Identity 叢集驗證功能已正式發布,請使用 bmctl configure
projects 指令,為叢集設定 Workload Identity Federation。建立管理員叢集和建立使用者叢集的步驟中,已包含這個指令。
使用登錄檔鏡像為叢集提取容器映像檔時,為避免 containerd 不穩定,您必須新增 baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false" 叢集註解。這個註解適用於 1.33.200-gke.70 以上版本:
---
...
registryMirrors:
- endpoint: https://198.51.20.1:5000
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
hosts:
- somehost.io
- otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: admin1
namespace: cluster-admin1
annotations:
baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false"
spec:
type: admin
anthosBareMetalVersion: 1.33.200-gke.70
...
1.30-1.32
如果叢集版本的 Workload Identity 叢集驗證功能處於預先發布版,您必須按照下列各節所述,手動為叢集設定 Workload Identity Federation。
為叢集運算子新增 IAM 政策繫結
下列指令會授予 anthos-cluster-operator Kubernetes 服務帳戶模擬 baremetal-controller 服務帳戶的能力,並代表叢集與 Google Cloud 資源互動:
針對已設定 Workload Identity 叢集驗證 (或計劃使用 Workload Identity 叢集驗證) 的每個叢集 (包括 bootstrap 叢集),授予叢集中的
anthos-cluster-operator模擬baremetal-controller服務帳戶的能力:在下列指令中,
principalSet由 workload identity pool 和kube-system命名空間中的 Kubernetes 服務帳戶anthos-cluster-operator組成。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-logginggke-metrics-agentkubestore-collectormetadata-agentstackdriver-log-forwarder
針對每個已設定或預計使用 Workload Identity 叢集驗證功能的叢集 (包括 bootstrap 叢集),授予叢集中的 Google Cloud Observability 運算子模擬
baremetal-cloud-ops服務帳戶的能力:在下列各指令中,
principalSet是由 workload identity pool 和 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 Federation。
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 Federation。
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 projectsbmctl create clusterbmctl register bootstrapbmctl reset clusterbmctl upgrade cluster
bmctl register bootstrap 支援使用 GCP_ACCESS_TOKEN 環境變數,為 Workload Identity 叢集驗證,但僅限 Google Distributed Cloud 1.34.0 以上版本。如果是 1.34.0 之前的版本,您必須使用服務帳戶金鑰檔案來驗證 bmctl register bootstrap。
如果 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
sh 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 下載容器映像檔的服務帳戶電子郵件名稱。
限制
如果僅針對裸機使用 Distributed Cloud 軟體的 Workload Identity 叢集驗證,則不支援下列功能:
- 使用 Proxy 伺服器
- VPC Service Controls
- 更新現有的金鑰模式叢集,改用 Workload Identity 叢集驗證
- 使用 GKE On-Prem API 用戶端 (例如 Google Cloud CLI、Terraform 或 Google Cloud 控制台) 管理叢集生命週期