仅限使用 Workload Identity 的 GKE:配置 Workload Identity
如果您在第 6 步:配置集群中为 GKE 上的 Workload Identity 设置了替换文件,请按照以下步骤操作。
如果您未在 GKE 上使用 Workload Identity,请继续执行第 3 部分的第 1 步:公开 Apigee 入站流量网关。
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。
准备配置 Workload Identity
这些过程使用以下环境变量。检查它们是否已定义,并对没有定义的进行定义:
echo $APIGEECTL_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
其中:
APIGEECTL_HOME
是您安装apigeectl
的目录。CLUSTER_LOCATION
是集群的区域(或可用区),例如us-central1
。ENV_NAME
是您的环境的名称。HYBRID_FILES
是您创建overrides
和certs
目录所在的目录。NAMESPACE
是您的 Apigee 命名空间。PROJECT_ID
是您的 Google Cloud 项目。ORG_NAME
是您的 Apigee 组织的名称。
- 使用以下命令检查
gcloud
配置设置为您的 Google Cloud 项目 ID:gcloud config get project
- 创建
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
- 验证已为 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
-
使用以下命令为每个节点池启用 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-data
和apigee-runtime
。 - 使用以下命令验证节点池上是否启用了 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
- 获取项目的 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
- 获取 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
如果需要,请设置当前 gcloud
配置:
gcloud config set project $PROJECT_ID
配置 Workload Identity
请按照以下过程启用 Workload Identity 以进行 Hybrid 安装:
-
对于每个 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
。
- GSA_NAME:Google 服务账号的名称。这些是您在第 4 步:创建服务账号中使用
- 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 服务账号- 定义
KSA_NAME
和GSA_NAME
环境变量:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
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 服务账号- 重新定义
KSA_NAME
环境变量:KSA_NAME="apigee-cassandra-restore"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
配置
apigee-cassandra-schema-setup
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
配置
apigee-cassandra-schema-val
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
配置
apigee-cassandra-user-setup
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
配置
apigee-datastore-default-sa
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量:KSA_NAME="apigee-datastore-default-sa"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
配置
apigee-cassandra-backup
Kubernetes 服务账号- 定义
KSA_NAME
和GSA_NAME
环境变量:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
输出应包含描述注释的一行,如下所示:
Annotations: iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
配置
apigee-cassandra-restore
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量:KSA_NAME="apigee-cassandra-restore"
- 绑定 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
- 为服务账号添加注解:
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 服务账号- 重新定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
。 - 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
绑定 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
配置
apigee-cassandra-schema-val
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
配置
apigee-cassandra-user-setup
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
配置
apigee-datastore-default-sa
Kubernetes 服务账号- 重新定义
KSA_NAME
环境变量:KSA_NAME="apigee-datastore-default-sa"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
为 Apigee Connect 组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定义
- MART
为 MART 组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定义
- Apigee 指标
为 Apigee 指标组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量:KSA_NAME="apigee-metrics-sa"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
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
是环境的名称。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 组织级层:
- Apigee Watcher
为 Apigee Watcher 组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定义
- 运行时
为 Apigee 运行时组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定义
- 同步器
为 Synchronizer 组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定义
- UDCA(环境级层)
为环境级 UDCA 组件配置 Workload Identity。
非生产
- 定义
KSA_NAME
环境变量: 例如:KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
生产
- 定义
KSA_NAME
和GSA_NAME
环境变量: 例如:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
。 - 绑定 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
- 为服务账号添加注解:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- 验证注解:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 定义
- 可选:删除任何下载的服务账号密钥文件。
如果您使用
create-service-account
工具创建了 Google 服务账号,则它可能已创建了服务账号密钥并下载了.json
密钥文件。在 GKE 上使用 Workload Identity 时,不需要这些密钥文件。您可以使用以下命令删除密钥文件:
rm $HYBRID_FILES/service-accounts/*.json
验证 Workload Identity
- (可选)您可以在 Google Cloud 控制台的 Kubernetes:工作负载概览页面中查看 Kubernetes 服务账号的状态。
- 如需使用
apigeectl check-ready
再次检查部署的状态,请运行以下命令:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml