第 12 步(可选):配置 Workload Identity

Apigee Hybrid v.1.12 支持 GKE 上的 Workload Identity 以及 AKS 和 EKS 上的工作负载身份联合。本指南中的过程仅介绍如何配置 GKE 上的 Workload Identity。对于 AKSEKS,请按照在 AKS 和 EKS 上启用工作负载身份联合中的过程操作

配置 GKE 上的 Workload Identity

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 配置服务账号

如果您在替换文件中将 gcp.workloadIdentity.enabled 设置为 true,则当您安装或升级 Hybrid 组件时,每个 Hybrid 组件的 Helm 图表都将为这些组件创建 Kubernetes 服务账号,就像您在第 11 步:使用 Helm 图表安装 Apigee Hybrid 一样。

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

按照以下说明为项目配置 Workload Identity。

准备配置 Workload Identity

  1. 验证替换文件中是否已启用 Workload Identity。您应在替换文件的以下属性中启用它。
    • namespace为必填项。 例如:
      instanceID: "hybrid-instance-1"
      namespace: "apigee"
      
    • 如果您要对所有组件使用一个服务账号(非生产),请使用 gcp.workloadIdentity.gsa 指定该服务账号。例如:
        gcp:
          workloadIdentity:
            enabled: true
            gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
        
    • 如果您要对每个组件使用单独的服务账号(生产安装),请使用组件的 gsa 属性指定服务账号。例如:
        logger:
          gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
        

    请参阅 gcp.workloadIdentity.enabled

  2. 使用以下命令检查 gcloud 配置是否设置为您的 Google Cloud 项目 ID:
    gcloud config get project
  3. 如果需要,请设置当前 gcloud 配置:

    gcloud config set project $PROJECT_ID
  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
        

配置 Workload Identity

请按照以下过程为以下 Hybrid 组件启用 Workload Identity:

  • apigee-datastore
  • apigee-telemetry
  • apigee-org
  • apigee-env

当您为 apigee-datastoreapigee-envapigee-orgapigee-telemetry 图表运行 helm upgrade 并使用 --dry-run 标志时,输出会包含您使用正确的 GSA 和 KSA 名称配置 Workload Identity 所需的命令。

例如:

helm upgrade datastore apigee-datastore/ \
  --namespace $NAMESPACE \
  -f overrides.yaml \
  --dry-run
NAME: datastore
  ...
For C* backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
  gcloud iam service-accounts add-iam-policy-binding  \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
        --project :my-project
  1. 获取为 apigee-datastore 设置 Workload Identity 的命令,并在输出中的 NOTES: 下运行该命令。
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  2. 获取为 apigee-telemetry 设置 Workload Identity 的命令,并在输出中的 NOTES: 下运行该命令。
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  3. 获取为 apigee-org 设置 Workload Identity 的命令,并在输出中的 NOTES: 下运行该命令。
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  4. 获取为 apigee-env 设置 Workload Identity 的命令,并在输出中的 NOTES: 下运行该命令。
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run

    对安装中的每个环境重复此步骤。

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

    进入“工作负载”

后续步骤

在下一步中,您将配置 Apigee 入站流量网关并部署代理以测试安装。

下一步

(下一步)第 1 步:公开 Apigee 入站流量 2