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

Helm模板转换JSON报错:如何将values.yaml的JSON字符串转为列表?

问题分析与解决

你的核心问题不是JSON转列表的失败,而是模板渲染后生成的YAML结构不符合Kubernetes网络策略的语法要求:你把ports部分放在了egress列表的外部,导致YAML解析时找不到对应的父键。

修正后的实现方案

首先,fromJson函数已经正确将JSON字符串转换成了列表,只需调整模板结构,让ports成为每个egress条目的子属性(因为每个出站规则需要同时指定目标IP和端口):

修改后的netpol.yaml

spec:
  podSelector:
    matchLabels:
      name: log-forwarder
  policyTypes:
  - Egress
  egress:
  {{- $json := .Values.network.cidrs | fromJson -}}
  {{- range $cidr := $json }}
  - to:
    - ipBlock:
        cidr: {{ $cidr }}
    ports:
    - protocol: TCP
      port: 443
  {{- end }}

额外优化建议

如果你的values.yaml不需要兼容非Helm的场景,其实可以直接定义为YAML列表,省去JSON转义的麻烦:
优化后的values.yaml

network:
  cidrs:
    - "123.123.123.123/32"
    - "123.124.125.125/32"

对应的模板也可以简化为:

spec:
  podSelector:
    matchLabels:
      name: log-forwarder
  policyTypes:
  - Egress
  egress:
  {{- range $cidr := .Values.network.cidrs }}
  - to:
    - ipBlock:
        cidr: {{ $cidr }}
    ports:
    - protocol: TCP
      port: 443
  {{- end }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:15:16