在上一篇文章中,我们介绍了XenServer的Bridge网络堆栈模式,现在在本篇文档中,我们将介绍XenServer支持的另一种开源的网络堆栈模式:open vswitch。XenServer现在安装部署的版本中默认采用open vswitch模式,如果我们不需要做LACP或者绑定更多的网卡及使用分布式交换机,那么建议在生产环境中还是使用Linux Bridge模式。

Open vSwitch是一款开源的软件虚拟交换机,适用于基于Linux的虚拟化平台。实质上Citrix也将其集成到自己的XenServer产品当中,并对其进行大力支持。并且基于其开发出自己的虚拟分布式交换机产品提供给XenServer使用。从XenServer6.0开始Citrix将其作为xenServer默认的网络堆栈模式。Open vSwitch提供近似于硬件交换机的多种功能,相比于Bridge网络协议栈来说,Open vSwitch提供了比Bridge更多的功能,比如VLAN功能,端口镜像,QoS等。OpenvSwitch提供的具体功能如下:

  • NetFlow:NetFlow最初是由思科公司开发的一项技术,用于监控网络流量和为管理员提供网络流量的可视化的视图。

  • sFlow:sFlow技术是用于监视网络的开放标准技术协议,为管理员提供了可视化的网络流量视图。

  • Switched Port Analyzer (SPAN):SPAN或端口镜像用于复制或镜像数据包从一个端口到另一个交换机上。这通常是用于监视和扫描目的,比如部署亚信安全的TDA设备进行网络安全威胁扫描等。

  • Remote Switched Port Analyzer (RSPAN):RSPAN顾名思义就是远程的SPAN技术。利用SPAN技术我们可以把交换机上某些想要被监控端口(以下简称受控端口)的数据流COPY或MIRROR一份,发送给连接在监控端口上的流量分析仪,比如CISCO的IDS或是装了SNIFFER工具的PC. 受控端口和监控端口可以在同一台交换机上,也可以在不同的交换机上(远程SPAN)。

  • Quality of Service (QoS):QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。

  • Link Aggregation Control Protocol (LACP):提供LACP协议的能力,聚合多个物理网络接口连接到对端交换机,提供冗余逻辑链路以及带宽的聚合提升。

  • OpenFlow suppor:允许OpenFlow的控制平面的从打开的vSwitch的情况下抽象我们的数据包,其主要作为转发平面。此功能提供了虚拟交换机作为SDN的支持。

  • Generic Routing Encapsulation (GRE):GRE 是通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPv4 网络中传输。

  • VXLAN:VXLAN(Virtual eXtensible Local AreaNetwork)是一种将二层报文用三层协议进行封装的技术,可以对二层网络在三层范围进行扩展。即所谓的大二层技术。

 

在这里重点提一下OpenFlow技术,现在比较火热的新型网络架构软件定义网络( SDN)中,现在业界主要分为两大阵营在该领域抢占制高点,其中一派为传统的网络设备制造厂商,譬如CISCO,他们以OpenFlow为核心技术,将网络设备的控制与数据平面分离,从而实现网络流量的灵活控制,为核心网络及应用的创新提供良好的平台。以此实现软件定义网络。另一阵营以新兴的虚拟化厂商为代表,比如VMware,他们以Overlay技术为主,高举开放的旗帜,他们不用关心底层硬件的工作,更关心的是如何通过软件的方式来定义和控制网络。这两大阵营有对抗也有共鸣。

无疑Open vSwitch也是OpenFlow技术阵营的。OpenFlow 是一组协议和API,它起源于斯坦福大学的Ethane 项目,实现可编程网络的思想, 从SDN 整个架构看,OpenFlow 协议又是控制器与交换机中的通信协议。控制器使用OpenFlow 协议对交换机中的流表表项进行添加、更新与删除。2009 年12月,OpenFlow.org 发布了OpenFlow标准的1.0 版本,在2011年2月,OpenFlow.org 继续发布标准1.1版,后由ONF负责。

 

接下来我们首先介绍Open vSwitch的架构和组件。

  在Open vSwitch中,如果从整体上来看的话,Open vSwitch在服务器上主要简化的结构如下图所示:

