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

从Google Secret Manager读取JSON密钥并转为Pod环境变量

解决方案:将GCP Secret Manager的JSON密钥转为Kubernetes Pod环境变量

方法1:使用GCP Secret Store CSI Driver(生产环境推荐)

这是Kubernetes与GCP原生集成的方案,无需手动中转密钥,支持自动同步Secret Manager的密钥更新。

步骤1:启用CSI Driver(GKE集群)

通过GCloud命令为集群开启Secret Store CSI Driver插件:

gcloud container clusters update YOUR_CLUSTER_NAME --update-addons=GcpSecretManagerCSIProvider=ENABLED

步骤2:创建SecretProviderClass资源

该资源定义从Secret Manager拉取的密钥,并用JMESPATH提取JSON中的指定键值(和你在AWS的用法一致):

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: gcp-json-secret
spec:
  provider: gcp
  parameters:
    secrets: |
      - resourceName: "projects/YOUR_PROJECT_ID/secrets/YOUR_SECRET_NAME/versions/latest"
        path: "secret.json"  # 密钥挂载到Pod内的文件名
  secretObjects:
    - secretName: k8s-env-secret
      type: Opaque
      data:
        - key: value-A  # Kubernetes Secret中的键名
          objectName: secret.json
          jmesPath: "value-A"  # JMESPATH表达式提取对应值
        - key: value-B
          objectName: secret.json
          jmesPath: "value-B"

替换YOUR_PROJECT_ID和YOUR_SECRET_NAME为你的实际信息。

步骤3:在Pod中引用环境变量

在Pod配置里直接引用生成的Kubernetes Secret,将键值转为环境变量:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-container
    image: nginx
    env:
      - name: value-A
        valueFrom:
          secretKeyRef:
            name: k8s-env-secret
            key: value-A
      - name: value-B
        valueFrom:
          secretKeyRef:
            name: k8s-env-secret
            key: value-B
  volumes:
  - name: secrets-store-inline
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        secretProviderClass: "gcp-json-secret"

Pod启动后即可通过${value-A}和${value-B}读取对应值。

方法2:手动中转(测试/临时场景)

如果不需要自动同步,可手动导出密钥并创建Kubernetes Secret:

步骤1:从Secret Manager导出JSON密钥

gcloud secrets versions access latest --secret=YOUR_SECRET_NAME > secret.json

步骤2:创建Kubernetes Secret

用jq解析JSON,提取键值对生成Secret:

kubectl create secret generic k8s-env-secret \
  --from-literal=value-A=$(jq -r '.["value-A"]' secret.json) \
  --from-literal=value-B=$(jq -r '.["value-B"]' secret.json)

步骤3:在Pod中引用环境变量

和方法1的步骤3完全一致,直接在Pod的env字段引用k8s-env-secret的键即可。

关键注意事项

  • 确保集群节点服务账号拥有roles/secretmanager.secretAccessor权限,否则无法拉取Secret Manager密钥。
  • JSON中的特殊字符键(如带连字符的value-A)可直接作为环境变量名,Kubernetes支持此类命名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:50:07