在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:
执行命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中
在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:
执行以下命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
如果使用vbox或virt-manager把bridge设置为br0即可,如果使用cli kvm则先创建两个文件,用于虚拟网卡的添加与删除。假设这两个文件分别为/etc/ovs-ifup和/etc/ovs-ifdown,则向这两个文件中写入以下内容:
## /etc/ovs-ifup
#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port $(switch) $1
## /etc/ovs-ifdown
#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port $(switch) $1
使用以下命令建立虚拟机
kvm -m 512 -net nic,macaddr=00:11:22:33:44:55 \
-net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown \
-drive file=/path/to/disk-image,boot=on
kvm -m 512 -net nic,macaddr=11:22:33:44:55:66 \
-net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
file=/path/to/disk-image,boot=on
在装有open vswitch的主机上有一个物理网卡eth0,一台主机通过网线和eth0相连,在open vswitch的主机上还装有一台虚拟机,把此虚拟机和连接到eth0的主机挂接到同一个网桥上,实现两者之间的通信,构建结果图如下:
执行命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
kvm -m 512 -net nic,macaddr=00.11.22.33.44.55-net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
file=/path/to/disk-image,boot=on //ovs-ifup和ovs-ifdown和上一节相同
以上操作都是将多个主机(物理机或虚拟机)连接到同一个网桥上,实现它们之间的通信,但是要构建复杂的网络,就需要多个网桥,在装有open vswitch的主机上建立两个网桥,实现它们之间的连接,构建结果如下:
执行命令:
ovs-vsctl add-br br0 //添加一个名为br0的网桥
ovs-vsctl add-br br1 //添加一个名为br1的网桥
ovs-vsctl add-port br0 patch-to-br1 //为br0添加一个虚拟端口
ovs-vsctl set interface patch-to-br1 type=patch //把patch-to-br1的类型设置为patch
ovs-vsctl set interface patch-to-br1 options:peer=patch-to-br0 //把对端网桥和此网桥连接的端口名称设置为patch-to-br0
ovs-vsctl add-port br1 patch-to-br0 //为br0添加一个虚拟端口
ovs-vsctl set interface patch-to-br0 type=patch //把patch-to-br0的类型设置为patch
ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1 //把对端网桥和此网桥连接的端口名称设置为patch-to-br1
在两台机器上分别安装上open vswitch并创建网桥,分别为两个网桥添加物理网卡,然后通过网线连接两个网桥,实现两个网桥之间的互通。构建结果图如下:
执行命令:
host1
ovs-vsctl add-br br0 //添加名为br0的网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
host2
ovs-vsctl add-br br0 //添加名为br0的网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
然后使用网线把host1的eth0和host2的eth0相连即可。
场景:
每一台节点都有两张网卡,一张用于管理,一张用于业务。之所以使用两张网卡有两个原因:
1、管理网卡用于日常的维护登录,业务网卡用于传输虚拟节点的数据报文,避免相互之间影响。
2、我们要将业务网卡绑定到OVS网桥上,也就是Normal类型的Port。这种方式添加的Port不支持分配IP地址,如果之前网卡上配置的有IP,挂载到OVS上面之后将不可访问。
注意:
如果是使用物理环境搭建网络拓扑,需要把业务网卡对应的交换机端口配置为trunk模式。如果是使用VmWare搭建网络拓扑,业务网卡需要配置网络类型为仅主机模式。
配置环境 主机A
ovs-vsctl add-br br-int
# 请修改eth1为当前实验环境的业务网卡名称
ovs-vsctl add-port br-int eth1
# 添加两个内部端口
ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal
ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal
# 添加两个netns
ip netns add ns0
ip netns add ns1
# 将内部端口分别移动到netns中
ip link set vnet0 netns ns0
ip link set vnet1 netns ns1
# 启动端口并配置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set vnet0 up
ip netns exec ns0 ip addr add 10.0.0.1/24 dev vnet0
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set vnet1 up
ip netns exec ns1 ip addr add 10.0.0.2/24 dev vnet1
配置环境 主机B
ovs-vsctl add-br br-int
# 请修改eth1为当前实验环境的业务网卡名称
ovs-vsctl add-port br-int eth1
# 添加两个内部端口
ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal
ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal
# 添加两个netns
ip netns add ns0
ip netns add ns1
# 将内部端口分别移动到netns中
ip link set vnet0 netns ns0
ip link set vnet1 netns ns1
# 启动端口并配置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set vnet0 up
ip netns exec ns0 ip addr add 10.0.0.3/24 dev vnet0
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set vnet1 up
ip netns exec ns1 ip addr add 10.0.0.4/24 dev vnet1
测试
测试 主机A
ip netns exec ns0 ping 10.0.0.3
ip netns exec ns0 ping 10.0.0.4
ip netns exec ns1 ping 10.0.0.3
ip netns exec ns1 ping 10.0.0.4
测试 主机B
ip netns exec ns0 ping 10.0.0.1
ip netns exec ns0 ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1
ip netns exec ns1 ping 10.0.0.2
结果:OVS成功的联通了分布在不同主机上的虚拟网络设备。
构建分布式隔离网络和单节点的操作方法一致,即给对应的端口配置VLAN tag。如下图所示,我们分别给主机A、B上的端口配置VLAN tag为100和200。
配置环境 主机A
ovs-vsctl set Port vnet0 tag=100
ovs-vsctl set Port vnet1 tag=200
配置环境 主机B
ovs-vsctl set Port vnet0 tag=100
ovs-vsctl set Port vnet1 tag=200
测试
测试 主机A
ip netns exec ns0 ping 10.0.0.3
ip netns exec ns0 ping 10.0.0.4
ip netns exec ns1 ping 10.0.0.3
ip netns exec ns1 ping 10.0.0.4
测试 主机B
ip netns exec ns0 ping 10.0.0.1
ip netns exec ns0 ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1
ip netns exec ns1 ping 10.0.0.2
结果:OVS成功的隔离了分布在不同主机上的虚拟网络设备