将配置应用于集群
按照以下步骤将 Apigee Hybrid 安装到集群中:
- 确保您位于
hybrid-base-directory/hybrid-files
目录中。cd $HYBRID_FILES
- 使用以下命令验证
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
- 仅对于 Anthos on Bare Metal、AWS on GKE、EKS 和 GKE On-Prem 平台,使用以下命令验证是否设置了
KUBECONFIG
变量:echo ${KUBECONFIG}
- 执行试运行初始化。通过执行试运行,可以在对集群进行任何更改之前检查是否有任何错误。执行
init
命令并使用--dry-run
标志,如下所示:${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client
- 如果没有出现错误,请执行
init
命令,如下所示:${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml
init
命令会安装 Apigee 部署服务 Apigee Deployment Controller 和 Apigee Admission Webhook。 - 如需检查部署的状态,您可以使用以下命令:
${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
kubectl get pods -n apigee-system
kubectl get pods -n apigee
Pod 准备就绪后,请转到下一步。
- 运行 dry run 安装。使用
--dry-run
标志执行apply
命令。${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client
-
如果没有出现错误,您可以使用以下命令将特定于 Apigee 的运行时组件应用于集群:
${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml
- 如需检查部署的状态,请运行以下命令:
${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_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
- 使用以下命令检查
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 步:创建集群中创建集群时,第 11 步是启用 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
- 定义
- 同步器
为同步器组件配置 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
验证工作负载身份
- (可选)您可以在 Google Cloud 控制台的 Kubernetes:工作负载概览页面中查看 Kubernetes 服务账号的状态。
- 如需使用
apigeectl check-ready
再次检查部署的状态,请运行以下命令:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml