Apigee Hybrid 1.12 版支援 GKE 的 Workload Identity,以及 AKS 和 EKS 的 Workload Identity Federation。本指南中的程序僅涵蓋在 GKE 上設定 Workload Identity。如果是 AKS 和 EKS,請按照「在 AKS 和 EKS 上啟用工作負載身分聯盟」一文中的程序操作。
在 GKE 上設定 Workload Identity
Google Cloud 服務帳戶和 Kubernetes 服務帳戶
Google Cloud 服務帳戶是一種特殊帳戶,可透過驗證服務帳戶本身,發出授權 API 呼叫。您可以為 Google Cloud 服務帳戶指派角色和權限,方式與指派給個別使用者相同。應用程式以服務帳戶身分進行驗證時,可以存取服務帳戶有權存取的所有資源。如要進一步瞭解 Google Cloud 服務帳戶,請參閱服務帳戶總覽。
您已在「步驟 4:建立服務帳戶」中,為 Apigee Hybrid 安裝作業建立 Google Cloud 服務帳戶。Apigee 會使用這些服務帳戶驗證混合式元件。
Kubernetes 服務帳戶與 Google Cloud 服務帳戶類似,Kubernetes 服務帳戶會為在 Pod 中執行的程序提供身分,並允許程序向 API 伺服器進行驗證,與使用者類似。如要進一步瞭解 Kubernetes 服務帳戶,請參閱「為 Pod 設定服務帳戶」。
如果您在覆寫檔案中將 gcp.workloadIdentity.enabled 設為 true,當您安裝或升級每個混合式元件的 Helm chart 時,系統會為這些元件建立 Kubernetes 服務帳戶,就像您在「步驟 10:使用 Helm 安裝 Apigee Hybrid」中執行的操作一樣。
在 GKE 上設定 Workload Identity 時,您會將 Google Cloud 服務帳戶與 Kubernetes 叢集中的 Kubernetes 服務帳戶建立關聯。這樣一來,Kubernetes 服務帳戶就能模擬 Google Cloud 服務帳戶,並使用指派的角色和權限,向混合式元件進行驗證。
請按照下列操作說明,為專案設定 Workload Identity。
準備設定 Workload Identity
- 確認覆寫檔案中已啟用 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"
- 「
- 使用下列指令,確認目前的
gcloud設定已設為您的 Google Cloud 專案 ID:gcloud config get project
- 確認 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
-
使用下列指令,為每個節點集區啟用 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-data和apigee-runtime。 - 使用下列指令,確認節點集區已啟用 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
視需要設定目前的 gcloud 設定:
gcloud config set project $PROJECT_ID
設定 Workload Identity
請按照下列程序,為下列 Hybrid 元件啟用 Workload Identity:
apigee-datastoreapigee-telemetryapigee-orgapigee-env
使用 apigee-datastore、apigee-env、apigee-org 和 apigee-telemetry 圖表的 --dry-run 旗標執行 helm upgrade 時,輸出內容會包含設定 Workload Identity 的必要指令,並提供正確的 GSA 和 KSA 名稱。
例如:
helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
NAME: datastore
...
For C* 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 \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
--project :my-project
- 取得為
apigee-datastore設定 Workload Identity 的指令,並在輸出內容的NOTES:下執行該指令。helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- 取得為
apigee-telemetry設定 Workload Identity 的指令,並在輸出內容中執行NOTES:下方的指令。helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- 取得為
apigee-org設定 Workload Identity 的指令,並在輸出內容中執行NOTES:下方的指令。helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- 取得為
apigee-env設定 Workload Identity 的指令,並在輸出內容中執行NOTES:下方的指令。helm upgrade $ENV_NAME apigee-env/ \ --namespace $NAMESPACE \ --set env=ENV_NAME \ -f overrides.yaml \ --dry-run
針對安裝中的每個環境重複這個步驟。
- (選用) 您可以在 Google Cloud console的「Kubernetes: Workloads Overview」(Kubernetes:工作負載總覽) 頁面中,查看 Kubernetes 服務帳戶的狀態。
後續步驟
在下一個步驟中,您將設定 Apigee Ingress 閘道,並部署 Proxy 來測試安裝作業。