如何在Helm模板中嵌套Vault注解模板并解析Values变量?
解决Helm与Vault模板嵌套时变量解析问题
问题核心是Helm和Vault都使用{{ }}作为模板语法标记,直接嵌套会导致Helm无法正确区分自身模板与需要传递给Vault的模板内容,所以{{ .Values.path }}被原样输出。
正确的做法是转义Vault模板的{{ }},让Helm优先解析自身的Values变量,再输出完整的Vault模板:
方法一:直接转义模板标签
vault.hashicorp.com/agent-inject-template-.env: | {{ "{{- with secret (print \"" }}{{ .Values.path }}{{ "\") -}}{{- range $k, $v := .Data.data -}}" }} {{ "{{ $k }}={{ $v }}" }} {{ "{{ end }}{{- end -}}" }}
方法二:使用Helm printf函数拼接(更简洁)
vault.hashicorp.com/agent-inject-template-.env: | {{ printf "{{- with secret (print \"%s\") -}}{{- range $k, $v := .Data.data -}}" .Values.path }} {{ "{{ $k }}={{ $v }}" }} {{ "{{ end }}{{- end -}}" }}
原理说明
- 用
{{ "{{" }}和{{ "}}" }}告诉Helm:这部分内容不需要解析,直接输出为{{和}} - Helm会先解析
{{ .Values.path }}替换为配置中的实际路径,再将整个模板内容输出给Vault使用 - 最终渲染后的YAML注解内容,就是Vault能够正确识别的模板,其中路径已替换为Helm Values中的值
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

