You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Helm的values.yaml中获取数组内的host值传入Ingress文件

解决方案

直接引用单个Host值

如果你的values.yaml里只有一个Host条目,直接通过数组索引引用即可,不需要tpl函数:

# templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress
spec:
  rules:
    - host: {{ .Values.hosts.0.host }}  # 直接取第一个元素的host字段
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {{ .Release.Name }}-service
                port:
                  number: 80

遍历多个Host条目

如果values.yaml里有多个Host需要配置到Ingress中,用range循环遍历数组即可:

# templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress
spec:
  rules:
{{- range .Values.hosts }}  # 遍历hosts数组
    - host: {{ .host }}       # 取当前元素的host字段
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {{ $.Release.Name }}-service  # 用$引用根上下文的Release变量
                port:
                  number: 80
{{- end }}

正确使用tpl函数的场景

如果你的Host值本身包含模板变量(比如需要动态注入Release名称),才需要用tpl函数,核心是要传递模板上下文(.)作为第二个参数:

比如修改values.yaml为:

hosts:
  - host: "{{ .Release.Name }}.defg.hij.io"

然后在Ingress模板中这样使用tpl:

# templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress
spec:
  rules:
    - host: {{ tpl .Values.hosts.0.host . }}  # 第二个参数.必须传递,用于解析模板变量
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {{ .Release.Name }}-service
                port:
                  number: 80

之前用tpl失败大概率是因为没传递第二个上下文参数,导致模板无法解析内部变量。

内容的提问来源于stack exchange,提问作者Arun Baby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:30:32