k8s中如何對pod進行抓包


參考:https://blog.51cto.com/lee90/2432209

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM