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實踐(4)—network namespace與veth pairDockernamespaceAI
- docker network基礎Docker
- docker network之 noneDockerNone
- Docker入門實戰 (四) - Docker NetworkDocker
- Docker進階與實踐之二:NamespaceDockernamespace
- k8s & docker networkK8SDocker
- docker容器技術基礎之linux cgroup、namespaceDockerLinuxnamespace
- 深入理解 Docker 核心原理:Namespace、Cgroups 和 RootfsDockernamespace
- Docker技術三大要點:cgroup,namespace和unionFS的理解DockernamespaceNFS
- Docker技術三大要點:cgroup, namespace和unionFS的理解DockernamespaceNFS
- Docker-Bridge Network 03 自定義網路Docker
- QT中namespaceQTnamespace
- 關於namespacenamespace
- [namespace hdk] modintnamespace
- Docker-Bridge Network 02 容器與外部通訊Docker
- How to link multiple docker-compose services via networkDocker
- network xxx was found but has incorrect label com.docker.compose.network set to "xxx"Docker
- 41. The Security Namespacenamespace
- 再說swift namespaceSwiftnamespace
- linux namespace and cgroupLinuxnamespace
- Oracle Namespace 說明Oraclenamespace
- jQuery event.namespacejQuerynamespace
- System.DirectoryServices Namespacenamespace
- Network Policy - 每天5分鐘玩轉 Docker 容器技術(171)Docker
- Linux namespace介紹Linuxnamespace
- [ 答朋友問] same namespace ?namespace
- [namespace hdk] diff.hnamespace
- 註解:從一個namespace跳轉到另外一個namespace,Struts2namespace
- linux程式碼之namespaceLinuxnamespace
- linux ipc namespace筆記Linuxnamespace筆記
- struts2 namespace問題namespace
- [namespace hdk] 向量 direct_vectornamespace
- HBase多租戶-Namespace Quota管理namespace
- AMD and CMD are dead之Why Namespace?namespace
- oracle networkOracle
- 搞懂容器技術的基石: namespace (上)namespace
- 十四、TP5自動生成namespacenamespace
- namespace mismatch require錯誤處理方法namespaceUI