如何配置GCP Secret Store CSI Driver提取K8s环境变量密钥值
解决GCP Secret Store CSI Driver提取JSON密钥特定键值到Pod环境变量的问题
你当前的配置里同时混用了secrets和objects字段,且secretObjects部分仍引用完整的JSON文件admin.txt,未用到jmesPath解析后的键值——这就是环境变量拿到完整JSON字符串的原因。
修正后的SecretProviderClass配置
--- apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: test-secret spec: provider: gcp parameters: objects: | - objectName: "testpassword" objectType: secretsmanager resourceName: "projects/<project-id>/secrets/testpassword/versions/latest" jmesPath: - path: "admin_user" objectAlias: "admin_user" - path: "admin_password" objectAlias: "admin_password" secretObjects: - secretName: testpassword type: Opaque data: - objectName: "admin_user" # 对应jmesPath定义的objectAlias key: admin_user - objectName: "admin_password" # 对应jmesPath定义的objectAlias key: admin_password
配置说明
- 移除冗余的
secrets字段,仅用objects字段处理Secret Manager密钥的解析逻辑 - 在
objects块中明确指定Secret Manager的resourceName,通过jmesPath提取JSON中的目标字段,并为每个字段设置objectAlias作为标识 secretObjects部分直接引用解析后的objectAlias,将提取出的键值同步到Kubernetes Secret的对应key中
简化后的Pod配置(可选)
如果不需要将密钥挂载到容器文件系统,可以移除卷挂载相关配置,仅保留环境变量引用:
--- apiVersion: v1 kind: Pod metadata: name: test-pod namespace: default spec: serviceAccountName: app-sa containers: - image: gcr.io/google.com/cloudsdktool/cloud-sdk:slim name: mypod env: - name: "ADMIN_USER" valueFrom: secretKeyRef: name: "testpassword" key: admin_user - name: "ADMIN_PASSWORD" valueFrom: secretKeyRef: name: "testpassword" key: admin_password resources: requests: cpu: 100m tty: true
验证结果
部署完成后,进入容器检查环境变量:
kubectl exec -it test-pod -- env | grep ADMIN_
预期输出:
ADMIN_USER=test-admin ADMIN_PASSWORD=password
内容的提问来源于stack exchange,提问作者curiousgeek
相关产品推荐
相关产品推荐

