(1)Namespace

namespace介紹:

linux namespace 是kernel 的一個功能重慢,他可以隔離一系列的資源饥臂,比如PID ,UsrID,Network
當(dāng)前l(fā)inux 一共實現(xiàn)了6種不同類型的NameSpace
接下來我們看看怎么用go語言來調(diào)用namespace來實現(xiàn)環(huán)境隔離。

(1)UTS NameSpace 主要用來隔離nodename和domainname

package main
import (
"os/exec"
"syscall"
"os"
"log"
)
/**
因為要使用linux 內(nèi)核似踱,所以不能在其他平臺上運行
 */
func main() {
   cmd := exec.Command("sh")
   cmd.SysProcAttr = &syscall.SysProcAttr{
      Cloneflags: syscall.CLONE_NEWUTS,
   }
   cmd.Stdin = os.Stdin
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr

   if err := cmd.Run(); err!=nil{
      log.Fatal(err)
   }

}

驗證
執(zhí)行代碼隅熙,查看進程信息
go run utsnamespace.go
pstree -pl


進程信息
父進程和子進程uts

很明顯可以看到 父進程和 子進程不在一個uts中

(2)IPC NameSpace用來隔離System v IPC 和 POSIX message queues

package main

import (
"os/exec"
"syscall"
"os"
"log"
)

/**
因為要使用linux 內(nèi)核,所以不能在其他平臺上運行
 */
func main() {
   //sh 為被fork 出的新進場的初始命令
   cmd := exec.Command("sh")
   cmd.SysProcAttr = &syscall.SysProcAttr{
      Cloneflags: syscall.CLONE_NEWUTS |syscall.CLONE_NEWIPC,
   }
   cmd.Stdin = os.Stdin
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr

   if err := cmd.Run(); err!=nil{
      log.Fatal(err)
   }

}

驗證
在宿主機上開個終端
ipcs -q 無queue
ipcmk -Q 創(chuàng)建queue
ipcs -q 查看發(fā)現(xiàn)有一個queue
此時運行ipcnamespace.go
gor run ipcnamespace.go
ipcs -q 無queue
說明 該環(huán)境和外部是隔離的


宿主機ipcs
隔離環(huán)境ipcs

(3)PID Namespace ,用來隔離進程ID. 例如某個進程在容器里面 的進程pid 和在宿主機上查看是不一樣的核芽。

package main

import (
"os/exec"
"syscall"
"os"
"log"
)

/**
因為要使用linux 內(nèi)核囚戚,所以不能在其他平臺上運行
 */
func main() {
   //sh 為被fork 出的新進場的初始命令
   cmd := exec.Command("sh")
   cmd.SysProcAttr = &syscall.SysProcAttr{
      Cloneflags: syscall.CLONE_NEWUTS |syscall.CLONE_NEWIPC|syscall.CLONE_NEWPID,
   }
   cmd.Stdin = os.Stdin
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr

   if err := cmd.Run(); err!=nil{
      log.Fatal(err)
   }

}

驗證
運行pidnamespace.go ,查看pid 為1
其在宿主機的pid為15814


宿主機中的pid
隔離環(huán)境中的pid

(4)Mount Namespace 用來隔離各個進程看到的掛載點試圖

package main

import (
"os/exec"
"syscall"
"os"
"log"
)

/**
因為要使用linux 內(nèi)核轧简,所以不能在其他平臺上運行
 */
func main() {
    //sh 為被fork 出的新進場的初始命令
    cmd := exec.Command("sh")
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Cloneflags: syscall.CLONE_NEWUTS |syscall.CLONE_NEWIPC|syscall.CLONE_NEWPID|syscall.CLONE_NEWNS,
    }
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    if err := cmd.Run(); err!=nil{
        log.Fatal(err)
    }

}

驗證:
go mountnamespace.go
ls /proc 查看(此時文件還比較多)
mount -t proc proc /proc 將proc 掛載到我們自己的namespace下
ls /proc 查看(少了許多)

proc

(5)User Namespace 主要用來隔離用戶的用戶組ID 比較常用的是 在宿主機上以一個非root用戶運行創(chuàng)建一個User Namespace 然后在User Namespace映射成root

package main

import (
"os/exec"
"syscall"
"os"
"log"
)

/**
因為要使用linux 內(nèi)核驰坊,所以不能在其他平臺上運行
 */
