步驟 9:安裝 Hybrid 執行階段

將設定套用到叢集

請按照下列步驟,將 Apigee Hybrid 安裝至叢集:

  1. 請務必位於 hybrid-base-directory/hybrid-files 目錄。
    cd $HYBRID_FILES
  2. 使用下列指令,確認 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
  3. 僅適用於 Anthos on Bare MetalAWS on GKEEKSGKE on Prem 平台:確認 KUBECONFIG 變數是否已使用下列指令設定:
    echo ${KUBECONFIG}
  4. 執行模擬測試初始化作業。進行試運轉可讓您在叢集進行任何變更前,檢查是否有錯誤。執行 init 指令,並加上 --dry-run 旗標,如下所示:
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client
  5. 如果沒有錯誤,請執行 init 指令,如下所示:
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml

    init 指令會安裝 Apigee 部署服務、Apigee Deployment Controller 和 Apigee Admission Webhook。

  6. 如要檢查部署作業的狀態,可以使用下列指令:
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
    kubectl get pods -n apigee-system
    kubectl get pods -n apigee

    Pod 準備就緒後,請前往下一個步驟。

  7. 執行模擬測試安裝。執行 apply 指令並加上 --dry-run 旗標。
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client
  8. 如果沒有錯誤,您可以使用下列指令,將 Apigee 專屬的執行階段元件套用至叢集:
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml
  9. 如要檢查部署作業的狀態,請執行下列指令:
    ${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_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. 使用下列指令,確認目前的 gcloud 設定已設為您的 Google Cloud 專案 ID:
    gcloud config get project
  2. 視需要設定目前的 gcloud 設定:

    gcloud config set project $PROJECT_ID
  3. 建立 apigee-cassandra-restore Kubernetes 服務帳戶。

    執行 apigeectl apply 套用設定時,指令會建立 Workload Identity 大部分所需的 Kubernetes 服務帳戶。

    如要建立 apigee-cassandra-restore Kubernetes 服務帳戶,請執行 apigeectl apply 並加上 --restore 旗標:

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. 確認 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
  5. 使用下列指令,為每個節點集區啟用 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-dataapigee-runtime

  6. 使用下列指令,確認節點集區已啟用 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
        
  7. 取得專案的 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
    
  8. 取得 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
        

設定 Workload Identity

請按照下列程序,為 Hybrid 安裝啟用工作負載身分:

  1. 針對每個 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
    • Cassandra

      為 Cassandra 元件設定 Workload Identity。

      Cassandra 元件有六個相關聯的 Kubernetes 服務帳戶:

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-val (val = 驗證)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      非正式環境

      設定 apigee-cassandra-backup Kubernetes 服務帳戶

      1. 定義 KSA_NAMEGSA_NAME 環境變數:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        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-restore Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-restore"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-cassandra-schema-setup Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        例如: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-cassandra-schema-val Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        例如: apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-cassandra-user-setup Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        例如: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-datastore-default-sa Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-datastore-default-sa"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      設定 apigee-cassandra-backup Kubernetes 服務帳戶

      1. 定義 KSA_NAMEGSA_NAME 環境變數:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. 輸出內容應包含描述註解的行,類似於:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-cassandra-restore Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-restore"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      設定 apigee-cassandra-schema-setup Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        例如: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-cassandra-schema-val Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        例如: apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-cassandra-user-setup Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        例如: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      設定 apigee-datastore-default-sa Kubernetes 服務帳戶

      1. 重新定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-datastore-default-sa"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      為 Apigee Connect 元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        例如: apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        例如: apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      為 MART 元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-mart-service-account-name-sa"
        例如: apigee-mart-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        例如: apigee-mart-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee 指標

      為 Apigee 指標元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-metrics-sa"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        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 是環境的名稱。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-udca-service-account-name-sa"
        例如: apigee-udca-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        例如: apigee-udca-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      為 Apigee Watcher 元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        例如: apigee-watcher-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        例如: apigee-watcher-hybrid-example-project-123abcd-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • 執行階段

      為 Apigee Runtime 元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        例如: apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        例如: apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronizer

      為 Synchronizer 元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        例如: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        例如: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (環境層級)

      為環境層級的 UDCA 元件設定 Workload Identity。

      非正式環境

      1. 定義 KSA_NAME 環境變數:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        例如: apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      正式版

      1. 定義 KSA_NAMEGSA_NAME 環境變數:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        例如: apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. 繫結 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
      3. 為服務帳戶加上註解:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. 驗證註解:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. 選用:刪除所有已下載的服務帳戶金鑰檔案。

    如果您使用 create-service-account 工具建立 Google 服務帳戶,系統可能會建立服務帳戶金鑰,並下載 .json 金鑰檔案。在 GKE 上使用 Workload Identity 時,您不需要這些金鑰檔案。

    您可以使用下列指令刪除金鑰檔案:

    rm $HYBRID_FILES/service-accounts/*.json

驗證 Workload Identity

  1. (選用) 您可以在 Google Cloud console的「Kubernetes: Workloads Overview」(Kubernetes:工作負載總覽) 頁面中,查看 Kubernetes 服務帳戶的狀態。

    前往「Workloads」(工作負載)

  2. 如要再次使用 apigeectl check-ready 檢查部署狀態,請按照下列步驟操作:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
1 2 3 4 5 6 7 8 9 (NEXT) Step 10: Expose Apigee ingress 11