1. 以 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>
  1. 找到 pod 中容器的物理网卡对应的 veth 在宿主机的网卡编号:
# kubectl exec -it nginx -- cat /sys/class/net/eth0/iflink
294

得到结果类似:294

  1. 根据前两步的结果,找到宿主机上在 veth 对应的宿主机的网卡名称:
# for i in /sys/class/net/cali*/ifindex; do; grep -l 294 $i; done
/sys/class/net/calic440f455693/ifindex

比如这个 nginx 的对应宿主机的网卡是:calic440f455693

  1. ·在宿主机上利用 tcpdump 进行抓包:
tcpdump -i calic440f455693 -w /root/tcpdump.cap 
  1. 然后利用 wireshark 分析:

将服务器上的 /root/tcpdump.cap 这个文件下载到电脑上,然后使用 wireshark 打开,即可进行包分析。