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

Kubernetes Ingress模板中基于active字段过滤主机配置

解决Ingress模板仅包含active为true的主机条目问题

现有配置文件

Values.yaml

ingress: {backendServiceName: serv-swarm-lc001, cluster_issuer: letsencrypt-oe-dev-001,
  ingressClassName: nginx-lc001, tls_acme: 'true'}
route:
  hosts:
    abcM:
      active: false
      host: chair112.abc.com
      logicalclustername: lc001
      offboardtimestamp: null
      physicalclustername: oe-dev-001
      region: us-east-1
      status: Triggered
      timestamp: |-
        {
          "timestamp": "2024-02-05T14:43:18.00847359Z"
        }
    SDzWAgVebH:
      active: true
      host: bis311.abc.com
      logicalclustername: lc001
      offboardtimestamp: NA
      physicalclustername: oe-dev-001
      region: us-east-1
      status: triggered
      timestamp: |-
        {
          "timestamp": "2024-04-04T15:54:21.649644213Z"
        }

原Ingress模板

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: {{ .Values.ingress.cluster_issuer }}
    kubernetes.io/tls-acme: {{ .Values.ingress.tls_acme | quote }}
    nginx.ingress.kubernetes.io/client-max-body-size: 16m
    nginx.ingress.kubernetes.io/proxy-body-size: 16m
  name: ingress-{{ .Release.Name }}
  namespace: {{ .Release.Namespace }}
  labels:
{{ include "common.labels" . | indent 4 }}
spec:
  ingressClassName: {{ .Values.ingress.ingressClassName }}
  rules:
  {{- range .Values.route.hosts }}
  - host: {{ - if .Values.route.hosts.host.active }} {{- end }}
    http:
      paths:
      - backend:
          service:
            name: {{ $.Values.ingress.backendServiceName }}
            port:
              number: 80
        path: /
        pathType: Prefix
      - backend:
          service:
            name: swaggerservice
            port:
              number: 80
        path: /swagger
        pathType: Prefix
  {{- end }}
  tls:
  {{- range .Values.route.hosts }}
  - hosts:
    - {{ .host | quote }}
    secretName: commodo-tls5
  {{- end }}

问题分析

原模板中条件判断写法错误:在range循环内部,当前迭代对象是单个host条目,直接用.active即可获取当前条目的active值,无需调用.Values.route.hosts.host.active,错误的引用路径导致模板解析失败。

修改后的正确Ingress模板

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: {{ .Values.ingress.cluster_issuer }}
    kubernetes.io/tls-acme: {{ .Values.ingress.tls_acme | quote }}
    nginx.ingress.kubernetes.io/client-max-body-size: 16m
    nginx.ingress.kubernetes.io/proxy-body-size: 16m
  name: ingress-{{ .Release.Name }}
  namespace: {{ .Release.Namespace }}
  labels:
{{ include "common.labels" . | indent 4 }}
spec:
  ingressClassName: {{ .Values.ingress.ingressClassName }}
  rules:
  {{- range $key, $host := .Values.route.hosts }}
  {{- if eq $host.active true }}
  - host: {{ $host.host | quote }}
    http:
      paths:
      - backend:
          service:
            name: {{ $.Values.ingress.backendServiceName }}
            port:
              number: 80
        path: /
        pathType: Prefix
      - backend:
          service:
            name: swaggerservice
            port:
              number: 80
        path: /swagger
        pathType: Prefix
  {{- end }}
  {{- end }}
  tls:
  {{- range $key, $host := .Values.route.hosts }}
  {{- if eq $host.active true }}
  - hosts:
    - {{ $host.host | quote }}
    secretName: commodo-tls5
  {{- end }}
  {{- end }}

关键修改点说明

  • 循环变量命名:将range .Values.route.hosts改为range $key, $host := .Values.route.hosts,明确迭代的键值对,方便直接引用当前host的属性。
  • 条件判断逻辑:在range内部添加{{- if eq $host.active true }},仅渲染active值为true的host条目,false的条目会被跳过。
  • host值正确引用:直接使用$host.host获取当前条目的域名,同时加上quote确保输出为字符串格式,符合Kubernetes YAML规范。
  • 全局变量引用:在循环内部引用根层级的Values时,使用$.Values(比如$.Values.ingress.backendServiceName),避免上下文切换导致的变量引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:45:30