linux ns,Linux Namespace (ns)
LXC所實(shí)現(xiàn)的隔離性主要是來自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace將container的進(jìn)程, 網(wǎng)絡(luò), 消息, 文件系統(tǒng)和hostname 隔離開。
一、 pid namespace
之前提到用戶的進(jìn)程是lxc-start進(jìn)程的子進(jìn)程, 不同用戶的進(jìn)程就是通過pidnamespace隔離開的,且不同 namespace 中可以有相同PID。具有以下特征:
1、每個(gè)namespace中的pid是有自己的pid=1的進(jìn)程(類似/sbin/init進(jìn)程)
2、每個(gè)namespace中的進(jìn)程只能影響自己的同一個(gè)namespace或子namespace中的進(jìn)程
3、因?yàn)?proc包含正在運(yùn)行的進(jìn)程,因此在container中的pseudo-filesystem的/proc目錄只能看到自己namespace中的進(jìn)程
4、因?yàn)閚amespace允許嵌套,父namespace可以影響子namespace的進(jìn)程,所以子namespace的進(jìn)程可以在父namespace中看到,但是具有不同的pid
正是因?yàn)橐陨系奶卣?#xff0c;所有的LXC進(jìn)程在docker中的父進(jìn)程為docker進(jìn)程,每個(gè)lxc進(jìn)程具有不同的namespace。同時(shí)由于允許嵌套,因此可以很方便的實(shí)現(xiàn) LXC in LXC
二、 net namespace
有了 pid namespace, 每個(gè)namespace中的pid能夠相互隔離,但是網(wǎng)絡(luò)端口還是共享host的端口。網(wǎng)絡(luò)隔離是通過netnamespace實(shí)現(xiàn)的,
每個(gè)net namespace有獨(dú)立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每個(gè)container的網(wǎng)絡(luò)就能隔離開來。
LXC在此基礎(chǔ)上有5種網(wǎng)絡(luò)類型,docker默認(rèn)采用veth的方式將container中的虛擬網(wǎng)卡同host上的一個(gè)docker bridge連接在一起。
三、 ipc namespace
container中進(jìn)程交互還是采用linux常見的進(jìn)程間交互方法(interprocess communication - IPC), 包括常見的信號(hào)量、消息隊(duì)列和共享內(nèi)存。然而同VM不同,container 的進(jìn)程間交互實(shí)際上還是host上具有相同pid namespace中的進(jìn)程間交互,因此需要在IPC資源申請時(shí)加入namespace信息 - 每個(gè)IPC資源有一個(gè)唯一的 32bit ID。
四、 mnt namespace
類似chroot,將一個(gè)進(jìn)程放到一個(gè)特定的目錄執(zhí)行。mnt namespace允許不同namespace的進(jìn)程看到的文件結(jié)構(gòu)不同,這樣每個(gè) namespace 中的進(jìn)程所看到的文件目錄就被隔離開了。同chroot不同,每個(gè)namespace中的container在/proc/mounts的信息只包含所在namespace的mount point。
五、 uts namespace
UTS(“UNIX Time-sharing System”) namespace允許每個(gè)container擁有獨(dú)立的hostname和domain name, 使其在網(wǎng)絡(luò)上可以被視作一個(gè)獨(dú)立的節(jié)點(diǎn)而非Host上的一個(gè)進(jìn)程。
六 、 user namespace
每個(gè)container可以有不同的 user 和 group id, 也就是說可以以container內(nèi)部的用戶在container內(nèi)部執(zhí)行程序而非Host上的用戶。
有了以上6種namespace從進(jìn)程、網(wǎng)絡(luò)、IPC、文件系統(tǒng)、UTS和用戶角度的隔離,一個(gè)container就可以對外展現(xiàn)出一個(gè)獨(dú)立計(jì)算機(jī)的能力,并且不同container從OS層面實(shí)現(xiàn)了隔離。 然而不同namespace之間資源還是相互競爭的,仍然需要類似ulimit來管理每個(gè)container所能使用的資源 - LXC 采用的是cgroup。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的linux ns,Linux Namespace (ns)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android中点击按钮弹出一个编辑框,
- 下一篇: 国内用户ios android比例,国内