使用kf push推送Spring Boot应用到GKE集群时token下载失败报错
问题根因
该403报错是GKE Workload Identity配置缺失导致的,Kf构建任务使用的Kubernetes服务账号(KSA)没有权限绑定到目标Google服务账号(GSA)kf-poc-cluster-sa@kf-poc-.iam.gserviceaccount.com,无法获取访问云资源的访问令牌。
排查步骤
- 确认GKE集群是否开启了Workload Identity功能,执行命令:
如果返回空值说明集群未开启Workload Identity,需要先开启该功能。gcloud container clusters describe <你的集群名> --zone <集群可用区> --format="value(workloadIdentityConfig.workloadPool)" - 检查Kf默认构建服务账号
kf-builder(位于kf命名空间)是否和报错中的GSA完成了IAM绑定,执行命令:
查看返回结果中是否存在gcloud iam service-accounts get-iam-policy kf-poc-cluster-sa@kf-poc-.iam.gserviceaccount.com --format="value(bindings)"roles/iam.workloadIdentityUser角色的绑定,绑定主体格式为serviceAccount:<你的项目ID>.svc.id.goog[kf/kf-builder],不存在则说明绑定缺失。 - 检查
kf-builder服务账号的注解配置是否正确,执行命令:
确认注解kubectl describe sa kf-builder -n kfiam.gke.io/gcp-service-account的值为报错中提到的GSA完整地址,配置错误也会导致令牌获取失败。
解决步骤
注意:所有命令中<>包裹的占位符需要替换为你实际的集群、项目、可用区信息
- 如果集群未开启Workload Identity,执行如下命令开启:
开启后需要重启对应节点池的节点使配置生效。gcloud container clusters update <你的集群名> --zone <集群可用区> --workload-pool=<你的项目ID>.svc.id.goog - 为Kf构建服务账号绑定Workload Identity用户角色:
gcloud iam service-accounts add-iam-policy-binding kf-poc-cluster-sa@kf-poc-.iam.gserviceaccount.com --role roles/iam.workloadIdentityUser --member "serviceAccount:<你的项目ID>.svc.id.goog[kf/kf-builder]" - 为
kf-builder服务账号添加正确的GSA关联注解:kubectl annotate serviceaccount kf-builder -n kf iam.gke.io/gcp-service-account=kf-poc-cluster-sa@kf-poc-.iam.gserviceaccount.com --overwrite - 配置完成后等待1-2分钟让IAM权限同步,重新执行
kf push命令验证应用推送是否正常。
内容的提问来源于stack exchange,提问作者vipin
相关产品推荐
相关产品推荐

