kubernetes 容器中tcpdump抓包


容器的网络隔离使用的是linux的network namespace ,因此我们到对应的ns里面抓包即可

1.查看指定 pod 运行在哪个宿主机

#kubectl get pods -o wide

2.获得容器的 pid

登录到对应的node上,下面演示的是两种找pid的方法

# docker ps|grep busy

d5ae39bad811 busybox "sleep 360000" 29 minutes ago Up 29 minutes k8s_busybox_busybox-5fc755d7d9-nc8bz_default_b9a845f1-f09b-11e9-a7ea-00163e0e34c8_2

cdab20715cd9 registry-vpc.cn-shenzhen.aliyuncs.com/acs/pause-amd64:3.0 "/pause" 29 minutes ago Up 29 minutes k8s_POD_busybox-5fc755d7d9-nc8bz_default_b9a845f1-f09b-11e9-a7ea-00163e0e34c8_4

 

[root@izwz9314kt10onbwuw6odez ~]# docker inspect -f {{.State.Pid}} d5ae39bad811

6875

 

 

3.进入该容器的 network namespace

# nsenter依赖util-linux,因此提前安装

# yum -y install util-linux.x86_64

 

进入到对应容器的network ns里面,并指向ip a查看ip

# nsenter --target 6875 -n

[root@izwz9314kt10onbwuw6odez ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

3: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

link/ether d2:cc:e9:b1:f6:9d brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 172.20.2.21/25 brd 172.20.2.127 scope global eth0

valid_lft forever preferred_lft forever

 

对比一下第一步拿到的pod ip 是一样的

 

4.使用 tcpdump 抓包,指定 eth0 网卡

直接抓包尝试

tcpdump -i eth0 tcp and port 80 -vvv

 

新开一个窗口进入到pod里面配合访问测试

# kubectl exec -it busybox-5fc755d7d9-nc8bz sh

/ # nc -vz www.baidu.com 80

www.baidu.com (14.215.177.38:80) open


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM