將設定套用到叢集
請按照下列步驟,將 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 上使用 Workload Identity,請按照下列操作說明,將 apigeectl 建立的 Kubernetes 服務帳戶,與您在「步驟 4:建立服務帳戶和憑證」中建立的 Google 服務帳戶建立關聯。
這些程序會使用下列環境變數。您可以在指令殼層中設定這些值,或在程式碼範例中將這些值替換為實際值:
APIGEECTL_HOME:安裝apigeectl的目錄。CLUSTER_LOCATION:叢集所在的區域或可用區,例如:us-west1。CLUSTER_LOCATION:叢集名稱。ENV_NAME:Apigee 環境的名稱。NAMESPACE:您的 Apigee 命名空間。預設為apigee。HYBRID_FILES:混合式檔案目錄,例如hybrid-base-directory/hybrid-files。ORG_NAME:Apigee 機構的名稱。PROJECT_ID:您的 Google Cloud 專案 ID。
確認環境變數:
echo $APIGEECTL_HOMEecho $CLUSTER_LOCATIONecho $ENV_NAMEecho $HYBRID_FILESecho $NAMESPACEecho $ORG_NAMEecho $PROJECT_ID
初始化所需變數:
export APIGEECTL_HOME=hybrid-base-directory/apigeectlexport CLUSTER_LOCATION=my-cluster-locationexport ENV_NAME=my-environment-nameexport HYBRID_FILES=hybrid-base-directory/hybrid-filesexport NAMESPACE=apigeeexport ORG_NAME=$PROJECT_IDexport PROJECT_ID=my-project-id
- 選用:刪除服務帳戶金鑰檔案。
在 GKE 上執行 Apigee Hybrid 時,標準做法是為每個服務帳戶建立並下載私密金鑰 (
.json檔案)。使用 Workload Identity 時,您不需要下載服務帳戶私密金鑰,也不必將金鑰新增至 GKE 叢集。您可以使用下列指令刪除金鑰檔案:
rm $HYBRID_FILES/service-accounts/*.json
- 使用下列指令,檢查目前 Google Cloud 專案 ID 的
gcloud設定: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:建立叢集中建立叢集時,步驟 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'
如果叢集已啟用 Workload Identity,輸出內容應如下所示:
--- 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:
地區性叢集
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如果輸出內容未包含
workloadMetadataConfig:的行,請使用下列指令為每個節點集區啟用 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。 - 使用下列指令檢查專案的 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
Prod
非正式環境:
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
- 使用下列指令驗證服務帳戶:
kubectl get sa -n $NAMESPACE
輸出內容應如下所示。粗體 Kubernetes 服務帳戶是您需要使用 Google 服務帳戶註解的帳戶:
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 -
針對每個 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 元件有六個相關聯的 Kubernetes 服務帳戶:
apigee-cassandra-backupapigee-cassandra-restoreapigee-cassandra-schema-setupapigee-cassandra-schema-val(val= 驗證)apigee-cassandra-user-setupapigee-datastore-default
非正式環境
下列步驟會使用兩個環境變數。您會在每組指令前重設這些變數的值:
- GSA_NAME:Google 服務帳戶的名稱。這些是您在步驟 4:建立服務帳戶中,使用
create-service-account工具建立的服務帳戶。 - KSA_NAME:Kubernetes 服務帳戶的名稱。這些是您使用
kubectl get sa -n $NAMESPACE指令列出的帳戶。
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
Prod
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
非正式環境
- 定義
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
Prod
- 定義
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
非正式環境
- 定義
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
Prod
- 定義
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 指標
非正式環境
- 定義
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
Prod
- 定義
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 會在機構層級和環境層級範圍中實作。因此,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
Prod
- 定義
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
非正式環境
- 定義
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
Prod
- 定義
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
- 定義
- 執行階段
非正式環境
- 定義
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
Prod
- 定義
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
- 定義
- 同步器
非正式環境
- 定義
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
Prod
- 定義
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 (環境層級)
非正式環境
- 定義
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
Prod
- 定義
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
- 定義
- (選用) 您可以在 Google Cloud console的「Kubernetes: Workloads Overview」(Kubernetes:工作負載總覽) 頁面中,查看 Kubernetes 服務帳戶的狀態。
- 如要再次使用
apigeectl check-ready檢查部署狀態,請按照下列步驟操作:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
視需要設定目前的 gcloud 設定:
gcloud config set project $PROJECT_ID