云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > Kubernetes根据 Pod IP查找Pod及关联服务

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

作者: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,也可以使用 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

方法二:通过 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>

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'

注意:

方法三:检查网络策略(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

说明:

额外诊断命令

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>
kubectl describe svc <service-name> -n <namespace> | grep -A10 Endpoints
curl -v http://10.255.111.149:<port>

总结与建议

诊断思路

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

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

您可能感兴趣的文章:
阅读全文