Helm使用glob模式无法读取上级目录文件生成ConfigMap问题求助
问题原因
- Helm 中
.Files工具的作用范围被严格限制在 Chart 根目录(即Chart.yaml所在的目录)内,设计上不允许访问 Chart 根目录之外的文件系统路径,避免安全风险和可移植性问题。 .Files.Glob的路径参数是相对于 Chart 根目录解析,而非相对于模板文件(也就是你的configmap.yaml所在的templates目录)解析。你写的../prop/*会被解析为从 Chart 根目录向上跳转一级去找prop目录,自然匹配不到任何文件。
解决方案
方案1(最推荐):调整资源目录位置
将你的prop目录移动到 Chart 根目录下,此时修改configmap.yaml中的匹配规则即可:
apiVersion: v1 kind: ConfigMap metadata: name: helm-configmap data: {{ (.Files.Glob "prop/*").AsConfig | indent 2 }}
该方案符合 Helm 的目录设计规范,不需要额外参数兼容,可移植性最好。
方案2:使用软链接+参数适配
如果确实不能移动prop目录,可以在 Chart 根目录下创建指向上级prop目录的软链接:
# 在Chart根目录下执行 ln -s ../prop ./prop
执行 helm 命令时额外添加--follow-links参数,允许 Helm 跟随软链接读取文件:
helm install --follow-links <release名称> <Chart路径>
方案3:外部传值注入
如果不想调整目录结构,也可以在执行 helm 命令时通过--set-file参数把文件内容注入到Values中,再在模板里读取,适合只有少量文件的场景:
helm install <release名称> <Chart路径> --set-file prop.config1=../prop/config1.yaml --set-file prop.config2=../prop/config2.yaml
模板中对应写法:
data: {{- range $k, $v := .Values.prop }} {{ $k }}: {{ $v | indent 4 }} {{- end }}
内容的提问来源于stack exchange,提问作者NealR
相关产品推荐
相关产品推荐

