Kubernetes Endpoints自定义列提取IP失败问题求助
解决Kubernetes Endpoints提取名称与IP地址的问题
你的命令无法输出结果,核心原因是索引使用错误:原命令中subsets[0].addresses[0][0].ip里的addresses[0][0]是无效写法——addresses数组的元素是单个IP对象(如{"ip": "10.10.1.1"}),并非嵌套数组,不需要双重索引。
正确命令示例
1. 提取所有IP地址(逗号分隔)
该命令会遍历所有子集(subsets)和每个子集下的所有IP地址,将结果用逗号拼接:
kubectl get endpoints -o custom-columns=NAME:.metadata.name,ENDPOINTS:.subsets[*].addresses[*].ip
针对你提供的mysvc Endpoints,输出会是:
NAME ENDPOINTS mysvc 10.10.1.1,10.10.2.2,10.10.3.3
2. 仅提取第一个子集的第一个IP
如果只需要单个IP(比如第一个子集的第一个地址),修正索引即可:
kubectl get endpoints -o custom-columns=NAME:.metadata.name,ENDPOINTS:.subsets[0].addresses[0].ip
输出结果:
NAME ENDPOINTS mysvc 10.10.1.1
3. 按子集分组显示IP(用jsonpath)
如果需要区分不同子集的IP,可以用jsonpath实现更灵活的格式:
kubectl get endpoints mysvc -o jsonpath='{.metadata.name}\nSubset 1 IPs: {.subsets[0].addresses[*].ip}\nSubset 2 IPs: {.subsets[1].addresses[*].ip}'
输出结果:
mysvc Subset 1 IPs: 10.10.1.1 10.10.2.2 Subset 2 IPs: 10.10.3.3
关键语法说明
.subsets[*]:遍历subsets数组中的所有元素(所有子集).addresses[*].ip:遍历当前子集下addresses数组的所有对象,提取ip字段
内容的提问来源于stack exchange,提问作者Андрей Белый
相关产品推荐
相关产品推荐

