kubectl v1.19使用JSONPATH正则匹配Pod名称报错无法识别~字符
故障原因
- Kubernetes 官方内置的 JSONPath 语法未支持正则匹配运算符
=~,该运算符属于第三方 JSONPath 实现的扩展功能,因此 kubectl 解析命令时会将~识别为非法字符抛出错误。 - 该问题与你当前使用的 kubectl 客户端、集群版本无关,所有 Kubernetes 版本的原生 JSONPath 均不支持正则匹配能力。
解决方法
方案1:搭配 jq 工具实现正则匹配(推荐)
jq 是通用 JSON 处理工具,原生支持正则匹配逻辑,执行以下命令即可实现你的需求:
kubectl get po -n sdfd -o json | jq -r '.items[] | select(.metadata.generateName | test("abc.*?"; "i")) | .status.podIP'
其中 test 函数的第二个参数 i 对应你需要的忽略大小写匹配规则,无匹配结果时不会输出内容。
方案2:无需额外工具的实现方式
如果不方便安装 jq,也可以结合 grep、awk 实现匹配:
kubectl get po -n sdfd -o custom-columns="GENERATE_NAME:.metadata.generateName,POD_IP:.status.podIP" --no-headers | grep -i "^abc" | awk '{print $2}'
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

