• 【博客447】使用open vswitch构建虚拟网络


    使用open vswitch构建虚拟网络

    1、构建物理机和物理机相互连接的网络

    在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1apbKgU0-1660462300543)(https://img-blog.csdnmg.cn/c3dff9939acd4c97aa8bb40bddf8e4ab.png)]

    执行命令:

    ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
    ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
    ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中
    
    • 1
    • 2
    • 3

    2、构建虚拟机与虚拟机相连的网络

    在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:

    在这里插入图片描述

    执行以下命令:

    ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
    
    • 1

    如果使用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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3、构建虚拟机与物理机相连的网络

    在装有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和上一节相同
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、构建网桥和网桥相连的网络

    以上操作都是将多个主机(物理机或虚拟机)连接到同一个网桥上,实现它们之间的通信,但是要构建复杂的网络,就需要多个网桥,在装有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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5、在不同的主机之间构建网桥之间的连接

    在两台机器上分别安装上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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    6、分布式无隔离网络

    场景:

    每一台节点都有两张网卡,一张用于管理,一张用于业务。之所以使用两张网卡有两个原因:
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    配置环境 主机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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    测试

    测试 主机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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果:OVS成功的联通了分布在不同主机上的虚拟网络设备。
    在这里插入图片描述

    7、分布式隔离网络

    构建分布式隔离网络和单节点的操作方法一致,即给对应的端口配置VLAN tag。如下图所示,我们分别给主机A、B上的端口配置VLAN tag为100和200。

    在这里插入图片描述

    配置环境 主机A

    ovs-vsctl set Port vnet0 tag=100
    ovs-vsctl set Port vnet1 tag=200
    
    • 1
    • 2

    配置环境 主机B

    ovs-vsctl set Port vnet0 tag=100
    ovs-vsctl set Port vnet1 tag=200
    
    • 1
    • 2

    测试

    测试 主机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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果:OVS成功的隔离了分布在不同主机上的虚拟网络设备

    在这里插入图片描述

  • 相关阅读:
    前端面试题JavaScript篇——2022-09-22
    成功编译并运行flutter安卓的gradle文件范例
    Halo搭建个人博客网站
    吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第二节:神经网络基础(上)
    校园综合服务平台V3.9.2 源码修复大部分已知BUG
    springboot全省中小学师生共建习题交流与指导平台毕业设计源码031619
    Web 3.0 :它是互联网的未来吗?
    【C语言指针详解-CSAPP数据段解析】1024程序员节 | 汇编语言机械级编程|用代码,改变世界#
    Flutter折腾学习成长记(25)
    遥感云计算的一个拐点
  • 原文地址:https://blog.csdn.net/qq_43684922/article/details/126332196