步驟 8:安裝 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. 執行模擬測試初始化。進行模擬執行作業後,您就能在對叢集進行任何變更前,先檢查是否有任何錯誤。執行含有 --dry-run 旗標的 init 指令,如下所示:
    ${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. 執行模擬測試安裝作業。執行含有 --dry-run 旗標的 apply 指令。
    ${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 上使用 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_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $ORG_NAME
echo $PROJECT_ID

初始化所需的任何變數:

export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export CLUSTER_LOCATION=my-cluster-location
export ENV_NAME=my-environment-name
export HYBRID_FILES=hybrid-base-directory/hybrid-files
export NAMESPACE=apigee
export ORG_NAME=$PROJECT_ID
export PROJECT_ID=my-project-id
  1. 選用:刪除服務帳戶金鑰檔案。

    在 GKE 上執行 Apigee hybrid 時,標準做法是為每個服務帳戶建立及下載私密金鑰 (.json 檔案)。使用 Workload Identity 時,您不需要下載服務帳戶私密金鑰,然後將這些金鑰新增至 GKE 叢集。

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

    rm $HYBRID_FILES/service-accounts/*.json
  2. 使用下列指令,檢查 Google Cloud 專案 ID 的目前 gcloud 設定:
    gcloud config get project
  3. 視需要設定目前的 gcloud 設定:

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

    當您透過執行 apigeectl apply 套用設定時,這個指令會建立大部分工作負載身分所需的 Kubernetes 服務帳戶。

    如要建立 apigee-cassandra-restore Kubernetes 服務帳戶,請搭配 --restore 標記執行 apigeectl apply

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  5. 確認您的 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
  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
        

    如果輸出內容不含 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-dataapigee-runtime

  7. 請使用下列指令,查看專案的 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. 請使用下列指令驗證服務帳戶:
    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
        
  9. 針對每個 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 元件有六個相關聯的 Kubernetes 服務帳戶:

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

      非正式環境

      以下步驟會使用兩個環境變數。您會在每組指令之前重設這些變數的值:

      • GSA_NAME:Google 服務帳戶名稱。這些是您在步驟 4:建立服務帳戶 中,使用 create-service-account 工具建立的服務帳戶。
      • KSA_NAME:Kubernetes 服務帳戶名稱。這些是您在上述 kubectl get sa -n $NAMESPACE 指令中列出的帳戶。

      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

      非正式環境

      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

      非正式環境

      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 指標

      非正式環境

      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 會在機構層級和環境層級範圍中實作。因此,針對 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

      非正式環境

      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
    • 執行階段

      非正式環境

      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

      非正式環境

      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 (環境層級)

      非正式環境

      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
  10. (選用) 您可以在 Google Cloud console的「Kubernetes:工作負載總覽」頁面中查看 Kubernetes 服務帳戶的狀態。

    前往「Workloads」(工作負載)

  11. 如要再次透過 apigeectl check-ready 檢查部署狀態,請按照下列步驟操作:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
1 2 3 5 6 7 8 8 9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31