Apigee Hybrid 1.14 版支援 GKE 的 Workload Identity,以及 AKS 和 EKS 的 Workload Identity Federation。本指南中的程序僅涵蓋在 GKE 上設定 Workload Identity。如果是 AKS 和 EKS,請按照「在 AKS 和 EKS 上啟用 Workload Identity Federation」一文中的程序操作。
在 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,則當您按照「步驟 10:使用 Helm 安裝 Apigee hybrid」中的說明安裝或升級各個混合元件時,每個混合元件的 Helm 圖表都會為元件建立 Kubernetes 服務帳戶。
在 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 時,輸出內容會包含您需要使用的指令,以便使用正確的 GSA 和 KSA 名稱設定 Workload Identity。
例如:
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
- 取得為
apigee-datastore設定 Workload Identity 的指令,並在輸出內容的NOTES:下執行該指令。helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml \ --dry-run=server
- 取得為
apigee-telemetry設定 Workload Identity 的指令,並在輸出內容中,於NOTES:下方執行該指令。helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml \ --dry-run=server
- 取得為
apigee-org設定 Workload Identity 的指令,並在輸出內容中,於NOTES:下方執行該指令。helm upgrade $ORG_NAME apigee-org/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml \ --dry-run=server
- 取得為
apigee-env設定 Workload Identity 的指令,並在輸出內容中,於NOTES:下方執行該指令。helm upgrade $ENV_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f overrides.yaml \ --dry-run=server
為安裝作業中的每個環境重複這個步驟。
- (選用) 您可以在 Google Cloud console的「Kubernetes: Workloads Overview」(Kubernetes:工作負載總覽) 頁面中,查看 Kubernetes 服務帳戶的狀態。
後續步驟
在下一個步驟中,您將設定 Apigee Ingress 閘道,並部署 Proxy 來測試安裝作業。