记录一起网络排查分析: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掉了,我们无法通过netstat或ss命令来查找到对应的连接信息。
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
乐在分享!~~

浙公网安备 33010602011771号