当前位置: 首页 > news >正文

Kubernetes 中根据 Pod IP 查找 Pod 及关联服务的方法

文章目录

  • Kubernetes 中根据 Pod IP 查找 Pod 及关联服务的方法
  • 方法一:通过 Endpoints 定位(推荐)
  • 方法二:通过 Service 的选择器(Selector)匹配
  • 方法三:检查网络策略(NetworkPolicy)
  • 方法四:通过节点 IPVS / iptables 直接查找(高级)
  • 额外诊断命令
  • 总结与建议


Kubernetes 中根据 Pod IP 查找 Pod 及关联服务的方法

在 Kubernetes 集群中,有时候我们只知道 Pod 的 IP 地址,需要快速定位对应的 Pod 以及其关联的 Service。这篇文章总结了几种可行的方法,并提供一些实用的诊断技巧。


方法一:通过 Endpoints 定位(推荐)

Kubernetes 的 Endpoints 对象保存了 Service 与 Pod IP 的映射关系,因此这是最直接的方法。

kubectl get endpoints --all-namespaces -o json | \
jq -r '.items[] | select(.subsets[].addresses[].ip == "10.255.111.149") | .metadata.namespace + "/" + .metadata.name'

注意:

  • 需要安装 jq 工具(apt-get install jqbrew install jq)。
  • 输出结果会显示 Pod 所属 Service 的命名空间和名称。

如果系统未安装 jq,也可以使用 jsonpath

kubectl get endpoints -A -o jsonpath='{range .items[?(@.subsets)]}{.metadata.namespace}{" "}{.metadata.name}{"\n"}{range .subsets[*].addresses[*]}{.ip}{"\n"}{end}{end}' | \
grep -B1 10.255.111.149

示例输出:

uat redis
10.255.111.149
  • uat: 命名空间
  • redis: Service 名称
  • 10.255.111.149: Pod IP 地址

方法二:通过 Service 的选择器(Selector)匹配

  1. 先找到 Pod 的标签:
kubectl get pod --all-namespaces -o wide --field-selector status.podIP=10.255.111.149

示例输出:

NAMESPACE   NAME                     READY   STATUS    RESTARTS   AGE    IP               NODE             NOMINATED NODE   READINESS GATES
uat         redis-5d57b8754f-ndlq7   1/1     Running   0          217d   10.255.111.149   10-255-101-210   <none>           <none>
  • NAMESPACE: 命名空间
  • NAME: Pod 名称
  • READY: Pod 状态
  • STATUS: Pod 运行状态
  • RESTARTS: 重启次数
  • AGE: Pod 存活时间
  • IP: Pod IP 地址
  • NODE: Pod 所在节点
  • NOMINATED NODE: 提名节点(无)
  • READINESS GATES: 就绪门(无)
  1. 根据标签查找对应的 Service:
kubectl get svc --all-namespaces -o json | \
jq -r '.items[] | select(.spec.selector.app == "myapp" and .spec.selector.env == "prod") | .metadata.namespace + "/" + .metadata.name'

注意:

  • 如果找不到服务,可能是 Pod 没有被任何 Service 选择,或者标签不匹配。
  • Service 的 Endpoints 只会包含处于 Ready 状态的 Pod。

方法三:检查网络策略(NetworkPolicy)

如果集群中启用了 NetworkPolicy,有时候需要确认 Pod 是否在某些策略范围内:

kubectl get networkpolicy --all-namespaces -o json | \
jq -r '.items[] | select(.spec.podSelector.matchLabels.app == "myapp") | .metadata.namespace + "/" + .metadata.name'

网络策略不会告诉你 Pod 关联的 Service,但可用于排查流量访问受限的原因。


方法四:通过节点 IPVS / iptables 直接查找(高级)

如果你想直接查看流量在节点上的转发情况,可以在运行 kube-proxy 的节点上使用:

sudo ipvsadm -Ln | grep -B1 10.255.111.149

说明:

  • 这种方法适合调试流量问题或者确认服务负载分发情况。
  • 对于 iptables 模式的 kube-proxy,可以使用 sudo iptables-save 查找 Pod IP。

额外诊断命令

  • 检查 Pod 就绪状态:
kubectl get pod -o wide -A | grep 10.255.111.149

输出示例:

uat                  redis-5d57b8754f-ndlq7                                            1/1     Running            0                       217d    10.255.111.149   10-255-101-210   <none>           <none>
  • 查看 Service 对应的 Endpoints:
kubectl describe svc <service-name> -n <namespace> | grep -A10 Endpoints
  • 测试网络连通性(在集群内节点执行):
curl -v http://10.255.111.149:<port>

总结与建议

  1. 优先使用 Endpoints 方法:最直接、信息最全。

  2. 结合 Pod 标签和 Service 选择器:可以快速排查标签不匹配问题。

  3. 网络策略和节点工具:适合调试访问受限或流量异常场景。

  4. 诊断思路

    • Pod IP 确认 → Pod 就绪状态 → Service Endpoints → 网络策略 → 节点流量转发

通过这些方法,可以高效定位 Pod 及其关联服务,解决调试和运维中遇到的访问问题。


http://www.xdnf.cn/news/1416421.html

相关文章:

  • Fiddler抓包原理及教程(附带解决高版本Android抓包无网络问题)
  • 【Android】Span富文本简介
  • Python 爬虫案例:爬取豆瓣电影 Top250 数据
  • 华为云CCE
  • 【Flask】测试平台开发,实现全局邮件发送工具 第十二篇
  • [免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】
  • 【Proteus仿真】蜂鸣器控制系列仿真——蜂鸣器控制/蜂鸣器播放音乐/蜂鸣器播放多种音乐/蜂鸣器和LED组成报警装置
  • 如何在Github中创建仓库?如何将本地项目上传到GitHub中?
  • 【HTML】draggable 属性:解锁网页交互新维度
  • 深入探讨Java异常处理:受检异常与非受检异常的最佳实践
  • 领码方案:低代码平台前端缓存与 IndexedDB 智能组件深度实战
  • Eclipse Compiler for Java (ECJ):安装指南与高效快捷键全解析
  • 玩转OurBMC第二十一期:前端页面仪表盘的设计与使用实践
  • Trae x MCP:一键打造品牌专属高质量SVG封面
  • CompletableFuture初体验
  • (9.1)Python测试之记录
  • Shell 编程 —— 正则表达式与文本处理器
  • 函数,数组与正则表达式
  • Android原生HttpURLConnection上传图片方案
  • 打造智能写作工作流:n8n + 蓝耘MaaS平台完整实战指南
  • Apollo学习之决策模块
  • 【Linux手册】Unix/Linux 信号:原理、触发与响应机制实战
  • Ajax笔记(下)
  • 在.NET标准库中进行数据验证的方法
  • Java视觉跟踪入门:使用OpenCV实现实时对象追踪
  • 【开题答辩全过程】以 基于php的校园兼职求职网站为例,包含答辩的问题和答案
  • 【Android】使用Handler做多个线程之间的通信
  • 【Flask】测试平台开发,应用管理模块实现-第十一篇
  • 【lucene核心】impacts的由来
  • 旧物回收小程序:科技赋能,开启旧物新生之旅