使用jq筛选包含指定IP段的Kubernetes NetworkPolicy资源名称
问题原因
你遇到的Cannot iterate over null报错是因为部分NetworkPolicy资源不存在spec.egress字段,或某条egress规则下没有to字段,直接遍历空值会触发jq的迭代错误。你之前的第二种写法虽然能遍历所有数组元素,但没有处理空值场景,第一种写法只取数组首位元素会漏匹配。
正确处理命令
kubectl get netpol -o json | jq -r '.items[] | select(any(.spec.egress[]?; any(.to[]?; .ipBlock.cidr == "1.2.3.4/32"))) | .metadata.name'
逻辑说明
[]?是jq的可选迭代器,遇到空值时会直接跳过不会抛出错误- 两层
any()嵌套:第一层遍历当前NetworkPolicy的所有egress规则,第二层遍历单条egress规则的所有出口目标,只要任意一个目标的CIDR和你指定的地址匹配,就会选中该NetworkPolicy,输出它的名称
内容的提问来源于stack exchange,提问作者TheKangaroo
相关产品推荐
相关产品推荐

