首次编写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
相关产品推荐
相关产品推荐

