OVS使用VTEP模拟器

本文档介绍如何使用ovs-vtep,VXLAN隧道端点模拟器(VXLAN Tunnel EndPoint,VTEP),其使用Open vSwitch进行数据转发。VTEPs是指在网络中处理VXLAN帧封装和去封装的实体。

要求

VTEP模拟器是一个Python脚本,它触发对相关工具的调用,如vtep-ctl
和 ovs-vsctl。只有在安装和启用了Open vSwitch守护进程(如ovsdb-server和ovs-vswitchd)时才有用。要执行此启用操作,请执行以下步骤:

  • 按照OVS代码中的文档/intro/install/general描述的说明操作(还没有启动任何守护进程)。

  • 按照OVS代码中的文档/intro/install/debian'描述的说明进行操作,然后安装openvswitch-vtep``软件包(如果在基于debian的机器上操作)。这将自动启动守护进程。

设计

在此过程结束时,你应该具有以下设置拓扑:

    Architecture

    +---------------------------------------------------+
    | Host Machine                                      |
    |                                                   |
    |                                                   |
    |       +---------+ +---------+                     |
    |       |         | |         |                     |
    |       |   VM1   | |   VM2   |                     |
    |       |         | |         |                     |
    |       +----o----+ +----o----+                     |
    |            |           |                          |
    | br0 +------o-----------o--------------------o--+  |
    |            p0          p1                  br0    |
    |                                                   |
    |                                                   |
    |                              +------+   +------+  |
    +------------------------------| eth0 |---| eth1 |--+
                                   +------+   +------+
                                   10.1.1.1   10.2.2.1
                      MANAGEMENT      |          |
                    +-----------------o----+     |
                                                 |
                                 DATA/TUNNEL     |
                               +-----------------o---+

一些重要的点.

  • 我们将使用Open vSwitch来创建"physical" 交换机:br0

  • 我们的 “physical” 交换机 br0 将拥有一个内部端口名字也为 br0 以及两个 “physical” 端口, 命名为 p0p1.

  • 宿主机可有两个外部接口。我们将使用eth0来承载管理流量,eth1承载隧道流量(也可以使用一个接口承载两种流量)。请注意他们在上图中的IP地址。你不必使用完全相同的IP地址。只需知道标注的IP地址将在以下步骤中使用。

  • 你也可以连接两个物理机而不是上图中的虚拟机到交换机br0. 此种情况下:

    • 确保在你的宿主机上有两个额外的物理端口 eth2eth3.

    • 在本文的余下部分, 将 p0 替换为 eth2 以及将 p1 替换为 eth3.

  1. 除了将p0p1实现为物理接口之外,你还可以将它们作为独立的TAP设备或模拟的VM接口.

  2. 创建和关联虚拟机不在本文档的讨论范围内,包含在图表中仅供参考。

开启

以下这些说明描述了如何使用以单个ovsdb-server实例运行,由其处理OVS和VTEP schema。如果按照"需求"一节的第二个步骤安装了Debian数据包,可以跳过步骤1-3。

  1. 创建初始OVS和VTEP schemas:
       $ ovsdb-tool create /etc/openvswitch/ovs.db vswitchd/vswitch.ovsschema
       $ ovsdb-tool create /etc/openvswitch/vtep.db vtep/vtep.ovsschema
  1. 启动ovsdb-server并让它处理两个数据库:
       $ ovsdb-server --pidfile --detach --log-file \
           --remote punix:/var/run/openvswitch/db.sock \
           --remote=db:hardware_vtep,Global,managers \
           /etc/openvswitch/ovs.db /etc/openvswitch/vtep.db
  1. 正常启动ovs-vswitchd:
       $ ovs-vswitchd --log-file --detach --pidfile \
           unix:/var/run/openvswitch/db.sock
  1. 在OVS中创建 “physical” 交换机,并添加端口:
       $ ovs-vsctl add-br br0
       $ ovs-vsctl add-port br0 p0
       $ ovs-vsctl add-port br0 p1
  1. 在VTEP数据库中配置 “physical” 交换机:
       $ vtep-ctl add-ps br0
       $ vtep-ctl set Physical_Switch br0 tunnel_ips=10.2.2.1
  1. 开启VTEP模拟器. 如果你已经按照OVS文档/intro/install/general安装了组件, 在vtep目录运行以下指令:
       $ ./ovs-vtep --log-file=/var/log/openvswitch/ovs-vtep.log \
           --pidfile=/var/run/openvswitch/ovs-vtep.pid \
           --detach br0

