將設定套用到叢集
請按照下列步驟,將 Apigee Hybrid 安裝至叢集:
- 請務必位於
hybrid-base-directory/hybrid-files目錄。cd $HYBRID_FILES
- 使用下列指令,確認
kubectl已設為正確的環境。 目前的環境應設為要部署 Apigee Hybrid 的叢集。kubectl config current-context
結果應包含您要部署 Apigee Hybrid 的叢集名稱。舉例來說,在 GKE 上,內容名稱通常採用
gke_project-id_cluster-location_cluster-name形式,如下所示:gke_my-project_us-central1_my-cluster
如果環境中的名稱叢集名稱不相符,下列指令會取得叢集的
gcloud憑證,並設定kubectl環境:地區性叢集
gcloud container clusters get-credentials $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
區域叢集
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
- 僅適用於 Anthos on Bare Metal、AWS on GKE、EKS 和 GKE on Prem 平台:確認
KUBECONFIG變數是否已使用下列指令設定:echo ${KUBECONFIG} - 執行模擬測試初始化作業。進行試運轉可讓您在叢集進行任何變更前,檢查是否有錯誤。執行
init指令,並加上--dry-run旗標,如下所示:${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client - 如果沒有錯誤,請執行
init指令,如下所示:${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yamlinit指令會安裝 Apigee 部署服務、Apigee Deployment Controller 和 Apigee Admission Webhook。 - 如要檢查部署作業的狀態,可以使用下列指令:
${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yamlkubectl get pods -n apigee-system
kubectl get pods -n apigee
Pod 準備就緒後,請前往下一個步驟。
- 執行模擬測試安裝。執行
apply指令並加上--dry-run旗標。${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client -
如果沒有錯誤,您可以使用下列指令,將
Apigee 專屬的執行階段元件套用至叢集:
${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml - 如要檢查部署作業的狀態,請執行下列指令:
${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml重複這個步驟,直到所有 Pod 都準備就緒。Pod 可能需要幾分鐘才能啟動。
搭配 Workload Identity 使用 GKE
在 GKE 上安裝 Apigee Hybrid 時,Google Cloud 提供「工作負載身分」選項,用於驗證 Hybrid 執行階段元件。
Google Cloud 服務帳戶和 Kubernetes 服務帳戶
Google Cloud 服務帳戶是一種特殊帳戶,可透過驗證服務帳戶本身,發出授權 API 呼叫。您可以為 Google Cloud 服務帳戶指派角色和權限,方式與指派給個別使用者相同。應用程式以服務帳戶身分進行驗證時,可以存取服務帳戶有權存取的所有資源。如要進一步瞭解 Google Cloud 服務帳戶,請參閱服務帳戶總覽。
您已在「步驟 4:建立服務帳戶」中,為 Apigee Hybrid 安裝作業建立 Google Cloud 服務帳戶。Apigee 會使用這些服務帳戶驗證混合式元件。
Kubernetes 服務帳戶與 Google Cloud 服務帳戶類似,Kubernetes 服務帳戶會為在 Pod 中執行的程序提供身分,並允許程序向 API 伺服器進行驗證,方式與使用者類似。如要進一步瞭解 Kubernetes 服務帳戶,請參閱「為 Pod 設定服務帳戶」。
您在先前的程序中執行 apigeectl apply 時,apigeectl 工具已建立 Apigee Hybrid 需要的大部分 Kubernetes 服務帳戶。
在 GKE 上設定 Workload Identity 時,您會將 Google Cloud 服務帳戶與 Kubernetes 叢集中的 Kubernetes 服務帳戶建立關聯。這樣一來,Kubernetes 服務帳戶就能模擬 Google Cloud 服務帳戶,並使用指派的角色和權限,向混合式元件進行驗證。
請按照下列操作說明,為專案設定 Workload Identity。
準備設定 Workload Identity
這些程序會使用下列環境變數。確認已定義這些項目,並定義任何未定義的項目:
echo $APIGEECTL_HOMEecho $CLUSTER_LOCATIONecho $ENV_NAMEecho $HYBRID_FILESecho $NAMESPACEecho $PROJECT_IDecho $ORG_NAME
- 使用下列指令,確認目前的
gcloud設定已設為您的 Google Cloud 專案 ID:gcloud config get project
- 建立
apigee-cassandra-restoreKubernetes 服務帳戶。執行
apigeectl apply套用設定時,指令會建立 Workload Identity 大部分所需的 Kubernetes 服務帳戶。如要建立
apigee-cassandra-restoreKubernetes 服務帳戶,請執行apigeectl apply並加上--restore旗標:$APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
- 確認 GKE 叢集已啟用 Workload Identity。在步驟 1:建立叢集中建立叢集時,步驟 11 是啟用 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 - 取得專案的 Google Cloud 服務帳戶名稱清單。您需要這些名稱,才能將 Kubernetes 服務帳戶與 Workload Identity 建立關聯。對於非正式版安裝作業,應該只有一個 Google 服務帳戶。正式版安裝作業應有八個。
使用下列指令取得名稱清單:
gcloud iam service-accounts list --project $PROJECT_ID
輸出內容應如下所示:
非正式環境
非正式環境:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
正式版
非正式環境:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
- 取得 Kubernetes 服務帳戶名稱清單。您需要這份名稱清單,才能在本程序的後續步驟中,與 Google Cloud 服務帳戶建立關聯。請使用以下指令:
kubectl get sa -n $NAMESPACE
輸出內容應如下所示。粗體顯示的 Kubernetes 服務帳戶,就是您需要與 Google Cloud 服務帳戶建立關聯的帳戶:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
視需要設定目前的 gcloud 設定:
gcloud config set project $PROJECT_ID
設定 Workload Identity
請按照下列程序,為 Hybrid 安裝啟用工作負載身分:
-
針對每個 Apigee 元件,使用該元件的 Google 服務帳戶,為對應的 Kubernetes 服務帳戶加上註解。
下列步驟會使用兩個環境變數。您會在每組指令前重設這些變數的值:
- GSA_NAME:Google 服務帳戶的名稱。這些是您在「步驟 4:建立服務帳戶」中,使用
create-service-account工具建立的服務帳戶。 - KSA_NAME:Kubernetes 服務帳戶的名稱。這些是您在上方使用
kubectl get sa -n $NAMESPACE指令列出的帳戶,例如:apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa。
- GSA_NAME:Google 服務帳戶的名稱。這些是您在「步驟 4:建立服務帳戶」中,使用
- Cassandra
為 Cassandra 元件設定 Workload Identity。
Cassandra 元件有六個相關聯的 Kubernetes 服務帳戶:
apigee-cassandra-backupapigee-cassandra-restoreapigee-cassandra-schema-setupapigee-cassandra-schema-val(val= 驗證)apigee-cassandra-user-setupapigee-datastore-default
非正式環境
設定
apigee-cassandra-backupKubernetes 服務帳戶- 定義
KSA_NAME和GSA_NAME環境變數:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup" - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
輸出內容應包含描述註解的行,類似於:
Annotations: iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com
設定
apigee-cassandra-restoreKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數:KSA_NAME="apigee-cassandra-restore"
- 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
設定
apigee-cassandra-schema-setupKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
設定
apigee-cassandra-schema-valKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
設定
apigee-cassandra-user-setupKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
設定
apigee-datastore-default-saKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數:KSA_NAME="apigee-datastore-default-sa"
- 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
設定
apigee-cassandra-backupKubernetes 服務帳戶- 定義
KSA_NAME和GSA_NAME環境變數:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup" - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
輸出內容應包含描述註解的行,類似於:
Annotations: iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
設定
apigee-cassandra-restoreKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數:KSA_NAME="apigee-cassandra-restore"
- 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
設定
apigee-cassandra-schema-setupKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa。 - 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
設定
apigee-cassandra-schema-valKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
設定
apigee-cassandra-user-setupKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
設定
apigee-datastore-default-saKubernetes 服務帳戶- 重新定義
KSA_NAME環境變數:KSA_NAME="apigee-datastore-default-sa"
- 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
為 Apigee Connect 元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"apigee-connect-agent-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- MART
為 MART 元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"apigee-mart-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- Apigee 指標
為 Apigee 指標元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數:KSA_NAME="apigee-metrics-sa"
- 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa" - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- UDCA (機構層級)
為機構層級 UDCA 元件設定 Workload Identity。
UDCA 會在機構層級和環境層級範圍中實作。因此,UDCA 有兩個不同的 Kubernetes 服務帳戶,每個範圍各有一個。您可以根據帳戶名稱區分兩者。env-scope 帳戶的服務帳戶名稱包含環境名稱。例如:
- 機構層級:
apigee-udca-my-project-id-123abcd-sa,其中my-project-id是專案 ID 名稱。 - 環境層級:
apigee-udca-my-project-id-my-env-234bcde-sa其中my-env是環境的名稱。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID - 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com - 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"apigee-udca-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 機構層級:
- Apigee Watcher
為 Apigee Watcher 元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"apigee-watcher-hybrid-example-project-123abcd-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- 執行階段
為 Apigee Runtime 元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"apigee-runtime-hybrid-example-project-example-env-234bcde-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- Synchronizer
為 Synchronizer 元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- UDCA (環境層級)
為環境層級的 UDCA 元件設定 Workload Identity。
非正式環境
- 定義
KSA_NAME環境變數: 例如:KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
正式版
- 定義
KSA_NAME和GSA_NAME環境變數: 例如:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"apigee-udca-hybrid-example-project-example-env-234bcde-sa。 - 繫結 IAM 角色:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- 為服務帳戶加上註解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 驗證註解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定義
- 選用:刪除所有已下載的服務帳戶金鑰檔案。
如果您使用
create-service-account工具建立 Google 服務帳戶,系統可能會建立服務帳戶金鑰,並下載.json金鑰檔案。在 GKE 上使用 Workload Identity 時,您不需要這些金鑰檔案。您可以使用下列指令刪除金鑰檔案:
rm $HYBRID_FILES/service-accounts/*.json
驗證 Workload Identity
- (選用) 您可以在 Google Cloud console的「Kubernetes: Workloads Overview」(Kubernetes:工作負載總覽) 頁面中,查看 Kubernetes 服務帳戶的狀態。
- 如要再次使用
apigeectl check-ready檢查部署狀態,請按照下列步驟操作:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml