如何使用JSONPath访问含特殊字符的OCP节点注解字段?
解决OpenShift中JSONPath访问带特殊字符节点注解的问题
问题根源
注解键k8s.ovn.org/l3-gateway-config包含.和/特殊字符,直接用单引号包裹键名会触发shell解析冲突,且JSONPath对含特殊字符的键需要用双引号标识。
正确访问注解内容的命令
oc get nodes $HOSTNAME_BMH_NODE_2 -o jsonpath='{.metadata.annotations["k8s.ovn.org/l3-gateway-config"]}'
提取内部next-hop和ip-address字段
注意:k8s.ovn.org/l3-gateway-config的注解值是JSON格式的字符串,而非原生JSON对象,因此需要先解析该字符串才能提取嵌套字段,可结合以下工具实现:
用jq处理
oc get nodes $HOSTNAME_BMH_NODE_2 -o jsonpath='{.metadata.annotations["k8s.ovn.org/l3-gateway-config"]}' | jq -r '.["next-hop"], .["ip-address"]'
用yq(v4+版本)处理
oc get nodes $HOSTNAME_BMH_NODE_2 -o yaml | yq e '.metadata.annotations."k8s.ovn.org/l3-gateway-config" | fromjson | ."next-hop", ."ip-address"' -
关键注意事项
- 整个JSONPath表达式用单引号包裹,避免shell解析内部的双引号和特殊字符
- 含特殊字符的注解键必须用双引号包裹,符合JSONPath的语法规则
- 注解值为JSON字符串时,单纯JSONPath无法直接提取嵌套字段,必须借助
jq或yq完成解析后再提取
内容的提问来源于stack exchange,提问作者user21113865
相关产品推荐
相关产品推荐

