僅搭配 Workload Identity 的 GKE:設定 Workload Identity
如果您在 步驟 6:建立覆寫值中設定 GKE 上 Workload Identity 的覆寫值檔案,請按照下列步驟操作。
如果您未在 GKE 上使用 Workload Identity,請繼續進行第 3 部分,步驟 1:公開 Apigee ingress 閘道。
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 服務帳戶,就像您在步驟 11:使用 Helm 圖表安裝 Apigee 混合式中所做的一樣。
在 GKE 上設定 Workload Identity 時,您會將 Google Cloud 服務帳戶與 Kubernetes 叢集中的 Kubernetes 服務帳戶建立關聯。這樣一來,Kubernetes 服務帳戶就能冒用 Google Cloud 服務帳戶,並使用其指派的角色和權限,對混合式元件進行驗證。
請按照下列操作說明,為專案設定 Workload Identity。
準備設定 Workload Identity
- 確認覆寫檔案中已啟用 Workload Identity。應在下列屬性中的覆寫檔案中啟用。
- 必須提供
namespace
。例如:instanceID: "hybrid-instance-1" namespace: "apigee"
- 啟用 Workload Identity 的語法與 Helm 和
apigeectl
不同。針對 Helm,gcp.workloadIdentity.enabled
會取代gcp.workloadIdentityEnabled
。 - 如果您為所有元件使用單一服務帳戶 (非正式版),請使用以下方式指定:
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-datastore
apigee-telemetry
apigee-org
apigee-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:工作負載總覽」頁面中查看 Kubernetes 服務帳戶的狀態。
後續步驟
在下一個步驟中,您將設定 Apigee 入口網關,並部署 Proxy 來測試安裝作業。
(NEXT) 步驟 1:公開 Apigee 入口 2