Helm伞形图引用自定义values文件报nil pointer evaluating host错误
问题原因与解决方案
根本原因
这是Helm伞形图的Values作用域规则导致的:
- 子chart默认无法直接访问伞形图顶层传入的、非
global域、且未归属到对应子chart名下的配置值 - 子chart的
.Values默认仅包含三类配置:- 子chart自己
values.yaml文件中定义的默认值 - 伞形图顶层传入的
global域下的所有公共配置 - 伞形图顶层配置中、键名与子chart名称完全匹配的配置块下的所有值
- 子chart自己
你之前直接在顶层values-ext.yaml中定义的sql配置块不属于上面三类,所以子chart读取时会识别为nil,报指针空值错误,用$.Values也无法解决,因为$指代的是当前子chart模板自身的根作用域,依然无法跨作用域访问伞形图顶层的非规则内配置。
两种可行解决方案
方案1:使用global公共域(适合多子chart共用的配置)
- 修改
values-ext.yaml,把公共配置放到global字段下:
global: sql: common: host: <SQL Server host> user: <SQL user> pwd: <SQL password>
- 修改子chart的
configmap.yaml,引用global域下的配置:
apiVersion: v1 kind: ConfigMap metadata: name: "childchart-config" labels: app: some-app chart: my-child-chart data: ConnectionStrings__DbConnection: Server={{ .Values.global.sql.common.host }};Database=some-db
方案2:配置归属到对应子chart名下(适合仅单个子chart使用的配置)
- 先确认子chart的名称:即子chart自身
Chart.yaml中name字段的取值,假设为child-chart - 修改
values-ext.yaml,把sql配置块放到子chart名称对应的键下:
child-chart: sql: common: host: <SQL Server host> user: <SQL user> pwd: <SQL password>
- 子chart的
configmap.yaml不需要做任何修改,原写法{{ .Values.sql.common.host }}可正常生效。
修改完成后再执行helm template --values values-ext.yaml .即可正常渲染。
内容的提问来源于stack exchange,提问作者ngruson
相关产品推荐
相关产品推荐

