Docker单机网络上 (2)

把这一对Veth-Pair分别放到Network Namespace network01 和 network02中;

 #绑定
 ip link set veth01 netns network01
 ip link set veth02 netns network02

 #查看namespace组成
 ip netns exec network01 ip addr
 ip netns exec network02 ip addr

 #查看主机中是否存在Veth-Pair
 ip link ls

查看network01和network02中的网络资源,发现各自多了一个网卡,也就是veth设备的两个端点,如下图:

Docker单机网络上

​ 当我们把Veth-Pair分配到Network Namespace中后,在主机上就看不到它们了,如下图:

Docker单机网络上

给这些Veth-Pair分配IP并启用它们;

#启动设备veth01
ip netns exec network01 ip link set veth01 up
#绑定IP
ip netns exec network01 ip addr add 10.0.1.1/24 dev veth01
#设置IP路由
ip netns exec network01 ip route

#启动设备veth02
ip netns exec network02 ip link set veth02 up
#绑定IP
ip netns exec network02 ip addr add 10.0.1.2/24 dev veth02
#设置IP路由
ip netns exec network02 ip route

通过ping命令来验证两个Network Namespace是否可以通信;

ip netns exec network01 ping -c 3 10.0.1.2

Docker单机网络上

至此我们就完成两个Network Namespace之间的通信。

Bridge 什么是Bridge

Linux Bridge(网桥)是工作于二层的虚拟网络设备,功能类似于物理的交换机。Bridge可以绑定其他Linux网络设备作为从设备,并将这些设备虚拟化为端口,当一个从设备被绑定到Bridge上时,就相当于真实网络中的交换机端口插入了一个连接有终端的网线。Bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去和物理交换机的原理差不多。

Bridge作用

Veth-Pair可以实现两个Network Namespace之间的通信,但是当需要在多个Network Namespace之间通信的时候,光靠Veth-Pair就显得有一些麻烦了,我们需要在Network Namespace创建很多个Veth才能和多个Network Namespace通信,我们可以把很多Veth-Pair绑定到Bridge上面,Network Namespace就能连通了多个Network Namespace,当需要通信的时候,Network Namespace只要往Bridge发报文,所有Veth-Pair全都可以收到报文信息。

实战

Docker单机网络上

创建一个br0的网桥,并设置上线;

ip link add br0 type bridge
ip link set dev br0 up
ip addr

Docker单机网络上

创建Veth-Pair;

#创建3个 veth pair
ip link add type veth
ip link add type veth
ip link add type veth

创建Network Namespace;

#创建3个Network Namespace
ip netns add net0
ip netns add net1
ip netns add net2

将Veth-Pair的一边挂到Network Namespace中,另一边挂到bridge上,并设IP地址;

#配置net0
ip link set dev veth1 netns net0
ip netns exec net0 ip link set dev veth1 name eth0
ip netns exec net0 ip addr add 10.0.1.1/24 dev eth0
ip netns exec net0 ip link set dev eth0 up
ip link set dev veth0 master br0
ip link set dev veth0 up


#配置net1
ip link set dev veth3 netns net1
ip netns exec net1 ip link set dev veth3 name eth0
ip netns exec net1 ip addr add 10.220.1.2/24 dev eth0
ip netns exec net1 ip link set dev eth0 up
ip link set dev veth2 master br0
ip link set dev veth2 up


#配置net2
ip link set dev veth5 netns net2
ip netns exec net2 ip link set dev veth5 name eth0
ip netns exec net2 ip addr add 10.220.1.3/24 dev eth0
ip netns exec net2 ip link set dev eth0 up
ip link set dev veth4 master br0
ip link set dev veth4 up

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjzgd.html