V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FreeEx
V2EX  ›  推广

Open vSwitch 入门实践(3)使用 OVS 构建分布式隔离网络

  •  
  •   FreeEx · 2020-12-15 23:33:08 +08:00 · 854 次点击
    这是一个创建于 1442 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 OVS 构建分布式隔离网络

    前言

    上一节我们使用 OVS 构建了单机隔离网络,但是随着网络规模的扩张,单节点已经不再能满足业务的需要,分布式网络成了必不可少的环节。分布式网络与单节点网络在细节实现上基本一致,只有物理环境网络连线上的一点区别。

    实验 1:分布式无隔离网络

    网络拓扑如下图所示,我们每一台节点都有两张网卡,一张用于管理,一张用于业务。之所以使用两张网卡有两个原因:

    1. 管理网卡用于日常的维护登录,业务网卡用于传输虚拟节点的数据报文,避免相互之间影响。
    2. 我们要将业务网卡绑定到 OVS 网桥上,也就是Normal类型的Port。这种方式添加的Port不支持分配 IP 地址,如果之前网卡上配置的有 IP,挂载到 OVS 上面之后将不可访问。

    需要注意的是,如果是使用物理环境搭建网络拓扑,需要把业务网卡对应的交换机端口配置为trunk模式。如果是使用 VmWare 搭建网络拓扑,业务网卡需要配置网络类型为仅主机模式

    ![分布式无隔离网络]( https://oss.typesafe.cn/ovs-分布式隔离网络 0.png?t=2)

    配置

    • 配置环境 主机 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
    
    • 测试结果

    | 主机 A | 主机 B | ping 结果 | | --- | --- | --- | | ns0 | ns0 | 可通信 ✅ | | ns0 | ns1 | 可通信 ✅ | | ns1 | ns0 | 可通信 ✅ | | ns1 | ns1 | 可通信 ✅ |

    根据测试结果可以看到我们使用 OVS 成功的联通了分布在不同主机上的虚拟网络设备。

    实验 2:分布式隔离网络

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

    ![分布式无隔离网络]( https://oss.typesafe.cn/ovs-分布式隔离网络 1.png?t=2)

    配置

    • 配置环境 主机 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
    
    • 测试结果

    | 主机 A | 主机 B | ping 结果 | | --- | --- | --- | | ns0 | ns0 | 可通信 ✅ | | ns0 | ns1 | 不通信 ❌ | | ns1 | ns0 | 不通信 ❌| | ns1 | ns1 | 可通信 ✅ |

    根据测试结果可以看到我们使用 OVS 成功的隔离了分布在不同主机上的虚拟网络设备。

    本文首发我的微信公众号:我在对面的角落 欢迎关注,接收第一时间更新通知。

    欢迎关注微信公众号 接收第一时间更新通知

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5509 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 08:49 · PVG 16:49 · LAX 00:49 · JFK 03:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.