nsenter进入容器网络名称空间tcpdump抓包
1、判断容器运行在哪个节点上
kubctl describe pod <pod> -n mservice
2、 登陆节点获取容器的network namespace(主机上使用netstat是看不到容器的tcp链接情况的,需要进入namespace)
cid=`docker inspect --format '{{.State.Pid}}' $containerId` && nsenter --target $cid -n
进入名称空间后可以使用ip add命令确认IP是否为pod的IP
3、直接使用tcpdump抓包
tcpdump -i eth0 -w a.cap
排除内网地址tcpdump -i eth0 -n -s 0 'dst net !192.168.0.0/16' -w a.cap
宿主机ip netns指定网络名称空间抓包
通常,容器的 PID 存储在 /var/run/docker/netns 目录中,以容器的名称为文件名
ip netns exec <容器的名称空间文件名> tcpdump -i <容器网络接口> -w capture.pcap
sniff插件抓包
kubectl -n test sniff website-7d7d96cdbf-6v4p6
sniff抓包时,比如要用特权模式启动,如果不是特权模式的容器,可以加参数-p解决,-p会在宿主机上重新启动一个容器,然后attach到目标pod的netns里指定tcpdump抓包
kubectl -n test sniff website-7d7d96cdbf-6v4p6 -o test.cap -p