- 以 nginx 为例,找到待抓包的 pod 及分布在哪个节点上:
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 9s 10.104.157.119 k8s-node1 <none> <none>
- 找到 pod 中容器的物理网卡对应的 veth 在宿主机的网卡编号:
# kubectl exec -it nginx -- cat /sys/class/net/eth0/iflink
294
得到结果类似:294
- 根据前两步的结果,找到宿主机上在 veth 对应的宿主机的网卡名称:
# for i in /sys/class/net/cali*/ifindex; do; grep -l 294 $i; done
/sys/class/net/calic440f455693/ifindex
比如这个 nginx 的对应宿主机的网卡是:calic440f455693
- ·在宿主机上利用 tcpdump 进行抓包:
tcpdump -i calic440f455693 -w /root/tcpdump.cap
- 然后利用 wireshark 分析:
将服务器上的 /root/tcpdump.cap 这个文件下载到电脑上,然后使用 wireshark 打开,即可进行包分析。
除了这种方式,还可以通过另一个更强大的nsenter
命令可以进行抓包:nsenter 命令之抓包