将配置应用于集群
按照以下步骤将 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}
- 执行试运行初始化。通过执行试运行,可以在对集群进行任何更改之前检查是否有任何错误。使用
--dry-run
标志执行init
命令,如下所示:${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 上使用 Workload Identity,请按照以下说明将 apigeectl
创建的 Kubernetes 服务账号与您在第 4 步:创建服务账号和凭据中创建的 Google 服务账号关联。
这些过程使用以下环境变量。请在命令 shell 中设置这些变量,或在代码示例中将它们替换为实际值:
APIGEECTL_HOME
:apigeectl
的安装目录。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_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $ORG_NAME
echo $PROJECT_ID
初始化您需要的任何变量:
export APIGEECTL_HOME=hybrid-base-directory/apigeectlexport 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
- 可选:删除服务账号密钥文件。
在 GKE 上运行 Apigee Hybrid 时,标准做法是为每个服务账号创建和下载私钥(
.json
文件)。使用 Workload Identity 时,您无需下载服务账号私钥并将其添加到 GKE 集群。您可以使用以下命令删除密钥文件:
rm $HYBRID_FILES/service-accounts/*.json
- 使用以下命令检查 Google Cloud 项目 ID 的当前
gcloud
配置: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'
如果为集群启用了 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
- 使用以下命令验证节点池上启用了 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-data
和apigee-runtime
。 - 使用以下命令检查项目的 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
- 使用以下命令验证服务账号:
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
-
对于每个 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 组件有六个关联的 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 服务账号- 定义
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
Prod
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
非生产
- 定义
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
Prod
- 定义
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
非生产
- 定义
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
Prod
- 定义
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 指标
非生产
- 定义
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
Prod
- 定义
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 同时在组织级层和环境级层范围内实现。因此,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
Prod
- 定义
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
非生产
- 定义
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
Prod
- 定义
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
- 定义
- 运行时
非生产
- 定义
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
Prod
- 定义
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
- 定义
- 同步器
非生产
- 定义
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
Prod
- 定义
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(环境级层)
非生产
- 定义
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
Prod
- 定义
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
- 定义
- (可选)您可以在 Google Cloud 控制台的 Kubernetes:工作负载概览页面中查看 Kubernetes 服务账号的状态。
- 如需使用
apigeectl check-ready
再次检查部署的状态,请运行以下命令:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
如果需要,请设置当前 gcloud
配置:
gcloud config set project $PROJECT_ID