需求背景
比如 Pod 运行了一个 Nginx 服务,但此 Nginx 没有开启 access.log 日志。
此时想要 不重启这个 Pod,实现统计请求这个 Pod 的来源 IP
,该如何操作?
需求实现
可以通过 nsenter
进入 Pod 的 Network Namespace
,使用 tcpdump 实现抓取 Pod 的来源 IP 。
操作步骤
1、根据 Pod Name 获取 Pod 所在的 Node 节点和 Docker CONTAINER ID 。
kubectl -n [namespace] describe pod [pod name]
// 获取 Node 节点 IP 。
# kubectl -n prod describe pod foo-bar-5cbcb87c68-aqzzc | grep "Node:"
Node: cn-taiwan.192.168.1.52/192.168.1.52
// 获取 Docker CONTAINER ID (根据 Pod 的配置,可能会有多个 Container,选择需要的 CONTAINER ID 即可。)
# kubectl -n prod describe pod foo-bar-5cbcb87c68-aqzzc | grep "Container ID"
Container ID: docker://beb3a1b3888454bae42f07625e666c5a4872e64e6e132481543003e50211c283
2、登录 Node 节点后,根据 Docker CONTAINER ID 获取容器 PID 。
docker inspect -f {{.State.Pid}} [Container ID]
// ssh 登录 192.168.1.52 节点后,执行以下操作获取容器 PID 。
# docker inspect -f {{.State.Pid}} beb3a1b3888454bae42f07625e666c5a4872e64e6e132481543003e50211c283
3773866
3、使用 nsenter 进入该容器的 Network Namespace 。
nsenter --net --target [pid]
# nsenter --net --target 3773866
// 可以看到 Pod 的网卡 eth0 和 IP 192.168.11.151 。
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.151 netmask 255.255.255.255 broadcast 0.0.0.0
ether 12:5d:4e:87:97:31 txqueuelen 0 (Ethernet)
RX packets 1357962413 bytes 438770918589 (408.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1627361638 bytes 434587680212 (404.7 GiB)
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 217123213 bytes 127795640805 (119.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 217123213 bytes 127795640805 (119.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4、使用 tcpdump 实现抓取请求 Pod 的来源 IP,来统计分析。
// 使用 tcpdump 抓包。
# tcpdump -i eth0 -nn -q ip > /tmp/tcpstat.txt
// 使用 shell 脚本统计请求这个 Pod 的来源 IP 。
# cat /tmp/tcpstat.txt | grep -v "192.168.11.151" | awk '{print $3}'| cut -d '.' -f 1-4 | awk '{a[$0]++}END{for(i in a){print i,a[i]}}' | sort -nrk 2 | head -n 20
172.33.63.113 418
10.56.1.9 357
10.56.1.243 335
172.44.41.177 55
150.206.225.135 14
参考:
网友评论