前言
有时需要查看pod的网络数据包,但pod一般没有tcpdump
命令。这里介绍如何在宿主机上对pod进行网络抓包
nsenter 使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| nsenter [options] [program [arguments]]
options:
-t, --target pid:指定被进入命名空间的目标进程的pid
-m, --mount[=file]:进入mount命令空间。如果指定了file,则进入file的命令空间
-u, --uts[=file]:进入uts命令空间。如果指定了file,则进入file的命令空间
-i, --ipc[=file]:进入ipc命令空间。如果指定了file,则进入file的命令空间
-n, --net[=file]:进入net命令空间。如果指定了file,则进入file的命令空间
-p, --pid[=file]:进入pid命令空间。如果指定了file,则进入file的命令空间
-U, --user[=file]:进入user命令空间。如果指定了file,则进入file的命令空间
-G, --setgid gid:设置运行程序的gid
-S, --setuid uid:设置运行程序的uid
-r, --root[=directory]:设置根目录
-w, --wd[=directory]:设置工作目录
|
抓包步骤
比如要对名为greeter-grpc-cli
pod进行抓包
1
2
3
| kubectl get pods greeter-grpc-cli-deployment-5bb97fd9cc-sgmq5 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
greeter-grpc-cli-deployment-5bb97fd9cc-sgmq5 2/2 Running 0 21d 10.32.0.12 vm-4-2-ubuntu <none> <none>
|
- 安装
nsenter
- 查找
containerID
1
2
3
4
5
6
7
8
| crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
ccfb9e0db7f97 393cf1d5c95a6 2 weeks ago Running istio-proxy 0 2f84e757f1050
9d85e6b43e69e ********/greeter-grpc@sha256:19511605390fb29beb9c87845b13b66b013340c88318c5220073aab72ce75213 2 weeks ago Running greeter-grpc-svc 0 2f84e757f1050
74c96c2f11059 393cf1d5c95a6 2 weeks ago Running istio-proxy 0 06be1fe958aa1
760cde3cabce9 ********/greeter-grpc@sha256:19511605390fb29beb9c87845b13b66b013340c88318c5220073aab72ce75213 2 weeks ago Running greeter-grpc-svc 0 06be1fe958aa1
900286bf1bbfe 393cf1d5c95a6 2 weeks ago Running istio-proxy 0 22d9e9f643cb8
7116f44850a08 ********/greeter-grpc-client@sha256:038dcbc6c3df21dda59d925d6185fe95179aef4418229d1cdf62fbf89e599ce1 2 weeks ago Running greeter-grpc-cli 0 22d9e9f643cb8
|
- 查找
PID
1
2
3
| docker top 7116f44850a08
UID PID PPID C STIME TTY TIME CMD
root 1712108 1712089 0 Apr10 ? 00:00:27 /opt/app/server
|
- 进入pod所在的命名空间
- 查看是否已经进入pod的命名空间
可以看到此处只显示了两个网卡eth0的地址与上面查看pod的内网地址相同,说明已经进入了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1376
inet 10.32.0.12 netmask 255.240.0.0 broadcast 10.47.255.255
ether b2:0e:5d:4c:d3:70 txqueuelen 0 (Ethernet)
RX packets 6150082 bytes 626075350 (626.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4340063 bytes 449149455 (449.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 2728060 bytes 401944336 (401.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2728060 bytes 401944336 (401.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
- 使用
tcpdump
进行抓包
此处的端口为pod对外暴露的地址,而不是通过宿主机对外的端口
1
| tcpdump -nnnvv -As 0 -i eth0 port 8000 -w test.pcap
|
- 下载抓包文件
test.pcap
到本机,使用wireshark
查看
信息如下