用nsenter排查容器网络问题及原理

背景

  笔者观察到一些小伙伴不会排查容器问题---例如某个容器A到另一个服务的网络联通问题,小伙伴都寄希望于在容器A中有例如ping,tcpdump等这些排查命令。

  但是,如果我们把这些命令预装进容器中就违背了容器设计的初衷,容器应该尽量精简,轻便,能在生产环境中占用最小资源并快速启动。因此本文介绍在容器中没有排除命令时进行问题的排查,这就用到了nsenter这个命令~

问题排查及原理

1、获取容器的id,登录到这个容器所在的宿主机k8s-node-02 2、在宿主机上获取容器的Pid 3、nsenter -t Pid -n,进入容器网络,此时,可以用宿主机的排查命令进行排查,其等同于在容器里执行。

这条命令背后的原理:

A、容器的本质是进程,这个进程用linux的namespace机制实现资源的隔离,其包括6类namespace------- network namespace(网络资源)、mount namespace(文件系统挂载点)、uts namespace(主机名和域名)、ipc namespace(共享内存和信号量)、pid namspace(进程ID)、user namespace(用户和用户组);同时、操作系统使用cgroup对进程使用的CPU,IO,内存等进行限额。这样,容器看起来就是拥有自己完整的单独的操作系统。

B、nsenter 是一个可以进入上述6类namespace的工具。上述命令 nsenter -t Pid -n ,其中 -t 指定了容器进程的ID, -n 代表进入容器进程的network namespace,此时,当前已经是在容器的网络里。但是我们并没有进入容器进程的其他namespace,比如文件系统等,所以当前的文件系统还是处于宿主机的mount namespace里,因此我们可以用宿主机的命令来排查容器的网络问题。

本公众号【程序员是只喵】

相关推荐
IT_陈寒1 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
易协同低代码2 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo2 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志3 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..3 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects3 小时前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰3 小时前
一些基础和问题解决
后端
陈随易3 小时前
前端项目部署只要30秒
前端·后端·程序员
YIAN3 小时前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp
Imchendiana3 小时前
《狂人日记NO.9》— 前后端一把梭,我的全栈实录
前端·后端