用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里,因此我们可以用宿主机的命令来排查容器的网络问题。

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

相关推荐
我爱娃哈哈1 小时前
SpringBoot + Spring Security + RBAC:企业级权限模型设计与动态菜单渲染实战
spring boot·后端·spring
小王不爱笑1322 小时前
SpringBoot 配置文件
java·spring boot·后端
想用offer打牌3 小时前
Spring AI vs Spring AI Alibaba
java·人工智能·后端·spring·系统架构
码农幻想梦4 小时前
实验五 spring入门及IOC实验
java·后端·spring
a程序小傲4 小时前
蚂蚁Java面试被问:向量数据库的相似度搜索和索引构建
开发语言·后端·python·架构·flask·fastapi
派大鑫wink6 小时前
【Day39】Spring 核心注解:@Component、@Autowired、@Configuration 等
java·后端·spring
Java程序员威哥7 小时前
Java应用容器化最佳实践:Docker镜像构建+K8s滚动更新(生产级完整模板+避坑指南)
java·开发语言·后端·python·docker·kubernetes·c#
源代码•宸7 小时前
Golang原理剖析(defer、defer面试与分析)
开发语言·经验分享·后端·面试·golang·defer·开放编码
南山乐只7 小时前
Java并发原生工具:原子类 (Atomic Classes)
java·开发语言·后端
爱丽_7 小时前
Spring 框架
java·后端·spring