仅限使用 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 配置服务账号。
如果您在替换文件中将 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
- 验证替换文件中是否已启用 Workload Identity。您应在替换文件的以下属性中启用它。
namespace
为必填项。 例如:instanceID: "hybrid-instance-1" namespace: "apigee"
- 对于 Helm 和
apigeectl
,启用 Workload Identity 的语法不同。对于 Helm,gcp.workloadIdentity.enabled
取代了gcp.workloadIdentityEnabled
。 - 如果您要对所有组件使用一个服务账号(非生产),请使用
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"
- 使用以下命令检查
gcloud
配置设置为您的 Google Cloud 项目 ID:gcloud config get project
- 验证已为 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
如果需要,请设置当前 gcloud
配置:
gcloud config set project $PROJECT_ID
配置 Workload Identity
请按照以下过程为以下 Hybrid 组件启用 Workload Identity:
apigee-datastore
apigee-telemetry
apigee-org
apigee-env
当您为 apigee-datastore
、apigee-env
、apigee-org
和 apigee-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
- 获取为
apigee-datastore
设置 Workload Identity 的命令,并在输出中的NOTES:
下运行该命令。helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- 获取为
apigee-telemetry
设置 Workload Identity 的命令,并在输出中的NOTES:
下运行该命令。helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- 获取为
apigee-org
设置 Workload Identity 的命令,并在输出中的NOTES:
下运行该命令。helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- 获取为
apigee-env
设置 Workload Identity 的命令,并在输出中的NOTES:
下运行该命令。helm upgrade $ENV_NAME apigee-env/ \ --namespace $NAMESPACE \ --set env=ENV_NAME \ -f overrides.yaml \ --dry-run
对安装中的每个环境重复此步骤。
- (可选)您可以在 Google Cloud 控制台的 Kubernetes:工作负载概览页面中查看 Kubernetes 服务账号的状态。
后续步骤
在下一步中,您将配置 Apigee 入站流量网关并部署代理以测试安装。