1.列出待抓包的pod 及分布在哪些節點上
kubectl get pods -n namespace -o wide | egrep myapp
2.找到pod中容器的eth0網卡對應的veth pair在宿主機上的網卡編號
kubectl -n namespace exec -it myapp-xxxxxx-xxxx -- cat /sys/class/net/eth0/iflink
得到結果類似:533
如果容器里面有ethtool命令,也可以通過下面的命令來獲取
kubectl -n namespace exec -it myapp-xxxxxx-xxxx -- ethtool -S eth0
得到結果類似:
NIC statistics:
peer_ifindex: 533
3.根據前兩步的結果,找到宿主機上的veth pair對應的宿主機網卡名稱
- myapp這個pod對應的宿主機的ip是在第一步獲得的
- 宿主機上的網卡編號是在第二步獲得的
登錄到對應的宿主機上,執行下面的命令
for i in /sys/class/net/veth*/ifindex; do grep -l 533 $i; done
得到結果類似:/sys/class/net/veth79c1674f/ifindex
其中veth79c1674f就是網卡名稱
當然,也可以直接執行ip a命令,然后用肉眼去找533這個編號
4.在宿主機上利用tcpdump抓包:
tcpdump -i veth79c1674f -w /root/tcpdump.cap
5.然后用wireshark分析:
將服務器上的/root/tcpdump.cap這個文件下載到電腦上,然后使用wireshark打開,使用常用的條件表達式,例如 ip.addr == x.x.x.x