Kubernetes中如何在多行ConfigMap内引用Secret存储的密码值
结论
你看到的valueFrom.secretKeyRef用法不能直接用在当前的ConfigMap场景下:Kubernetes的ConfigMapdata字段本身不支持直接引用Secret资源的内容,只有容器的环境变量、Volume挂载等配置场景才支持通过valueFrom引用Secret值。
可行的两种改造方案
你可以根据自己的实际情况选其中一种修改:
方案1:通过Grafana原生环境变量注入密码
Grafana本身支持用环境变量覆盖所有配置项,LDAP的绑定密码对应的环境变量为GF_AUTH_LDAP_BIND_PASSWORD,你直接通过该环境变量引用Secret即可,无需修改现有ldap.toml的结构太多:
- 先修改你的ConfigMap,删除
ldap.toml中的bind_password = ${BIND_PASSWORD}行,移除CI/CD中的BIND_PASSWORD参数 - 在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使用:
- 提前在集群中创建存储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绑定密码
- 在Grafana的Deployment/StatefulSet中,将该Secret作为Volume挂载到Grafana读取LDAP配置的默认路径
/etc/grafana/ldap.toml即可,删除原来的ConfigMap引用。
内容的提问来源于stack exchange,提问作者Data Mastery
相关产品推荐
相关产品推荐

