Pod环境变量加载格式异常求助(AWS SecretProviderClass)
问题:AWS CSI Secret Store加载环境变量格式不符合预期
我的SecretProviderClass配置已成功创建Secret并注入Pod,但环境变量加载格式不符合预期——当前加载的是完整JSON对象,我只需要其中的纯密钥值。
当前配置
SecretProviderClass
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: pp-dev-pp-webapp namespace: pp-dev spec: provider: aws secretObjects: - secretName: csi-secret-newrelic type: Opaque data: - key: NEW_RELIC_LICENSE_KEY objectName: NEW_RELIC_LICENSE_KEY parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-1:1xxxxxx:secret:xxxxxxxx" objectAlias: "NEW_RELIC_LICENSE_KEY" objectType: "secretsmanager"
Deployment片段
volumes: - name: pod-webapp csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "pp-dev-pp-webapp" containers: - name: {{ include "helm.name" . }} image: {{ .Values.imageRepository }}/{{ .Values.imageName }}:{{ .Values.imageTag }} imagePullPolicy: {{ .Values.imagePullPolicy }} volumeMounts: - name: pod-webapp mountPath: "/mnt" readOnly: true env: - name: test_name valueFrom: secretKeyRef: name: csi-secret-newrelic key: NEW_RELIC_LICENSE_KEY
问题现象
当前环境变量输出:
test_name={"NEW_RELIC_LICENSE_KEY":"xxxxxxxxxxxxxxxx"}
期望输出:
test_name=xxxxxxxxxxxxxxxx
原因分析
AWS Secrets Manager中存储的目标secret是JSON格式的完整对象,当前配置直接将整个JSON对象映射为Kubernetes Secret的一个key值,导致加载环境变量时带出了完整的JSON结构。
解决方案
修改SecretProviderClass的parameters.objects配置,添加jmesPath字段提取JSON中的具体值:
修改后的SecretProviderClass
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: pp-dev-pp-webapp namespace: pp-dev spec: provider: aws secretObjects: - secretName: csi-secret-newrelic type: Opaque data: - key: NEW_RELIC_LICENSE_KEY objectName: NEW_RELIC_LICENSE_KEY parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-1:1xxxxxx:secret:xxxxxxxx" objectAlias: "NEW_RELIC_LICENSE_KEY" objectType: "secretsmanager" jmesPath: "NEW_RELIC_LICENSE_KEY" # 新增:提取JSON中的指定字段值
验证步骤
- 删除旧的自动生成Secret:
kubectl delete secret csi-secret-newrelic -n pp-dev - 重启Pod触发CSI驱动重新同步Secret:
kubectl rollout restart deployment <你的Deployment名称> -n pp-dev - 查看Pod环境变量验证结果:
kubectl exec <Pod名称> -n pp-dev -- env | grep test_name
配置生效后,CSI驱动会自动解析Secrets Manager中的JSON内容,只提取NEW_RELIC_LICENSE_KEY对应的纯值存入Kubernetes Secret,环境变量就能得到预期的纯密钥内容。
内容的提问来源于stack exchange,提问作者Nihit Raj
相关产品推荐
相关产品推荐

