浅谈 Linux namespace
Linux Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。目前Linux中提供了六类系统资源的隔离机制,分别是:
| namespace | 系统调用参数 | 隔离内容 |
|---|---|---|
| UTS | CLONE_NEWUTS | 主机名与域名 |
| IPC | CLONE_NEWIPC | 信号量、消息队列和共享内存 |
| PID | CLONE_NEWPID | 进程编号 |
| Network | CLONE_NEWNET | 网络设备、网络栈、端口等等 |
| Mount | CLONE_NEWNS | 挂载点(文件系统) |
| User | CLONE_NEWUSER | 用户和用户组 |
Mount: 隔离文件系统挂载点UTS: 隔离主机名和域名信息IPC: 隔离进程间通信PID: 隔离进程的IDNetwork: 隔离网络资源User: 隔离用户和用户组的ID
本文所讨论的 namespace 实现针对的均是 Linux 内核 3.8 及其以后的版本。
Namespace的使用
涉及到Namespace的操作接口包括clone()、setns()、unshare()以及还有/proc下的部分文件。
为了使用特定的Namespace,在使用这些接口的时候需要指定以下一个或多个参数:
CLONE_NEWNS: 用于指定Mount NamespaceCLONE_NEWUTS: 用于指定UTS NamespaceCLONE_NEWIPC: 用于指定IPC NamespaceCLONE_NEWPID: 用于指定PID NamespaceCLONE_NEWNET: 用于指定Network NamespaceCLONE_NEWUSER: 用于指定User Namespace
下面简单概述一下这几个接口的用法。

浙公网安备 33010602011771号