namespace的六项隔离

1. 概述

Namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWIPC 信号量、消息队列和共享内存
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络设备、网络栈、端口等等
Mount CLONE_NEWNS 挂载点(文件系统)
User CLONE_NEWUSER 用户和用户组

2. namespace的API

包括 clone()、setns() 以及 unshare(),还有 /proc 下的部分文件

  • clone()

作用:创建新进程的同时创建 namespace

  • setns()

作用:加入一个已经存在的 namespace

  • unshare()

作用:在原先进程上进行 namespace 隔离

image.jpeg
  • /proc/ 下的文件

在 /proc/[pid号]/ns 目录下看到指向不同 namespace 号的文件

如果两个进程指向的 namespace 编号相同,就说明他们在同一个 namespace 下,否则则在不同 namespace 里面。

3. 六项隔离

3.1 UTS(UNIX Time-sharing System)

提供主机名和域名的隔离,在网络上可以被视作一个独立的节点而非宿主机上的一个进程。

3.2 IPC(Interprocess Communication)进程间通信

容器中进程间通信采用的方法包括常见的信号量、消息队列和共享内存。然而与虚拟机不同的是,容器内部进程间通信对宿主机来说,实际上是具有相同 PID namespace 中的进程间通信,因此需要一个唯一的标识符来进行区别。申请 IPC 资源就申请了这样一个全局唯一的 32 位 ID,所以 IPC namespace 中实际上包含了系统 IPC 标识符以及实现 POSIX 消息队列的文件系统。在同一个 IPC namespace 下的进程彼此可见,而与其他的 IPC namespace 下的进程则互相不可见。

3.3 PID namespace

对进程 PID 重新标号
两个不同 namespace 下的进程可以有相同 PID号。

3.3.1 PID namespace 的树状结构

内核为所有的 PID namespace 维护了一个树状结构:

  • 最顶层的是系统初始时创建的 root namespace。
  • 父进程可以创建的新的 child namespace。
    所属的父节点可以看到子节点中的进程,并可以通过信号等方式对子节点中的进程产生影响。
  • 反过来,子节点不能看到父节点 PID namespace 中的任何内容。

3.3.2 PID namespace 中的 init 进程

dockerinit:Docker 启动时的第一个进程,实现了进程监控和资源回收。

当我们新建一个 PID namespace 时,默认启动的进程 PID 为 1。我们知道,在传统的 UNIX 系统中,PID 为 1 的进程是 init,地位非常特殊。他作为所有进程的父进程,维护一张进程表,不断检查进程的状态,一旦有某个子进程因为程序错误成为了“孤儿”进程,init 就会负责回收资源并结束这个子进程。所以在你要实现的容器中,启动的第一个进程也需要实现类似 init 的功能,维护所有后续启动进程的运行状态。

看到这里,可能读者已经明白了内核设计的良苦用心。PID namespace 维护这样一个树状结构,非常有利于系统的资源监控与回收。Docker 启动时,第一个进程也是这样,实现了进程监控和资源回收,它就是 dockerinit。

3.3.3 信号与 init 进程

  • 信号屏蔽
    无特出情况,发送给PID namespace 中的 init 进程的信号都会被屏蔽。这个功能的主要作用是防止 init 进程被误杀。
    父节点中的进程发送的信号, 除SIGKILLSIGSTOP会被子节点的 init 会强制执行,其他信号也将被忽略。

  • 不存在没有进程的docker

一旦 init 进程被销毁,同一 PID namespace 中的其他进程也会随之接收到 SIGKILL 信号而被销毁。理论上,该 PID namespace 自然也就不复存在了。

因此我们说:Docker 一旦启动就有进程在运行,不存在不包含任何进程的 Docker,也就是这个道理。

3.3.4 挂载 proc 文件系统

只看到两个进程,一个是ps的,一个是进入容器的bash,可见隔离是对的。

image.jpeg

3.4 Mount namespaces

通过隔离文件系统挂载点对隔离文件系统提供支持,它是历史上第一个 Linux namespace。

3.5 Network namespace

  • 作用
    提供了关于网络资源的隔离(包括网络设备、IPv4 和 IPv6 协议栈、IP 路由表、防火墙、/proc/net 目录、/sys/class/net 目录、端口等等)。

  • 机制
    一个物理的网络设备最多存在在一个 network namespace 中。
    可以通过创建 veth pair在不同的 network namespace 间创建通道,以此达到通信的目的。

veth pair:(虚拟网络设备对)有两端,类似管道,如果数据从一端传入另一端也能接收到。

image.jpeg

※ 注意:如果你有多块物理网卡,其中一块给某个network namespace ,而该network namespace被释放时(所有内部的进程都终止并且 namespace 文件没有被挂载或打开),其中的物理网卡会返回到 root namespace 而非创建该进程的父进程所在的 network namespace。

3.6 User namespaces

主要隔离了安全相关的标识符(identifiers)和属性(attributes),包括用户 ID、用户组 ID、root 目录、key(指密钥)以及特殊权限。

是目前的六个 namespace 中最后一个支持的

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容