func main() {
   //sh 為被fork 出的新進場的初始命令
   cmd := exec.Command("sh")
   cmd.SysProcAttr = &syscall.SysProcAttr{
      Cloneflags: syscall.CLONE_NEWUTS |syscall.CLONE_NEWIPC|syscall.CLONE_NEWPID|syscall.CLONE_NEWNS|syscall.CLONE_NEWUSER,
   }
   cmd.Stdin = os.Stdin
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr

   if err := cmd.Run(); err!=nil{
      log.Fatal(err)
   }

}

驗證 (內(nèi)核版本要3.8以上,我一開始使用的是2.6.32的就無法創(chuàng)建User Namespace)

內(nèi)核2.6不能創(chuàng)建user namespacve
4.12的內(nèi)核

(6)Network NameSpace 主要用來隔離網(wǎng)絡(luò)設(shè)備哮独、IP地址端口等網(wǎng)絡(luò)棧

package main

import (
"os/exec"
"syscall"
"os"
"log"
)

/**
因為要使用linux 內(nèi)核拳芙,所以不能在其他平臺上運行
 */
func main() {
   //sh 為被fork 出的新進場的初始命令
   cmd := exec.Command("sh")
   cmd.SysProcAttr = &syscall.SysProcAttr{
      Cloneflags: syscall.CLONE_NEWUTS |syscall.CLONE_NEWIPC|syscall.CLONE_NEWPID|syscall.CLONE_NEWNS|syscall.CLONE_NEWUSER|syscall.CLONE_NEWNET,
   }
   cmd.Stdin = os.Stdin
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr

   if err := cmd.Run(); err!=nil{
      log.Fatal(err)
   }

}

驗證
在宿主機上執(zhí)行ifconfig 可以看到有eth0 和 lo 網(wǎng)絡(luò)設(shè)備
運行networknamespace.go,在此環(huán)境下無網(wǎng)絡(luò)設(shè)備


網(wǎng)絡(luò)驗證
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皮璧,一起剝皮案震驚了整個濱河市舟扎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恶导,老刑警劉巖浆竭,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡邦泄,警方通過查閱死者的電腦和手機删窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顺囊,“玉大人肌索,你說我怎么就攤上這事√靥迹” “怎么了诚亚?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長午乓。 經(jīng)常有香客問我站宗,道長,這世上最難降的妖魔是什么益愈? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任梢灭,我火速辦了婚禮,結(jié)果婚禮上蒸其,老公的妹妹穿的比我還像新娘敏释。我一直安慰自己,他們只是感情好摸袁,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布钥顽。 她就那樣靜靜地躺著,像睡著了一般靠汁。 火紅的嫁衣襯著肌膚如雪蜂大。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天膀曾,我揣著相機與錄音县爬,去河邊找鬼。 笑死添谊,一個胖子當(dāng)著我的面吹牛财喳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斩狱,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼耳高,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了所踊?” 一聲冷哼從身側(cè)響起泌枪,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秕岛,沒想到半個月后碌燕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體误证,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年修壕,在試婚紗的時候發(fā)現(xiàn)自己被綠了愈捅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡慈鸠,死狀恐怖痘煤,靈堂內(nèi)的尸體忽然破棺而出刷允,到底是詐尸還是另有隱情豁生,我是刑警寧澤组哩,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站督笆,受9級特大地震影響芦昔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃肿,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一烟零、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咸作,春花似錦、人聲如沸宵睦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壳嚎。三九已至桐智,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烟馅,已是汗流浹背说庭。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留郑趁,地道東北人刊驴。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像寡润,于是被迫代替她去往敵國和親捆憎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 寫這個系列文章主要是對之前做項目用到的docker相關(guān)技術(shù)做一些總結(jié)梭纹,包括docker基礎(chǔ)技術(shù)Linux命名空間躲惰,...
    __七把刀__閱讀 5,801評論 0 16
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,499評論 0 120
  • 今天的三種感受:平靜变抽,愉快础拨,溫暖 今天的小進步:今天老公加班到晚上10點多才回來氮块,我熱烈歡迎他回來,小寶和奶奶已睡...
    小嬪_1e27閱讀 47評論 0 0
  • 感恩日記第三十二天:感恩是最好的祝福诡宗,感恩是最棒的祈禱滔蝉,感恩是幸福的源泉,感恩是愛的頂點 1.感恩一天超的陪伴僚焦,對...
    豐盛富足閱讀 132評論 0 0
  • 這周七天畫了六幅思維導(dǎo)圖锰提,感覺自己對思維導(dǎo)圖的作用更加熟練了,但是也有不足: 1芳悲、線條僵硬立肘,不流暢 2、創(chuàng)意不夠名扛,...
    萌萌噠老李閱讀 171評論 0 0