Workload Identity (WIF) 是一种机制,可让集群的工作负载使用 Kubernetes 服务账号访问外部云资源。对于在 GKE 关联集群中运行的应用访问 Google Cloud 服务,建议使用 WIF。注册集群时,GKE 关联集群 API 会创建 WIF 所需的所有基础架构,并支持使用公共或专用 OIDC 颁发者的集群。
所有连接回 Google Cloud 的 GKE Enterprise 服务(例如 Connect 和遥测代理)都使用 Workload Identity。
Kubernetes 服务账号和 Workload Identity
Pod 运行时,会使用 Kubernetes 服务账号授予对其集群中托管的资源的访问权限。通过使用 WIF,Pod 可以使用同一 Kubernetes 服务账号 (KSA) 获取短期有效的令牌来访问集群外部托管的资源。
WIF 需要在集群内的 OIDC 身份提供方与外部资源提供方(例如 Google Cloud IAM)之间建立信任关系。注册关联集群时,注册流程会通过将集群的 OIDC 服务添加到与 Google Cloud 项目绑定的默认工作负载身份池来自动创建这种信任关系。
此工作负载身份池是 Google 项目的可信身份提供方池,名为 PROJECT_ID.svc.id.goog
,其中 PROJECT_ID
是与关联集群关联的 Google 项目 ID。
您可以使用常规 Google Cloud IAM 政策来控制 Kubernetes 服务账号对 Google Cloud 服务的访问权限。Kubernetes 服务账号主账号是工作负载身份池中的 KSA 的表示形式。其格式如下:
serviceAccount:WORKLOAD_IDENTITY_POOL_NAME[KSA_NAMESPACE/KSA_NAME]
如需向 Kubernetes 服务账号授予角色,请使用以下命令:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_ID.svc.id.goog[KSA_NAMESPACE/KSA_NAME]" \
--role=IAM_ROLE
您需要将其中的:
- PROJECT_ID:您的 Google Cloud 项目 ID
- KSA_NAMESPACE:此服务账号所在的集群命名空间
- KSA_NAME:您要向其授予权限的 Kubernetes 服务账号的名称
- IAM_ROLE:您要向此 KSA 授予的 Google Cloud 角色