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

Helm模板编写K8s NetworkPolicy时range遍历无法生成预期egress规则

Helm模板NetworkPolicy遍历不生效问题排查

核心原因

你遇到的渲染结果为空的核心问题是直接输出Helm内部数组对象未做YAML序列化,其次存在缩进配置错误:

  1. 模板中{{$item.cidrs | nindent 4 }}写法里,$item.cidrs是Go语言层面的数组对象,不是YAML格式字符串,直接传入nindent过滤器无法输出有效内容,最终导致整个range块渲染结果为空。
  2. 就算序列化完成后,nindent 4的缩进量不符合YAML层级要求,会导致生成的规则格式错误。

修正后的模板

spec:
  podSelector:
    matchLabels:
      policy: allow
  policyTypes:
  - Egress
  egress:
{{- range $item := .Values.networkPolicy.ports }}  
  - ports:
    - port: {{ $item.port }}
      protocol: TCP
    to:
{{ $item.cidrs | toYaml | nindent 6 }}
{{- end }}

修改点说明:

  • 新增toYaml过滤器:将数组对象转换为标准YAML格式字符串,解决内容为空的问题
  • 缩进量从4调整为6:to字段本身位于4个空格的缩进层级,下属的CIDR规则需要再多2个缩进才能符合YAML语法要求
  • 保留range开头的减号不影响逻辑,只要缩进配置正确即可正常渲染

额外排查项

如果修改后仍然没有输出内容,可通过以下方式排查:

  • 执行helm template命令时确认是否添加了-f <你的values文件路径>参数,避免配置未被正确加载
  • 执行helm template . --debug查看调试日志,确认.Values.networkPolicy.ports字段是否正确读取到了配置值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:57:03