如何在系统内直接抓容器的网络报文
排查过很多次pod网络有问题的场景 ,一直没太弄明白,pod内的网络报文怎么抓,今天遇到一个liveness健康检查失败的问题,liveness是kubelet去访问pod(发生get请求)来确认的,那么对应的访问日志在pod内是可以看到的,因此可以尝试抓包排查,但是pod并不能简简单单的使用tcpdump抓包即可,docker/kubectl cp 一个tcpdump进去也不好使,那么,pod内的包怎么抓呢?容器的网络隔离使用的是linux的network namespace ,因此我们到对应的ns里面抓包即可,下面演示1.查看指定 pod 运行在哪个宿主机上拿到宿主机的信息,然后登陆上去 cn-shenzhen.192.168.0.178 # kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE busybox-5fc755d7d9-nc8bz 1/1 Running 2 5d5h 172.20.2.21 cn-shenzhen.192.168.0.178 <none>...
