文章

网络抓包

k8s pod抓包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
1 可以先执行,看看pod运行的节点
kubectl get pods $PodName -n $NameSpace -o wide  


2 登录到对应的node上
2.1 如果是 docker运行时,
2.1.1 找到容器ID
docker ps| grep $pod名称

2.1.2 然后再找到容器的进程pid
 docker inspect -f {{.State.Pid}} 容器id 

2.2 如果是containerd
2.2.1 找到容器的进程pid
> yum -y install jq
> crictl inspect $(crictl ps | grep `crictl pods | grep $POD_NAME名称 | awk '{print$1}'` | awk '{print$1}') | jq ".info | [.pid, .config.metadata.name]"

[
  1734201,
  "user-container-0"
]
[
  4129503,
  "queue-proxy"
]
[
  4129434,
  "filebeat"
]


2.2.2 进入容器网络命名空间:
安装下 nsenter工具:
> yum -y install util-linux.x86_64

进入到容器的网络名称空间
> PID="4129503" ; CONTAIN_NAME="queue-proxy"
> nsenter --target ${PID} -n


3. 抓包
tcpdump -i eth0 -s 0 -W 10 -C 100 -w /tmp/<POD_NAME>_<PID>_<CONTAIN_NAME>.pcap

本文由作者按照 CC BY 4.0 进行授权