如何将Helm Chart域名配置提取至独立文件并通过ArgoCD引用?
问题原因
你犯了一个关键错误:Helm的values文件(比如values.dev.yaml)不能包含模板语法{{ ... }}。values文件是用来提供配置值的文件,Helm不会解析其中的模板表达式,直接写{{ .Values.subdomains }}会导致YAML解析失败——YAML解析器把{{当成非法字符,因此报错找不到预期的冒号。
解决方法
要实现域名列表复用,需要在Chart的模板文件中直接引用subdomains数组,而非在values文件里使用模板语法。具体步骤如下:
1. 保留独立的subdomains配置文件
继续使用values.subdomains.dev.yaml定义域名数组:
subdomains: - test.example.com - test2.example.com
2. 修改Chart的Ingress模板文件
找到Chart中templates/ingress.yaml文件,调整其中的规则和TLS配置,直接引用.Values.subdomains:
原模板片段(示例):
spec: rules: {{- range .Values.ingress.hostname }} - host: {{ . }} http: paths: - path: / pathType: Prefix backend: service: name: {{ include "app.fullname" . }} port: number: 80 {{- end }} {{- if .Values.ingress.tls }} tls: {{- range .Values.ingress.tls }} - secretName: {{ .secretName }} hosts: {{- range .hosts }} - {{ . }} {{- end }} {{- end }} {{- end }}
修改后的模板片段:
spec: rules: {{- range .Values.subdomains }} - host: {{ . }} http: paths: - path: / pathType: Prefix backend: service: name: {{ include "app.fullname" $ }} # 用$引用根上下文 port: number: 80 {{- end }} {{- if .Values.ingress.tls }} tls: {{- range .Values.ingress.tls }} - secretName: {{ .secretName }} hosts: {{- range $.Values.subdomains }} # 用$引用根上下文的subdomains - {{ . }} {{- end }} {{- end }} {{- end }}
3. 简化values.dev.yaml
既然模板直接引用subdomains,values.dev.yaml里不需要再重复配置hostname和tls.hosts:
ingress: enabled: true ingressClassName: nginx tls: - secretName: wildcard-subdomain-cert annotations: nginx.ingress.kubernetes.io/proxy-body-size: 40m nginx.ingress.kubernetes.io/server-tokens: "false"
4. 验证配置
本地先执行Helm模板命令测试:
helm template . --name-template app --namespace frontend --values values.dev.yaml --values values.subdomains.dev.yaml
如果能正常生成Ingress资源,说明配置正确,再通过ArgoCD同步应用即可。
替代方案(无需修改Chart模板)
如果无法修改Chart模板,可以通过ArgoCD的parameters字段传递合并后的数组:
在ArgoCD应用Manifest中添加:
spec: source: helm: valueFiles: - values.dev.yaml - values.subdomains.dev.yaml parameters: - name: ingress.hostname value: "{{ .Values.subdomains }}" - name: ingress.tls[0].hosts value: "{{ .Values.subdomains }}"
但这种方式不如修改模板优雅,且需要注意数组的传递格式,优先推荐修改模板的方案。
内容的提问来源于stack exchange,提问作者Mr.P
相关产品推荐
相关产品推荐

