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