Kubernetes中根据Pod IP查找Pod及关联服务的实现方式

 更新时间:2025年10月02日 16:54:30   作者:XMYX-0  
文章介绍Kubernetes中通过Endpoints、Service选择器、网络策略及节点IPVS/iptables等方法快速定位Pod与关联Service的技巧,推荐优先使用Endpoints并结合标签匹配,适用于调试和运维场景

在 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: 就绪门(无)

2、根据标签查找对应的 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>

总结与建议

  • 优先使用 Endpoints 方法:最直接、信息最全。
  • 结合 Pod 标签和 Service 选择器:可以快速排查标签不匹配问题。
  • 网络策略和节点工具:适合调试访问受限或流量异常场景。

诊断思路

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 云原生技术kubernetes之volumes容器的使用

    云原生技术kubernetes之volumes容器的使用

    这篇文章主要为大家介绍了云原生技术kubernetes之volumes容器使用方式, 有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • k8s pod如何使用sriov

    k8s pod如何使用sriov

    这篇文章主要介绍了k8s pod如何使用sriov问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • K8S Helm应用部署与依赖治理实战教程

    K8S Helm应用部署与依赖治理实战教程

    文章阐述了Kubernetes部署中的三大挑战(环境配置漂移、版本回退失控、依赖治理低效),并介绍Helm通过声明式模板、版本控制与依赖管理实现标准化配置、环境隔离和版本回滚,提升部署效率与可靠性,对K8S Helm应用部署相关知识感兴趣的朋友一起看看吧
    2025-07-07
  • K8s容器的定向调度与亲和性详解

    K8s容器的定向调度与亲和性详解

    这篇文章主要介绍了K8s容器的定向调度与亲和性,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • 详解consul的安装和配置

    详解consul的安装和配置

    这篇文章主要介绍了详解consul的安装和配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • k8s scc权限和内置的restricted、anyuid、privileged详解

    k8s scc权限和内置的restricted、anyuid、privileged详解

    这篇文章主要介绍了k8s scc权限和内置的restricted、anyuid、privileged,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • k8s解析kubeconfig的两种常用方式最新推荐

    k8s解析kubeconfig的两种常用方式最新推荐

    这篇文章主要介绍了k8s解析kubeconfig的两种常用方式最新推荐,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • kubernetes-1.25.6二进制部署方式

    kubernetes-1.25.6二进制部署方式

    这篇文章主要介绍了kubernetes-1.25.6二进制部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • K8S下http请求在ingress和nginx间无限循环的问题及解决

    K8S下http请求在ingress和nginx间无限循环的问题及解决

    文章描述了UAT环境中因Nginx与IngressController代理循环导致400错误的排查过程,发现proxy_set_header Host配置引发Host头携带Nginx域名,导致请求反复转发,最终X-Forwarded-For头溢出,解决方法是移除该配置
    2025-07-07
  • K8s中的临时容器Ephemeral Containers使用

    K8s中的临时容器Ephemeral Containers使用

    这篇文章主要介绍了K8s中的临时容器Ephemeral Containers使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论