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

GCP凭证轮换后GitLab上Kubernetes部署失败求助

问题解决:GKE凭证轮换后GitLab流水线Kubernetes部署失败

核心结论

是的,你必须同步更新KUBE_TOKEN——GKE集群的服务账号令牌会随凭证自动轮换失效,旧令牌无法再通过集群认证,这是部署报错的直接原因。另外,gitlab-admin是Kubernetes集群内部的服务账号,不是GCP IAM账号,所以你在GCP IAM或服务账号列表里找不到它是正常的。

解决步骤

1. 获取有效的KUBE_TOKEN

操作需要你在本地安装并配置好gcloud CLI(已授权你的GCP项目):

  • 先获取GKE集群的本地凭证:
    gcloud container clusters get-credentials <你的集群名称> --zone <集群所在区域>
    
  • 查找gitlab-admin服务账号所在的命名空间(流水线里默认用uat,也可能在其他命名空间比如kube-system):
    kubectl get serviceaccounts --all-namespaces | grep gitlab-admin
    
  • 查看该服务账号关联的密钥(Secret):
    kubectl describe serviceaccount gitlab-admin -n <找到的命名空间>
    
    在输出的Mountable secrets或Tokens部分找到对应的Secret名称。
  • 提取并解码令牌:
    kubectl get secret <关联的Secret名称> -n <命名空间> -o jsonpath='{.data.token}' | base64 --decode
    
    把解码后的字符串复制,更新到GitLab项目的KUBE_TOKEN流水线变量中。

2. 验证配置有效性

更新变量后,可先在本地测试配置是否正确:

# 替换成你GitLab里的KUBE_URL、KUBE_CA和新的KUBE_TOKEN
export KUBE_URL="你的集群地址"
export KUBE_CA="你的CA证书内容"
export KUBE_TOKEN="新获取的令牌"

kubectl config set-cluster k8s --server="${KUBE_URL}" --certificate-authority=<(echo "${KUBE_CA}" | base64 --decode)
kubectl config set-credentials gitlab-admin --token="${KUBE_TOKEN}"
kubectl config set-context default --cluster=k8s --user=gitlab-admin --namespace=uat
kubectl config use-context default

# 测试集群连接
kubectl cluster-info

如果能正常返回集群信息,说明配置没问题,再重新运行GitLab流水线。

3. 长期优化建议(避免后续凭证轮换问题)

手动管理KUBE_TOKEN容易因轮换失效,建议改用GCP服务账号自动配置kubectl:

  • 在GCP IAM中创建一个服务账号,赋予roles/container.admin(GKE集群管理员)权限。
  • 下载该服务账号的JSON密钥文件,作为GitLab项目的变量(比如命名为GCP_SERVICE_ACCOUNT_KEY)。
  • 修改GitLab流水线脚本,替换原有的kubectl配置步骤:
    script:
      - echo "${GCP_SERVICE_ACCOUNT_KEY}" > service-account-key.json
      - gcloud auth activate-service-account --key-file=service-account-key.json
      - gcloud container clusters get-credentials <集群名称> --zone <区域> --project <项目ID>
      # 后续kubectl命令无需手动配置上下文,直接执行即可
      - sed -i "s#__IMAGETAG__#${LOWERCASE_CONTAINER_IMAGE_WEBSERVER}#g" kubernetes/server.yaml
      # ... 其他部署步骤
    
    这种方式会自动获取最新的集群凭证,无需手动维护KUBE_URL、KUBE_CA、KUBE_TOKEN。

额外注意

流水线中environment.name设置为staging,但脚本里把__ENVIRONMENT__替换成了prod,这可能是笔误,后续如果涉及环境配置逻辑,建议改成uat保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:47:18