步驟 11 (選用):設定 Workload Identity

Apigee hybrid 1.13 版支援 GKE 上的 Workload Identity,以及 AKS 和 EKS 上的 Workload Identity Federation。本指南的程序僅涵蓋在 GKE 上設定 Workload Identity。如果是 AKSEKS,請按照「在 AKS 和 EKS 上啟用 Workload Identity Federation」一文中的程序操作。

在 GKE 上設定 Workload Identity

Google Cloud 服務帳戶和 Kubernetes 服務帳戶

Google Cloud 服務帳戶是一種特殊的帳戶,可用於以服務帳戶本身的身份驗證,發出授權 API 呼叫。您可以為 Google Cloud 服務帳戶指派類似個別使用者的角色和權限。應用程式以服務帳戶身分進行驗證時,就能存取服務帳戶有權存取的所有資源。如要進一步瞭解 Google Cloud 服務帳戶,請參閱「服務帳戶總覽」。

您已在 步驟 4:建立服務帳戶中為 Apigee 混合式安裝程序建立 Google Cloud 服務帳戶。Apigee 會使用這些服務帳戶驗證混合式元件。

Kubernetes 服務帳戶與 Google Cloud 服務帳戶類似。Kubernetes 服務帳戶會為在 Pod 中執行的程序提供身分,並允許該程序向 API 伺服器進行驗證,類似於使用者驗證。如要進一步瞭解 Kubernetes 服務帳戶,請參閱「為 Pod 設定服務帳戶」。

如果您在覆寫檔案中將 gcp.workloadIdentity.enabled 設為 true,當您安裝或升級混合式元件時,Helm 圖表會為元件建立 Kubernetes 服務帳戶,就像您在步驟 10:使用 Helm 安裝 Apigee 混合式中所做的一樣。

在 GKE 上設定 Workload Identity 時,您會將 Google Cloud 服務帳戶與 Kubernetes 叢集中的 Kubernetes 服務帳戶建立關聯。這樣一來,Kubernetes 服務帳戶就能冒用 Google Cloud 服務帳戶,並使用其指派的角色和權限,對混合式元件進行驗證。

請按照下列操作說明,為專案設定 Workload Identity。

準備設定 Workload Identity

  1. 確認覆寫檔案中已啟用 Workload Identity。應在下列屬性中的覆寫檔案中啟用。
    • 必須提供 namespace。例如:
      instanceID: "hybrid-instance-1"
      namespace: "apigee"
      
    • 如果您為所有元件使用單一服務帳戶 (非正式版),請使用以下方式指定: gcp.workloadIdentity.gsa。例如:
        gcp:
          workloadIdentity:
            enabled: true
            gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
        
    • 如果您為每個元件 (正式版安裝) 使用個別的服務帳戶,請使用元件的 gsa 屬性指定服務帳戶。例如:
        logger:
          gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
        

    請參閱:gcp.workloadIdentity.enabled

  2. 使用下列指令,確認目前的 gcloud 設定已設為 Google Cloud 專案 ID:
    gcloud config get project
  3. 視需要設定目前的 gcloud 設定:

    gcloud config set project $PROJECT_ID
  4. 確認您的 GKE 叢集已啟用 Workload Identity。在步驟 1:建立叢集中建立叢集時,步驟 6 是啟用 Workload Identity。如要確認是否已啟用 Workload Identity,請執行下列指令:

    地區性叢集

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    區域叢集

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    輸出內容應如下所示:

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    如果結果顯示 null,請執行下列指令,為叢集啟用 Workload Identity:

    地區性叢集

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    區域叢集

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. 使用下列指令,為每個節點集區啟用 Workload Identity。這項作業最多可能需要 30 分鐘才能完成:

    地區性叢集

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    區域叢集

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    其中 NODE_POOL_NAME 是各個節點集區的名稱。在大多數 Apigee Hybrid 安裝作業中,兩個預設節點集區的名稱分別為 apigee-dataapigee-runtime

  6. 使用下列指令,確認 Workload Identity 已在節點集區中啟用:

    地區性叢集

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    區域叢集

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    輸出內容應如下所示:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        

設定 Workload Identity

請按照下列程序,為下列 Hybrid 元件啟用 Workload Identity:

  • apigee-datastore
  • apigee-telemetry
  • apigee-org
  • apigee-env

當您為 apigee-datastoreapigee-envapigee-orgapigee-telemetry 圖表搭配 --dry-run 標記執行 helm upgrade 時,輸出內容會包含您需要用來設定 Workload Identity 的正確 GSA 和 KSA 名稱的指令。

例如:

helm upgrade datastore apigee-datastore/ \
  --namespace APIGEE_NAMESPACE \
  -f overrides.yaml \
  --dry-run=server
NAME: datastore
...
For Cassandra backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-default]" \
      --project my-project

kubectl annotate serviceaccount apigee-cassandra-default \
      iam.gke.io/gcp-service-account=my-service-account@my-project.iam.gserviceaccount.com \
      --namespace apigee
  1. 取得指令,為 apigee-datastore 設定 Workload Identity,然後在輸出內容的 NOTES: 下方執行指令。
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  2. 取得指令,為 apigee-telemetry 設定 Workload Identity,然後在輸出內容的 NOTES: 下方執行指令。
    helm upgrade telemetry apigee-telemetry/ \
      --namespace APIGEE_NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  3. 取得指令,為 apigee-org 設定 Workload Identity,然後在輸出內容的 NOTES: 下方執行指令。
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace APIGEE_NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  4. 取得指令,為 apigee-env 設定 Workload Identity,然後在輸出內容的 NOTES: 下方執行指令。
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run=server

    針對安裝環境中的每個環境重複執行這個步驟。

  5. (選用) 您可以在 Google Cloud console的「Kubernetes:工作負載總覽」頁面中查看 Kubernetes 服務帳戶的狀態。

    前往「Workloads」(工作負載)

後續步驟

在下一個步驟中,您將設定 Apigee 入口網關,並部署 Proxy 來測試安裝作業。

下一步

(NEXT) 步驟 1:公開 Apigee 入口 2