Kubernetes网络调试:进入容器网络命名空间(netns)的实用指南

分类: 系统排错

在Kubernetes中,进入容器的网络命名空间(netns)是一个高级操作,通常用于网络调试和故障排除。

以下是一些实用的技巧和步骤,帮助进入容器的netns:


一、获取容器ID和进程ID(PID

首先,需要使用kubectl命令获取目标Pod中容器的ID,然后根据容器运行时(如containerd或dockerd)获取容器的主进程PID。

  • 使用kubectl获取容器ID:
kubectl -n <namespace> describe pod <pod-name>

在输出中找到类似Container ID: containerd://或Container ID: docker://的信息。


  • 使用crictl(针对containerd运行时)或docker(针对dockerd运行时)获取容器PID:
# For containerd
crictl inspect <container-id> | grep -i pid

# For dockerd
docker inspect <container-id> | grep -i pid

二、准备netns链接

在宿主机上,确保/var/run/netns目录存在,并创建一个到容器netns的符号链接。

mkdir -p /var/run/netns
ln -s /proc/<container-pid>/ns/net /var/run/netns/<container-pid>

三、进入容器的netns

使用nsenter或ip netns exec命令进入容器的netns。

  • 使用nsenter:
nsenter -n --target <container-pid>
  • 使用ip netns exec(需要先将netns链接到/var/run/netns):
ip netns exec <container-pid> ip addr

四、验证和调试

成功进入容器的netns后,可以使用宿主机上的网络工具进行调试。

例如,使用ip addr查看容器的IP地址,或使用tcpdump抓包。

[root@10-40-0-35 ~]# docker inspect dm.bp.acs|grep -Ei "PID"
            "Pid": 10160,
            "PidMode": "",
            "PidsLimit": null,

[root@10-40-0-35 ~]# nsenter -n --targe 10160

[root@10-40-0-35 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
80: eth0@if81: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1452 qdisc noqueue state UP group default 
    link/ether 02:42:ac:13:04:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.19.4.2/24 brd 172.19.4.255 scope global eth0
       valid_lft forever preferred_lft forever

[root@10-40-0-35 ~]# exit
logout

五、退出netns

完成调试后,可以通过输入exit命令或使用Ctrl + D组合键退出容器的netns。

posted @   爱折腾的大臭臭  阅读(177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
Kubernetes网络调试:进入容器网络命名空间(netns)的实用指南
一、获取容器ID和进程ID(PID二、准备netns链接三、进入容器的netns四、验证和调试五、退出netns
点击右上角即可分享
微信分享提示