如果在安装openvswitch-vtep软件包时执行了安装,你可在目录/usr/share/openvswitch/scripts中找到ovs-vtep。

  1. 配置VTEP数据库管理器指向NVC:
       $ vtep-ctl set-manager tcp:<CONTROLLER IP>:6640

其中 <CONTROLLER IP> 是你的控制器的IP地址,可通过宿主机的eth0端口访问.

模拟NVC

VTEP实现期望由网络虚拟化控制器(Network Virtualization
Controller,NVC)驱动。控制器(NVC),例如NSX。如果不存在,可以使用vtep-ctl模拟一个:

  1. 创建一个"logical" 交换机:
       $ vtep-ctl add-ls ls0
  1. 绑定"logical" 交换机到一个端口:
       $ vtep-ctl bind-ls br0 p0 0 ls0
       $ vtep-ctl set Logical_Switch ls0 tunnel_key=33
  1. 控制未知目的地址流量由隧道发出.

为例处理二层广播、多播和未知单播流量、数据包可被发送到"physical"交换机引用的"logical"交换机的所有成员端口。以下的"unknown-dst"地址用于表示这些数据包。
对于复制数据包有着不同的模式。默认复制模式是将报文发送到服务节点,该节点可以是hypervisor、服务器或设备,并让服务节点处理复制到其它传输节点(hypervisors或其它VTEP physical 交换机)。此模式称为service node复制。

另外一种复制模式,称为source node复制,源节点发送报文到所有其它传输节点。Hypervisors始终负责在两种模式下为本地连接的虚拟机执行自己的复制。服务节点复制模式是默认模式。服务节点复制模式为因为它只需要发送数据包到一个传输节点,所以被认为是基本要求。以下配置用于服务节点复制模式,因为对于未知的"unknown-dst"地址,仅指定了一个传输节点目的:

       $ vtep-ctl add-mcast-remote ls0 unknown-dst 10.2.2.2
  1. 可选的, 修改复制模式由默认的 service_nodesource_node, 可在logical交换机级别完成:
       $ vtep-ctl set-replication-mode ls0 source_node
  1. 控制单播目的地址的报文由一个不同的隧道发出:
       $ vtep-ctl add-ucast-remote ls0 00:11:22:33:44:55 10.2.2.3
### 如何配置 Open vSwitch (OVS) 连接虚拟机或物理网络 #### 安装 Open vSwitch 为了使用 Open vSwitch,首先需要在其所在的主机上完成安装。通常可以通过包管理器来安装 OVS 工具集以及相关依赖项[^1]。 ```bash sudo apt-get update sudo apt-get install openvswitch-switch openvswitch-common ``` #### 创建网桥并启用 STP 和 VLAN 功能 创建一个名为 `br0` 的网桥,并将其作为核心交换结构的一部分: ```bash ovs-vsctl add-br br0 ``` 如果需要支持生成树协议(STP),可以启用该功能以防止环路: ```bash ovs-vsctl set-fail-mode br0 secure ovs-vsctl set bridge br0 stp_enable=true ``` 对于 VLAN 支持,可以在接口上指定特定的 VLAN ID 或者通过 trunk 方式处理多个 VLAN 流量。 #### 添加端口至网桥 无论是连接虚拟机还是物理设备,都需要将对应的网络接口添加到之前创建好的网桥中。假设存在一块物理网卡 `eth0` 要加入此网桥,则执行命令如下所示: ```bash ovs-vsctl add-port br0 eth0 ip link set eth0 up ``` 针对虚拟环境中的虚拟机适配器同样适用上述操作逻辑;只需确保这些虚拟 NIC 正确关联到了所定义之上的 OVS 网桥即可[^2]。 #### 设置虚拟机网络接口 在 KVM/QEMU 平台上运行的虚拟机会自动检测可用的网桥资源,在启动时可直接选择已建立起来的新网桥比如前面提到过的 `br0` 来替代默认提供的 NAT 类型网桥 `virbr0` 。这样做的好处是可以让外部流量顺利进入内部网络空间而不受限制[^3]。 最后一步就是验证整个架构是否正常运作——检查连通性和性能指标等方面的表现情况。 ```python import os def test_connectivity(): result = os.system('ping -c 4 www.google.com') if result == 0: print("Network connectivity is fine.") else: print("There might be some issues with the network setup.") test_connectivity() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值