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 Namespace
CLONE_NEWUTS
: 用于指定UTS Namespace
CLONE_NEWIPC
: 用于指定IPC Namespace
CLONE_NEWPID
: 用于指定PID Namespace
CLONE_NEWNET
: 用于指定Network Namespace
CLONE_NEWUSER
: 用于指定User Namespace
下面简单概述一下这几个接口的用法。