Linux之隔离技术

前言

Linux的内核有两大特性Namespace和CGroup,这两种特性可以在Linux主机上实现主机名、用户、网络等全局资源的隔离,也是实现网络虚拟化、容器技术的基础。

命名空间

Linux Namespace(命名空间)是一种操作系统层级的资源隔离技术,能够将 Linux 的全局资源,划分为 namespace 范围内的资源,而且不同 namespace 间的资源彼此透明,不同 namespace 里的进程无法感知到其它 namespace 里面的进程和资源。

Namespace(名称空间):实现六大名称空间的隔离

Mount:根文件系统隔离
UTS:主机名和域名隔离
IPC:容器进程间通信隔离
USER:用户隔离(UID映射)
PID:进程隔离
NETWORK:网络隔离

linux Namespaces机制提供一种资源隔离和虚拟化特性。PID,IPc,Network等系统资源不再是全局性的,而是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个甚至多个进程号为0,1,2的进程由于属于不同的namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的Linux系统。

这种隔离机制和 Chroot 很类似,Chroot 是把某个目录修改为根目录,从而无法访问外部的内容。
Linux Namesapce 在此基础之上,提供了对 UTS、IPC、Mount、PID、Network、User 等的隔离机制。
基本上涵盖了一个小型操作系统的运行要素,包括主机名、用户权限、文件系统、网络、进程号、进程间通信。

CGroups(ControlGroups)
实现资源限制,限制容器内部进程可用的资源。

名称 宏定义 隔离内容
Cgroup CLONE_NEWCGROUP Cgroup root directory (since Linux 4.6)
IPC CLONE_NEWIPC System V IPC, POSIX message queues (since Linux 2.6.19)
Network CLONE_NEWNET Network devices, stacks, ports, etc. (since Linux 2.6.24)
Mount CLONE_NEWNS Mount points (since Linux 2.4.19)
PID CLONE_NEWPID Process IDs (since Linux 2.6.24)
User CLONE_NEWUSER User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8)
UTS CLONE_NEWUTS Hostname and NIS domain name (since Linux 2.6.19)
posted @   *一炁化三清*  阅读(148)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示