k8s 网络抓包

时间:2022-12-16 22:56:01

背景

工具介绍

nsenter 是一款可以进入进程的名称空间中。例如,如果一个容器以非 root 用户身份运行,而使用 ​​docker exec​​​ 进入其中后,但该容器没有安装 ​​sudo​​​ 或未 ​​netstat​​ ,并且您想查看其当前的网络属性,如开放端口,这种场景下将如何做到这一点?nsenter 就是用来解决这个问题的。

nsenter (namespace enter) 可以在容器的宿主机上使用 ​​nsenter​​ 命令进入容器的命名空间,以容器视角使用宿主机上的相应网络命令进行操作。当然需要拥有 ​​root​​ 权限

网络故障如何抓包 , 容器内部没有工具怎么办 ??

创建容器测试

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc


获取容器ID

使用kubectl 命令获取ID

kubectl  describe pod nginx-6799fc88d8-plddn 

k8s 网络抓包


获取PID

拿到 container id 后,我们登录到 pod 所在节点上去获取其主进程 pid。

获取节点 kubectl  get pod -owide

k8s 网络抓包

containerd 运行时使用 crictl 命令获取:

crictl inspect 0f38cad42b7e99bc2509a04c3da80c8dbec980d45e0b6f64c2191a5e4ce9ceec | grep -i pid

dockerd 运行时使用 docker 命令获取:

docker  inspect 0f38cad42b7e99bc2509a04c3da80c8dbec980d45e0b6f64c2191a5e4ce9ceec | grep -i pid

k8s 网络抓包

nsenter 进入容器netns

在对应pod 的节点执行一下命令 ip a  查看是否进入容器

nsenter -n --target 5432

k8s 网络抓包

k8s 网络抓包

抓包

tcpdump -i eth0  host 10.244.234.106  -nn

k8s 网络抓包


后面会详细介绍tcpdump 使用