在centos中创建network namespace,以及实现network namespace之间的通信

一、创那一个network namespace

ip netns add che-ns1

在centos中创建network namespace,以及实现network namespace之间的通信_第1张图片

二、查看che-ns1的信息

ip netns exec che-ns1 ip a

在centos中创建network namespace,以及实现network namespace之间的通信_第2张图片

三、启动che-ns1

ip netns exec che-ns1 ifup lo

在centos中创建network namespace,以及实现network namespace之间的通信_第3张图片

四、如同前3步,再创建一个network namespace"che-ns2",并启动che-ns2

在centos中创建network namespace,以及实现network namespace之间的通信_第4张图片

五、到这里,我们已经创建了两个network-namespace,那么这两个network-namespace之间该如何通信呢,

有了不同 network namespace 之后,也就有了网络的隔离,但是如果它们之间没有办法通信,也没有实际用处。要把两个网络连接起来,linux 提供了 veth pair 。可以把 veth pair 当做是双向的 pipe(管道),从一个方向发送的网络数据,可以直接被另外一端接收到;或者也可以想象成两个 namespace 直接通过一个特殊的虚拟网卡连接起来,可以直接通信。

六、创建type为veth pair的link

ip link add veth-link1 type veth peer name veth-link2

在centos中创建network namespace,以及实现network namespace之间的通信_第5张图片

七、设置che-ns1的link为veth-link1,che-ns2的link为veth-link2

ip link set veth-link1 netns che-ns1
ip link set veth-link2 netns che-ns2

在centos中创建network namespace,以及实现network namespace之间的通信_第6张图片

八、为veth-link1、veth-link2设置ip地址

ip netns exec che-ns1 ip addr add 192.168.1.21/24 dev veth-link1
ip netns exec che-ns2 ip addr add 192.168.1.22/24 dev veth-link2

在centos中创建network namespace,以及实现network namespace之间的通信_第7张图片

九、命名空间che-ns1 ping che-ns2

ip netns exec che-ns1 ping 192.168.1.22

在centos中创建network namespace,以及实现network namespace之间的通信_第8张图片
此处有个小小的翻车,没有启动veth-link1、veth-link2,启动后,重新再ping,就可以ping通了,
启动 veth-link的命令如下

## 启动命令
ip netns exec che-ns1 ip addr add 192.168.1.21/24 dev veth-link1
ip netns exec che-ns2 ip addr add 192.168.1.22/24 dev veth-link2
## 查看命令
ip netns exec che-ns1 ip link
ip netns exec che-ns1 ip a

你可能感兴趣的:(Docker)