记录一起网络排查分析:Pod连接外部Server,外部Server显示的来源客户端是宿主机IP+端口,如何通过IP+端口找到对应的Pod应用?

问题描述

在K8S中,Pod访问RabbitMQServer显示的是宿主机的IP+端口,如何通过端口找到对应的Pod应用?
RabbitMQServer显示的来源客户端连接地址:

通过来源客户端IP+端口找Pod

172.20.0.60是K8S集群中宿主机的IP,36376是连接端口。
在172.20.0.60上:

[root@idc-node-172-20-0-60 ~]# ss -s
Total: 5185 (kernel 11008)
TCP:   3017 (estab 175, closed 2819, orphaned 0, synrecv 0, timewait 1444/0), ports 0

Transport Total     IP        IPv6
*         11008     -         -
RAW       1         0         1
UDP       3         2         1
TCP       198       193       5
INET      202       195       7
FRAG      0         0         0
[root@idc-node-172-20-0-60 ~]# ss -an|grep CLOSE
..空

由于Pod连接RabbitMQ是短连接,请求完成后就CLOSE掉了,我们无法通过netstatss命令来查找到对应的连接信息。

1.使用tcpdump抓包分析

我们可以使用tcpdump命令抓包的方式来捕获网络流量,从而分析流量方向,抓包几分钟看下:

[root@idc-node-172-20-0-60 ~]# tcpdump -i any > tcpdump.out
等待几分钟...

2.搜索连接关键seq信息

根据端口信息在tcpdump.out搜索关键内容并获取连接的seq信息:seq 2383778413:2383778421

[root@idc-node-172-20-0-60 ~]# grep '172.20.0.60.36376' tcpdump.out
10:35:20.874439 IP 172.20.0.60.36376 > 10.104.6.78.amqp: Flags [P.], seq 2383778413:2383778421, ack 4188137812, win 1393, options [nop,nop,TS val 1261056774 ecr 179385797], length 8

3.根据seq信息就可以找到PodIP

根据seq信息搜索流量信息就可以查找到对应的PodIP:172.18.203.165

[root@idc-node-172-20-0-60 ~]# grep 'seq 2383778413:2383778421' tcpdump.out
10:35:20.874400 IP 172.18.203.165.39600 > 10.104.6.78.amqp: Flags [P.], seq 2383778413:2383778421, ack 4188137812, win 1393, options [nop,nop,TS val 1261056774 ecr 179385797], length 8
10:35:20.874439 IP 172.20.0.60.36376 > 10.104.6.78.amqp: Flags [P.], seq 2383778413:2383778421, ack 4188137812, win 1393, options [nop,nop,TS val 1261056774 ecr 179385797], length 8

4.根据PodIP找到对应的应用

shell@Alicloud:~$ kubectl get pod -A -o wide |grep '172.18.203.165'
sync-order              sync-order-hw-daily-hw-daily-pod-0        2/2     Running            133        56d      172.18.203.165   idc-node-172-20-0-60         <none>           1/1
posted @ 2025-04-09 11:16  RidingWind  阅读(31)  评论(0)    收藏  举报