You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态创建的GKE Deployment无法通过服务账号认证

GKE Workload Identity 动态创建Deployment权限问题排查

关键排查步骤

  • 确认动态Deployment的服务账号配置
    检查Ruby代码生成的Deployment模板中,spec.template.spec.serviceAccountName是否和正常运行的Deployment完全一致。如果该字段缺失或配置错误,Pod会使用命名空间的默认服务账号,而默认账号可能未绑定openc3-sa@<PROJECTID>.iam.gserviceaccount.com。
  • 验证Workload Identity绑定状态
    重新执行绑定命令确保关联生效(即使之前配置过,动态创建的Pod可能未同步最新绑定):
    gcloud iam service-accounts add-iam-policy-binding openc3-sa@<PROJECTID>.iam.gserviceaccount.com \
      --member "serviceAccount:<PROJECTID>.svc.id.goog[<NAMESPACE>/<K8S-SERVICE-ACCOUNT>]" \
      --role "roles/iam.workloadIdentityUser"
    
    执行后等待1-2分钟,再重新创建Deployment测试。
  • 检查Pod的身份挂载情况
    进入动态创建的Pod,执行以下命令确认Workload Identity凭证是否正确挂载:
    ls /var/run/secrets/google.com/serviceaccount/
    
    正常应返回token、ca.crt等文件,若不存在说明Pod未启用Workload Identity。
  • 验证存储桶的IAM策略
    即使服务账号有项目级Storage Admin,存储桶可能存在单独的IAM限制。执行命令检查桶的权限:
    gsutil iam get gs://<YOUR-BUCKET-NAME>
    
    确认openc3-sa@<PROJECTID>.iam.gserviceaccount.com在桶的IAM列表中,或项目级权限已继承到桶。

Ruby代码配置检查

确保动态创建Deployment时正确指定服务账号,示例代码片段:

deployment_spec = {
  apiVersion: "apps/v1",
  kind: "Deployment",
  metadata: { name: "your-dynamic-deployment" },
  spec: {
    template: {
      spec: {
        serviceAccountName: "your-working-k8s-sa", # 必须和正常Deployment使用的一致
        containers: [
          { name: "your-container", image: "your-image:tag" }
        ]
      }
    }
  }
}

kubeclient.create_deployment(deployment_spec)

错误日志:

/usr/lib/ruby/gems/3.1.0/gems/google-cloud-storage-1.43.0/lib/google/cloud/storage/service.rb:913:in 'rescue in execute': forbidden: openc3-sa@<PROJECTID>.iam.gserviceaccount.com does not have storage.buckets.get access to the Google Cloud Storage bucket. (Google::Cloud::PermissionDeniedError)

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:20:35