Linux網路命名空間
docker底層技術,非常重要的關於namespace,network的namespace看看到底是怎麼回事。
源碼下載
https://github.com/limingios/docker.git 裡面的No.2
通過vagrant 啟動2個node
創建容器,演示network-namespace
shell命令的方式,循環一小時執行一次
啟動了2個容器,test1,test2,進入這2個容器查看各自的ip地址
其實這塊就是一個網路命名空間
發現空間之前是獨立的,容器內的網路命名空間和容器外不同,容器和容器之前的網路命名空間也是相對獨立的。
了解命令
查看networknamespace列表
刪除networknamespace
添加networknamespace
創建linux的networknamespace。
在test1裡面執行ip a 這個操作,lo這個回管口沒有ip地址,而且現在的狀態是DOWN
想讓test1的lo,狀態變成UP,結果發現UNKNOWN,因為埠是需要成雙才可以UP起來的,也就是說需要一對才可以up起來。
做個實驗,按照下面這個圖
讓test1 和test2 鏈接起來,類似網路,現在本身test1 和test2 已經有自己的網口了,但是還需要一根網線,領一個口插進去,成對出現完成test1和test2的互通。
Veth將2個口鏈接起來,創建一對介面,讓如namespace裡面,配置ip地址
創建veth 說白了就是創建一根網線,有2個頭但是在一根線上 veth-test1 和veth-test2
創建 veth-test1 和 veth-test2
將 veth-test1 添加到test1中,veth-test2 添加到test2中
添加ip地址
是否互通
PS:通過linux做的個實驗跟通過docker創建的容器的是類似的,只是用linux的方式模擬了docker容器的方式。其實docker容器的原理就是圍繞這linux底層的網路命名空間的原理實現的。
TAG:IT人講身邊的故事 |