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

首次编写K8s Network Policy Helm模板遇YAML语法错误求助

Kubernetes Network Policy Helm模板语法错误修复

错误原因

错误出在ingress:行直接拼接模板变量赋值语句,破坏了YAML的结构规则:ingress作为列表类型,其值必须是序列项(以-开头),但模板代码的插入导致YAML解析器无法识别后续的序列项,从而抛出block sequence entries are not allowed in this context错误。

修复后的完整模板

{{- $name := "cvtor-network-policy" }}
{{- $ingress := .Values.networkPolicy.ingress }}
{{- $egress := .Values.networkPolicy.egress }}
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: {{ $name }}
  namespace: {{ .Release.Namespace }}
spec:
  podSelector:
    matchLabels:
      control-plane: cvm
  policyTypes:
    - Ingress
    - Egress
  ingress:
    {{- if $ingress.cidr }}
    - from:
        - ipBlock:
            cidr: {{ $ingress.cidr }}
            {{- if $ingress.except }}
            except: {{ toYaml $ingress.except | nindent 14 }}
            {{- end }}
      {{- if $ingress.ports }}
      ports: {{ toYaml $ingress.ports | nindent 8 }}
      {{- end }}
    {{- else if $ingress.ports }}
    - ports: {{ toYaml $ingress.ports | nindent 8 }}
    {{- end }}
  egress:
    {{- if $egress.ports }}
    - ports: {{ toYaml $egress.ports | nindent 8 }}
    {{- end }}

关键修改点

  • 提前变量赋值:将$ingress和$egress的变量赋值移到YAML结构之外,避免干扰YAML键值对的解析。
  • 统一缩进规范:所有序列项(- from:、- ports:)保持与ingress:/egress:同级的缩进(4空格),子项依次递进,确保生成的YAML结构合法。
  • 使用nindent控制缩进:对toYaml输出的内容添加nindent参数,保证嵌套内容的缩进正确,比如except字段作为ipBlock的子项,使用nindent 14对齐。
  • 合并条件判断逻辑:将cidr和ports的判断合并到同一个序列项中,避免生成多个独立的ingress规则(除非业务需要分开,否则合并更符合NetworkPolicy的语法逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:47:16