Workload Identity 叢集驗證

本文說明如何設定及使用 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 LoggingCloud 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 叢集驗證的服務帳戶,請按照下列步驟操作:

  1. 在管理工作站上登入 Google Cloud CLI:

    gcloud auth login
    
  2. 為 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 Cloud

    1.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 以上版本

  1. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 授予 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
    

設定驗證方法

請按照下列步驟設定驗證流程,使用短期權杖驗證叢集作業:

  1. 在管理工作站上登入 Google Cloud CLI:

    gcloud auth login
    
  2. 在管理工作站上,為 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 替換為下載的金鑰檔案路徑 (包括檔案名稱)。

  3. 在管理工作站上,建立 GOOGLE_APPLICATION_CREDENTIALS 環境變數,並將值設為下載的服務帳戶金鑰:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. 在管理工作站上,建立 GCP_ACCESS_TOKEN 環境變數,其值為 admin-sa 服務帳戶建立的存取權杖:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    根據預設,存取權杖的效期為 1 小時。

  5. 確認權杖是由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 資源互動:

  1. 針對設定為 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
    

    更改下列內容:

    • PROJECT_NUM:系統為專案自動產生的專屬 ID

    • REGION:叢集的機群成員位置,預設為 global。詳情請參閱「車隊成員位置」。

    • CLUSTER_NAME:叢集名稱。預設啟動叢集名稱為 bmctl-MACHINE_NAME

  2. 驗證 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
  1. 針對設定 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
    
  2. 驗證 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 叢集驗證的叢集,最明顯的叢集設定差異在於您不必指定已下載服務帳戶金鑰的路徑。

  1. 在設定檔中填寫叢集設定時,請將憑證區段中的服務帳戶金鑰路徑留空,如下列範例所示:

    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
      ...
    
  2. 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
      ...
    
  3. 在管理員工作站上,使用新擷取的存取權杖更新 GCP_ACCESS_TOKEN 環境變數:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。使用 Workload Identity 叢集驗證時,bmctl 會檢查權杖到期時間。如果權杖在 1800 秒 (30 分鐘) 內到期,bmctl 會回報錯誤並結束。

  4. 為要建立的叢集設定 Workload Identity Federation:

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. 執行 bmctl create cluster 指令來建立管理員叢集。

1.30-1.32

使用 Workload Identity 叢集驗證的叢集,最明顯的叢集設定差異在於您不必指定已下載服務帳戶金鑰的路徑。

  1. 在設定檔中填寫叢集設定時,請將憑證區段中的服務帳戶金鑰路徑留空,如下列範例所示:

    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
      ...
    
  2. 在管理工作站上,為 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 替換為下載的金鑰檔案路徑 (包括檔案名稱)。

  3. 使用 admin-sa 服務帳戶授權存取 Google Cloud :

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. 刪除下載的 JSON 金鑰檔案:

    rm TMP_KEY_FILE_PATH
    

    存取權杖的效期很短,因此您通常需要先重新產生權杖,才能執行叢集作業的 bmctl 指令,例如建立、升級或重設叢集。

  5. 在管理工作站上,建立 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 小時)。

  6. 執行 bmctl create cluster 指令來建立管理員叢集。

建立使用者叢集

建立管理員叢集的步驟在預先發布版 (1.30 至 1.32 版) 和正式版 (1.33 以上版本) 中略有不同。正式發布步驟會使用 bmctl configure projects 指令,為叢集設定 Workload Identity 聯盟。

1.33 以上版本

  1. 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 指令,例如建立、升級或重設叢集。

  2. 在管理員工作站上,使用新擷取的存取權杖更新 GCP_ACCESS_TOKEN 環境變數:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    根據預設,存取權杖的生命週期為 3600 秒 (1 小時)。

  3. 為要建立的叢集設定 Workload Identity Federation:

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. 使用 kubectl 部署使用者叢集資訊清單:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

更改下列內容:

  • USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑。

  • ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。

1.30-1.32

  1. 在管理工作站上,為 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 替換為下載的金鑰檔案路徑 (包括檔案名稱)。

  2. 使用 admin-sa 服務帳戶授權存取 Google Cloud :

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  3. 刪除下載的 JSON 金鑰檔案:

    rm TMP_KEY_FILE_PATH
    

    存取權杖的效期很短,因此您通常需要先重新產生權杖,才能執行叢集作業的 bmctl 指令,例如建立、升級或重設叢集。

  4. 在管理工作站上,建立 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 小時)。

  5. 執行 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 服務帳戶。因此,只有這個服務帳戶可以自訂。

  1. 確認要使用的服務帳戶具備「事前準備」表格中列出的角色。

  2. 為叢集設定檔加上註解,指定 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

  1. 請確認要使用的服務帳戶具備「事前準備」表格中列出的角色。

  2. 為叢集設定檔加上註解,指定 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 控制台) 管理叢集生命週期

後續步驟