第 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 安装。使用 --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 可能需要几分钟时间才能启动。

GKE 和 Workload Identity

如果您在 GKE 上使用 Workload Identity,请按照以下说明将 apigeectl 创建的 Kubernetes 服务账号与您在第 4 步:创建服务账号和凭据中创建的 Google 服务账号关联。

这些过程使用以下环境变量。请在命令 shell 中设置这些变量,或在代码示例中将它们替换为实际值:

  • APIGEECTL_HOMEapigeectl 的安装目录。
  • 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 应用配置时,该命令创建了 Workload Identity 所需的大多数 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
    

    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
    
  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 = validation)
      • 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

      Prod

      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

      Prod

      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

      Prod

      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

      Prod

      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 服务账号,每个范围一个。您可以通过账号名称将它们区分开来。环境范围账号在服务账号名称中包含环境名称。例如:

      • 组织级层: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

      Prod

      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

      Prod

      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

      Prod

      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
    • 同步器

      非生产

      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

      Prod

      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

      Prod

      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 控制台的 Kubernetes:工作负载概览页面中查看 Kubernetes 服务账号的状态。

    进入“工作负载”

  11. 如需使用 apigeectl check-ready 再次检查部署的状态,请运行以下命令:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml

后续步骤

1 2 3 4 5 6 7 8 (下一步)第 9 步:公开 Apigee 入站流量 10