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

GCP Cloud Build中Helm步骤如何正确引用Secret Manager密钥

问题根因

两种配置失效分别对应两个逻辑误区:

  • 直接在helm启动参数里传secret.var3=$$VAR3时,GCP Secret Manager注入的密钥是存到容器环境变量里的,环境变量的占位符解析只有shell程序会执行,直接把带$VAR3的字符串传给helm二进制,程序不会主动替换环境变量,最终传入的就是字面量$VAR3。
  • 手动把entrypoint改成helm后出现本地8080端口连接拒绝,是因为你用的自定义Helm镜像默认自带入口脚本,会自动读取CLOUDSDK_COMPUTE_ZONE、CLOUDSDK_CONTAINER_CLUSTER环境变量,执行gcloud命令拉取GKE集群凭据、生成可用的kubeconfig文件。手动覆盖entrypoint为helm后,这个前置初始化流程被直接跳过,helm找不到集群连接配置,就会默认请求本地8080端口的Kubernetes API服务,自然连接失败。
可用配置

直接用bash作为入口的写法是可行的,只需要补全集群凭据拉取步骤,在shell上下文中完成变量解析即可,参考配置如下:

steps:
  - name: gcr.io/$PROJECT_ID/helm
    entrypoint: 'bash'
    args:
      - -c
      - |
        # 拉取GKE集群访问凭据
        gcloud container clusters get-credentials "$CLOUDSDK_CONTAINER_CLUSTER" --zone "$CLOUDSDK_COMPUTE_ZONE" --project "$PROJECT_ID"
        # 执行helm部署,shell自动完成环境变量解析
        helm upgrade "$_NAME" "./deployment/charts/$_NAME" \
          --namespace "$_NAMESPACE" \
          --install \
          --set secret.var3="$VAR3"
    env:
      - "CLOUDSDK_COMPUTE_ZONE=$_GKE_LOCATION"
      - "CLOUDSDK_CONTAINER_CLUSTER=$_GKE_CLUSTER"
    secretEnv: ['VAR3']
    id: Apply deploy
substitutions:
  _GKE_LOCATION: europe-west3-b
  _GKE_CLUSTER: cluster-name
  _NAME: "test"
  _NAMESPACE: "test"
availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/test-var-3/versions/latest
      env: 'VAR3'
options:
  substitution_option: 'ALLOW_LOOSE'
配置说明
  • 命令里引用VAR3用单$即可,因为命令在bash进程内执行,会直接读取容器内的环境变量值,不需要用Cloud Build构建期变量替换的$$语法。
  • 新增的gcloud container clusters get-credentials就是原镜像默认入口里的集群初始化逻辑,手动调用bash入口时需要显式执行这一步。
  • 可选添加--install参数,实现release不存在时自动安装,避免首次部署报错。
  • 提前确认Cloud Build服务账号持有两类权限:GKE集群的容器管理权限、对应Secret Manager密钥版本的访问权限,否则会出现权限类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:27:35