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::6640

其中 是你的控制器的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

你可能感兴趣的:(交换)