第 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. 运行 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 上的 Apigee Hybrid 安装,Google Cloud 提供了一个名为 Workload Identity 的选项,用于对 Hybrid 运行时组件进行身份验证。

Google Cloud 服务账号和 Kubernetes 服务账号

Google Cloud 服务账号是一种特殊类型的账号,可用于通过作为服务账号本身进行身份验证来进行授权 API 调用。您可以向 Google Cloud 服务账号授予与个人用户类似的角色和权限。当应用是使用服务账号证明其身份时,它可以访问该服务账号有权访问的所有资源。如需详细了解 Google Cloud 服务账号,请参阅服务账号概览

您在“第 4 步:创建服务账号”中创建了 Apigee Hybrid 安装的 Google Cloud 服务账号。Apigee 使用这些服务账号对 Hybrid 组件进行身份验证。

Kubernetes 服务账号与 Google Cloud 服务账号类似。Kubernetes 服务账号为 Pod 中运行的进程提供身份,并允许其像用户一样向 API 服务器进行身份验证。如需详细了解 Kubernetes 服务账号,请参阅为 Pod 配置服务账号

您在上一过程中运行 apigeectl apply 时,apigeectl 工具创建了 Apigee Hybrid 所需的大多数 Kubernetes 服务账号。

在 GKE 上配置 Workload Identity 时,您将 Google Cloud 服务账号与 Kubernetes 集群中的 Kubernetes 服务账号相关联。这样,Kubernetes 服务账号就可以模拟 Google Cloud 服务账号,并使用其分配的角色和权限向 Hybrid 组件进行身份验证。

按照以下说明为项目配置 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 服务账号,请运行带有 --restore 标志的 apigeectl apply

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. 验证已为 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'

    输出应如下所示:

      ---
      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 服务账号。对于生产环境中的安装,应该有 8 个。

    使用以下命令获取名称列表:

    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

请按照以下步骤启用 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 = validation)
      • 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 服务账号,每个范围一个。您可以通过账号名称将它们区分开来。环境范围账号在服务账号名称中包含环境名称。例如:

      • 组织级层: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 运行时组件配置 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
    • 同步器

      为同步器组件配置 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

验证工作负载身份

  1. (可选)您可以在 Google Cloud 控制台的 Kubernetes:工作负载概览页面中查看 Kubernetes 服务账号的状态。

    进入“工作负载”

  2. 如需使用 apigeectl check-ready 再次检查部署的状态,请运行以下命令:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
1 2 3 4 5 6 7 8 9 (下一步)第 10 步:公开 Apigee 入站流量 11