如何创建使用另一GCP项目服务账号运行的GKE节点池
结论
该需求可以实现,配置不生效是因为遗漏了必要的GCP内置服务代理账号权限,正确配置流程如下:
报错根因
你收到的报错
The user does not have access to service account: gke-node@project-A.iam.gserviceaccount.com. Ask a project owner to grant you the iam.serviceAccountUser role on the service account.
本质是GKE创建节点池时,除了你已经配置的Kubernetes Engine Service Agent,还有其他GCP内置服务代理需要拿到项目A中服务账号的iam.serviceAccountUser权限。
正确配置步骤
所有权限配置均在项目A的gke-node@project-A.iam.gserviceaccount.com服务账号的IAM权限页操作:
- 保留你已经配置的权限:给项目B的Kubernetes Engine Service Agent
service-<项目B数字ID>@container-engine-robot.iam.gserviceaccount.com授予roles/iam.serviceAccountUser角色 - 补充缺失的核心权限:给项目B的Google APIs Service Agent
service-<项目B数字ID>@cloudservices.gserviceaccount.com授予roles/iam.serviceAccountUser角色 - (可选)如果你是用个人账号/自定义服务账号手动创建节点池,给你的操作账号也授予
roles/iam.serviceAccountUser角色
生效验证
权限配置完成后等待2分钟左右让IAM权限全局同步,再重新创建项目B的节点池即可正常创建。
额外注意事项
- 如果节点需要访问项目A的其他云资源,需要单独给
gke-node@project-A.iam.gserviceaccount.com授予对应资源的访问权限 - 权限绑定优先直接绑定到
gke-node@project-A.iam.gserviceaccount.com服务账号本身,不要绑定到项目A的项目级IAM,避免权限范围过大
内容的提问来源于stack exchange,提问作者dippynark
相关产品推荐
相关产品推荐

