如何在Helm中引用key包含点(.)的Kubernetes Secret的值?
问题根源
你的代码无法取值的核心原因是 Go 模板语法中.操作符会将标识符按.分割为多层嵌套属性,你写的$secret.data.user.password会被解析为:先取$secret.data下的user对象,再取user下的password属性。但你定义的 Secret 中 key 是完整的user.password字符串,属于data下的直接一级属性,不存在嵌套的user对象,因此无法匹配到对应值。
解决方法
使用 Go 模板内置的index函数来访问包含特殊字符的 key,直接传入完整的 key 字符串即可,示例代码如下:
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" -}} {{- if $secret -}} <!-- 取 base64 编码的原始值 --> {{- print (index $secret.data "user.password") }} <!-- 如果需要直接获取明文,加上 b64dec 解码即可 --> {{- print (index $secret.data "user.password" | b64dec) }} {{- end -}}
补充说明
index函数是 Go 模板中专门用来按索引/键名访问集合元素的方法,支持传入包含特殊字符的字符串作为键名,不会被解析为嵌套路径。- 注意原代码缺少
{{- end -}}来闭合if判断,使用时需要补充完整,避免模板渲染报错。
内容的提问来源于stack exchange,提问作者Java
相关产品推荐
相关产品推荐

