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

Kubernetes中如何在多行ConfigMap内引用Secret存储的密码值

结论

你看到的valueFrom.secretKeyRef用法不能直接用在当前的ConfigMap场景下:Kubernetes的ConfigMapdata字段本身不支持直接引用Secret资源的内容,只有容器的环境变量、Volume挂载等配置场景才支持通过valueFrom引用Secret值。

可行的两种改造方案

你可以根据自己的实际情况选其中一种修改:

方案1:通过Grafana原生环境变量注入密码

Grafana本身支持用环境变量覆盖所有配置项,LDAP的绑定密码对应的环境变量为GF_AUTH_LDAP_BIND_PASSWORD,你直接通过该环境变量引用Secret即可,无需修改现有ldap.toml的结构太多:

  1. 先修改你的ConfigMap,删除ldap.toml中的bind_password = ${BIND_PASSWORD}行,移除CI/CD中的BIND_PASSWORD参数
  2. 在Grafana的Deployment/StatefulSet配置中添加对应环境变量,引用存了密码的Secret:
spec:
  containers:
  - name: grafana
    image: ${REGISTRY}/${NAMESPACE}/grafana:你的镜像版本
    env: 
      - name: GF_AUTH_LDAP_BIND_PASSWORD
        valueFrom:
          secretKeyRef:
            name: ldap-bind-secret # 提前在集群中创建的存LDAP密码的Secret名称
            key: bind-password # Secret中存储密码的对应key

方案2:将完整ldap.toml存入Secret挂载使用

如果你的LDAP配置中敏感信息较多,不想拆分配置,可以直接把完整的ldap.toml存入Secret,代替原来的ConfigMap使用:

  1. 提前在集群中创建存储ldap配置的Secret(不要将明文密码的Secret配置提交到代码仓库):
apiVersion: v1
kind: Secret
metadata:
  name: grafana-ldap-config
  labels:
    app: ${APP}
type: Opaque
stringData:
  ldap.toml: |-
    [[servers]]
    ....
    # Search user bind dn
    bind_dn = "uid=tu0213,cn=users,o=company,c=de"
    bind_password = 实际的LDAP绑定密码
  1. 在Grafana的Deployment/StatefulSet中,将该Secret作为Volume挂载到Grafana读取LDAP配置的默认路径/etc/grafana/ldap.toml即可,删除原来的ConfigMap引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:05