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