容器环境下,镜像要求尽可能精简,剔除无效的依赖,达到最为精简的状态,tcpdump 命令肯定不会包含进去,因此决定采用直接启动一个容器然后join到pod的pause容器(本身 在Pod内部,该容器的一个目的就是共享整个Pod的net namespace)上,进行抓包操作。

dockerhub上找到tcpdump镜像拉取下来,找到需要抓包的pod所在节点,登录上去,执行​​docker ps | grep redisxxxxx​​找到属于该pod的所有容器,进而找到pause容器,记录pause容器id 执行命令:

docker run --network=container:pauseId --entrypoint=sh -ti corfr/tcpdump

docker利用共享namespace的方式抓包_命令行

tcpdump -i eth0 -e -vvv -nnn

docker利用共享namespace的方式抓包_kubernetes_02

参数含义解释:

  • -i 进行容器交互式命令行

  • -t 分配tty
  • –entrypoint 复写镜像中指定的entrypoint
  • –network 指定容器使用的网络,container:xxx表示共享 xxxx容器的net namespace