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

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中的指定字段值

验证步骤

  1. 删除旧的自动生成Secret:kubectl delete secret csi-secret-newrelic -n pp-dev
  2. 重启Pod触发CSI驱动重新同步Secret:kubectl rollout restart deployment <你的Deployment名称> -n pp-dev
  3. 查看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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:57:49