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

posted @ 2021-03-16 16:48  wangqingyong  阅读(1659)  评论(1编辑  收藏  举报