本文档介绍如何使用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” 端口, 命名为 p0
和 p1
.
宿主机可有两个外部接口。我们将使用eth0
来承载管理流量,eth1
承载隧道流量(也可以使用一个接口承载两种流量)。请注意他们在上图中的IP地址。你不必使用完全相同的IP地址。只需知道标注的IP地址将在以下步骤中使用。
你也可以连接两个物理机而不是上图中的虚拟机到交换机br0
. 此种情况下:
确保在你的宿主机上有两个额外的物理端口 eth2
和 eth3
.
在本文的余下部分, 将 p0
替换为 eth2
以及将 p1
替换为 eth3
.
除了将p0
和p1
实现为物理接口之外,你还可以将它们作为独立的TAP设备或模拟的VM接口.
创建和关联虚拟机不在本文档的讨论范围内,包含在图表中仅供参考。
以下这些说明描述了如何使用以单个ovsdb-server实例运行,由其处理OVS和VTEP schema。如果按照"需求"一节的第二个步骤安装了Debian数据包,可以跳过步骤1-3。
$ ovsdb-tool create /etc/openvswitch/ovs.db vswitchd/vswitch.ovsschema
$ ovsdb-tool create /etc/openvswitch/vtep.db vtep/vtep.ovsschema
$ 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
$ ovs-vswitchd --log-file --detach --pidfile \
unix:/var/run/openvswitch/db.sock
$ ovs-vsctl add-br br0
$ ovs-vsctl add-port br0 p0
$ ovs-vsctl add-port br0 p1
$ vtep-ctl add-ps br0
$ vtep-ctl set Physical_Switch br0 tunnel_ips=10.2.2.1
/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。
$ vtep-ctl set-manager tcp::6640
其中
是你的控制器的IP地址,可通过宿主机的eth0端口访问.
VTEP实现期望由网络虚拟化控制器(Network Virtualization
Controller,NVC)驱动。控制器(NVC),例如NSX。如果不存在,可以使用vtep-ctl模拟一个:
$ vtep-ctl add-ls ls0
$ vtep-ctl bind-ls br0 p0 0 ls0
$ vtep-ctl set Logical_Switch ls0 tunnel_key=33
为例处理二层广播、多播和未知单播流量、数据包可被发送到"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
service_node
到 source_node
, 可在logical交换机级别完成: $ vtep-ctl set-replication-mode ls0 source_node
$ vtep-ctl add-ucast-remote ls0 00:11:22:33:44:55 10.2.2.3