Docker network namespace
一:Linux namespace
Linux核心實現namespace的一個主要目的,就是實現輕量級虛擬化(容器)服務。在同一個namespace下的程式可以感知彼此的變化,而對外界的程式一無所知,彷彿置身於一個獨立的系統環境中,以達到獨立和隔離的目的。
二:network namespace
Network namespace主要提供了關於網路資源的隔離,包括網路裝置,IPv4和IPv6協議棧,IP路由表,防火牆,/proc/net目錄,/sys/class/net目錄,套接字(socket)等。一個物理的網路裝置最多存在於一個network namespace中,可以通過建立veth pair(虛擬網路裝置對:有兩端,類似管道,如果資料從一端傳入另一端也能接收到,反之依然)在不同的network namespace間建立通道,以達到通訊目的。
一般情況下,物理網路裝置都分配在最初的root namespace(系統預設的namespace)中,但是如果有多塊物流網路卡,也可以把其中一塊或多塊分配給新建立的network namespace.
當說到network namespace時,指的是把網路獨立出來,給外部使用者一種透明的感覺,彷彿在與一個獨立網路實體進行通訊。 容器的經典做法就是建立一個veth pair,一端放置在新的namespace中,通常命名為eth0;一端放在原先的namespace中連線物理網路裝置,再通過把多個裝置接入網橋或者進行路由轉發,來實現通訊的目的。
三:ip netns命令
1. 建立一個network namespace
ip netns add nstest
2. 列出系統中已存在的network namespace
Ip netns list
3. 刪除一個network namespace
Ip netns delete nstest
4. 在network namespace中執行一條命令:ip netns exec
如:ip netns exec nstest ip addr
5. 啟動network namespace中的迴環裝置
ip netns exec nstest ip link set dev lo up
6. 在主機上建立兩張虛擬網路卡veth-a和veth-b
ip link add veth-a type veth peer name veth-b
7. 將veth-b裝置新增到nstest這個network namespace中,veth-a留在主機中。
ip link set veth-b netns nstest 此時nstest就有了兩塊網路卡lo和veth-b8. 在主機上為veth-a配置IP並啟動
ip addr add 10.0.0.1/24 dev veth-a
ip link set dev veth-a up
9. 為nstest中的veth-b配置IP並啟動
ip netns exec nstest ip addr add 10.0.0.2/24 dev veth-b
ip netns exec nstest ip link set dev veth-b up
10. 在主機中檢視路由: ip route
11.在 nstest中檢視路由資訊:ip netns exec nstest ip route
這兩條路由表明的意義是目的地址為10.0.0.0/24網路的IP分別從veth-a和veth-b發出。
12. 測試連通性:現在nstest這個network namespace有了自己的網路卡,IP地址,路由表等資訊:
Ping 10.0.0.2ip netns exec nstest ping 10.0.0.1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2146319/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- docker network之 noneDockerNone
- Docker入門實戰 (四) - Docker NetworkDocker
- Docker進階與實踐之二:NamespaceDockernamespace
- k8s & docker networkK8SDocker
- 深入理解 Docker 核心原理:Namespace、Cgroups 和 RootfsDockernamespace
- docker容器技術基礎之linux cgroup、namespaceDockerLinuxnamespace
- network xxx was found but has incorrect label com.docker.compose.network set to "xxx"Docker
- Docker-Bridge Network 03 自定義網路Docker
- How to link multiple docker-compose services via networkDocker
- Docker-Bridge Network 02 容器與外部通訊Docker
- Docker技術三大要點:cgroup,namespace和unionFS的理解DockernamespaceNFS
- Docker技術三大要點:cgroup, namespace和unionFS的理解DockernamespaceNFS
- linux namespace and cgroupLinuxnamespace
- [namespace hdk] modintnamespace
- 關於namespacenamespace
- QT中namespaceQTnamespace
- 再說swift namespaceSwiftnamespace
- 41. The Security Namespacenamespace
- Network Policy - 每天5分鐘玩轉 Docker 容器技術(171)Docker
- linux ipc namespace筆記Linuxnamespace筆記
- [namespace hdk] diff.hnamespace
- linux程式碼之namespaceLinuxnamespace
- [20191021]改名與namespace.txtnamespace
- [namespace hdk] 向量 direct_vectornamespace
- Simple Neural Network
- Set介面_network
- aardio教程四) 理解名字空間(namespace)namespace
- 搞懂容器技術的基石: namespace (上)namespace
- mybatis 中mapper 的namespace有什麼用?MyBatisAPPnamespace
- utilseq.h:92:30: error: ‘Iefp’ is not a class or namespaceErrornamespace
- 13.there is no action mapped for namespace and action name associated with contAPPnamespace
- 8.namespace新增私有倉庫憑據namespace
- HFR:在RBF上實現跨NameSpace Renamenamespace
- 瞭解下C# 名稱空間(Namespace)C#namespace
- Network(POJ-1144)
- POJ 1861 Network (Kruskal)
- Network Embedding_LINE
- Network sniffing and identity authenticationIDE
- The Network Diagram on the PVE system