XenServer的网络堆栈Open vSwitch模式_open vswitch

可以理解为Open vSwitch主要包含Controller和Datapath两个部分。其中Datapath我们译为数据路径,其实质就是一台以太网交换机。

其中,Controller层是一个网络的管理层,统一管理和配置下面的各个Datapath层设备。Controller层还可以和OpenFlow紧密集成。

数据路径Datapath层其实就是一个虚拟的交换机设备,功能和传统的交换机类似。在Open vSwitch中一台虚拟的交换机就被称之为一个Datapath。其主要是在名称上的称呼。其实这个Datapath和bridge差不多,区别就在于,Datapath受Open vswitch的Controller管理,支持更多的功能。其主要的功能:

   传递虚拟机之间的流量

   实现虚拟机和外部网络的流量通信

XenServer的网络堆栈Open vSwitch模式_open vswitch_02

本图来源于网络

如上图所示,本图很好的展示了Open vSwitch的具体逻辑实现架构。最上层表达的意思是利用OpenFlow协议连接到OpenFlow控制器,以实现SDN的控制层面存在。

中间的这一层就是OpenvSwitch自己的服务守护进行等,主要运作在Domain 0的用户空间。

  • Ovs-vswitchd:该组件是openvswitch在用户空间的守护进程,主要实现虚拟交换机的交换功能。通过netlink协议直接和内核模块Datapath进行通信。

  • Ovsdb-Server:open vswitch的数据库,主要存储openvswitch的配置信息,ovs-vswitchd主要读取ovsdb-server里面保存的配置信息进行工作。ovs-vswitchd会通过Unix socket和ovsdb-server通信。

最下面的这层运行Open vSwitch内核模块Datapath,Datapath主要运行于内核空间,是主要的应用我们配置数据包规则的程序,就是负责干活的一线工程师。

 

下面我们说说Open vSwitch是如何工作的。

 

在系统的内核模块中,Open vSwitch可以创建多个“数据路径(DataPath)”(这类似于以太网交换机,和我们上文中说的网桥类似),在每个Datapath中都可以创建多个“vports”(交换机端口)。

   每个Datapath通过关联流表(flow table)来进行相应的动作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,会交给用户态的ovs-vswitchd查询flow,用户态处理后,会把处理完的数据包输出到正确的端口,并且设置新的datapath规则,后续数据包可以通过新的datapath规则实现快速转发。细节如下图所示:

XenServer的网络堆栈Open vSwitch模式_分布式交换机_03

图片来自网络

上面我们花了一定的篇幅来介绍什么是Open vSwitch和Opne vSwitch的架构以及Open vSwitch如何工作。接下来我需要给大家说明,在Xen或着XenServer中,Open vSwitch是如何和Xen虚拟化底层结合的。

在下面的图中展示了Xen环境下的Opne vSwitch设备架构图

XenServer的网络堆栈Open vSwitch模式_网络_04

图片来自网络

  我们可以看到,在Xen的环境下,Open vSwitch会在每台Xen的主机Domain 0中创建数据路径Datapath。然后通过统一的Controller来进行管理。

XenServer的网络堆栈Open vSwitch模式_open vswitch_05

虚拟机网卡与Open vSwitch的Datapath即网桥端口直接连接。数据包转发到Datapath之后,再有我们上面所说的处理机制进行数据包的处理。这里的tap就是交换机上的一个端口。

  在多台Xen或着XenServer主机中的网络连接示意图。

XenServer的网络堆栈Open vSwitch模式_网络_06

在XenServer中,Citrix基于OpenvSwitch开发了分布式虚拟交换机。

分布式虚拟交换机架构图

XenServer的网络堆栈Open vSwitch模式_XenServer_07

在XenServer中,分布式虚拟交换机如下图所示,XenServer有一台专门封装好的虚拟机,导入XenServer中作为分布式交换机的控制器,对各台XenServer上的Open vSwitch网络进行统一管理。

XenServer的网络堆栈Open vSwitch模式_XenServer_08