21

Tungsten Fabric架构详解vRouter体系结构和部署选项

 4 years ago
source link: https://www.sdnlab.com/23756.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Tungsten Fabric项目是一个开源项目协议,它基于标准协议开发,并且提供网络虚拟化和网络安全所必需的所有组件。项目的组件包括:SDN控制器,虚拟路由器,分析引擎,北向API的发布,硬件集成功能,云编排软件和广泛的REST API。

本文将详细介绍Tungsten Fabric vRouter的体系结构和部署选项。

vRouter的体系结构

先来看一张Tungsten Fabric vRouter功能组件的概念视图。

12TFvRouter01.jpg

vRouter代理在主机操作系统的用户空间中运行,而转发器可以是内核模块,在使用DPDK时在用户空间中运行,或者在可编程网络接口卡(也称为“智能NIC”)中运行。这些选项在后续文章中有更详细的描述,这里说明了更常用的内核模块模式。

代理与控制器保持会话,并发送其需要的VRF、路由和访问控制列表(ACL)的信息。代理将信息存储在自己的数据库中,并使用该信息配置转发器。接口连接到VRF,每个VRF中的转发信息库(FIB)都配置有转发条目。

每个VRF都有自己的转发表和流表,然而MPLS和VXLAN表在vRouter中是全局的。转发表包含目的地的IP和MAC地址的路由,并且IP到MAC关联用于提供代理ARP功能。当VM接口启动时,vRouter选择MPLS表中的标签值,并且这些值仅对该vRouter本地有效。

在一个Tungsten Fabric域内,对于不同vRouters中同一虚拟网络的所有VRF来说,VXLAN网络标识符是全局的。

每个虚拟网络都有一个分配给它的默认网关地址,并且每个VM或容器接口都会在初始化时获得的DHCP响应中接收该地址。当工作负载将数据包发送到其子网外的地址时,它将为与网关IP的IP地址对应的MAC进行ARP,并且vRouter以其自己的MAC地址进行响应。

因此,vRouters支持所有虚拟网络的完全分布式默认网关功能。

详细的vRouter数据包处理逻辑

流出VM和流入VM的数据包的逻辑详细信息略有不同,以下两张图和说明中对此进行了描述。

12TFvRouter02.jpg

当从VM通过虚拟接口发送数据包时,转发器接收该数据包后,首先检查接口所在的VRF流表中是否存在与数据包的五元组(包括协议、源和目标IP地址、源和目标TCP或UDP)匹配的条目。

如果这是流中的第一个数据包,则不会有条目,转发器通过pkt0接口将该数据包发送给代理。代理根据VRF路由表和访问控制列表确定流的操作,并使用结果更新流表。动作可以是DROP、FORWARD、NAT或MIRROR。

如果要转发数据包,转发器将检查目标MAC地址是否是其自己的MAC地址,如果VM在目标位于VM的子网外时将数据包发送到默认网关。在这种情况下,将在IP转发表中查找目的地的下一跳,否则将使用MAC地址用于查找。虽然在计算节点内,但vRouter在这里执行物理路由器的IRB(集成路由和桥接)功能。

12TFvRouter03.jpg

当数据包从物理网络到达时,vRouter首先检查数据包是否具有支持的封装。如果不是,则将数据包发送到主机操作系统。

对于基于UDP的MPLS和基于GRE的MPLS,标签直接标识VM接口,但VXLAN需要由VLAN网络标识符(VNI)标识的VRF中查找内部报头中的目标MAC地址。

一旦识别出接口,如果没有为接口设置策略标志(指示允许所有协议和所有TCP / UDP端口),则vRouter可以立即转发数据包。否则,使用五元组来查找流表中的流,并使用与针对传出分组所描述的逻辑相同的逻辑。

相同子网虚拟机之间的数据包流

当VM中的应用程序首先将数据包发送到另一个VM时,发生的操作顺序如下图所示。

起点是两个VM均已启动,并且控制器已将L2(MAC)和L3(IP)路由发送到两个vRouter,以启用VM之间的通信。发送VM前尚未将数据发送到其他的VM,因此之前没有通过DNS解析目标名称。

12TFvRouter04.jpg

1.VM1需要向VM2发送数据包,因此首先查找自己的DNS缓存以获取IP地址,但由于这是第一个数据包,因此没有条目。
2.VM1在其接口启动时向DHCP响应中提供的DNS服务器地址发送DNS请求。
3.vRouter捕获DNS请求并将其转发到在Tungsten Fabric控制器中运行的DNS服务器。
4.控制器中的DNS服务器以VM2的IP地址响应。
5.vRouter将DNS响应发送给VM1。
6.VM1需要形成以太网帧,因此需要VM2的MAC地址,它会检查自己的ARP缓存,但没有条目,因为这是第一个数据包。
7.VM1发出ARP请求。
8.vRouter捕获ARP请求,并在其自己的转发表中查找IP-VM2的MAC地址,并在控制器为VM2发送的L2 / L3路由中找到关联。
9.vRouter使用VM2的MAC地址向VM1发送ARP回复。
10.VM1的网络堆栈中发生TCP超时。
11.VM1的网络堆栈重试发送数据包,这次在ARP缓存中找到VM2的MAC地址,并可以形成以太网帧并将其发送出去。
12.vRouter查找VM2的MAC地址并找到封装路由,vRouter构建外部头部,并将结果数据包发送到S2。
13.S2上的vRouter对数据包进行解封装,并查找MPLS标签以识别将原始以太网帧发送到的虚拟接口,以太网帧被发送到接口并由VM2接收。

不同子网虚拟机之间的数据包流

将数据包发送到不同子网中的目标时,顺序是相同的,只是vRouter作为默认网关响应。VM1将在以太网帧中发送数据包,其中包含默认网关的MAC地址,其IP地址是在VM1启动时vRouter提供的DHCP响应中提供的。

当VM1对网关IP地址发出ARP请求时,vRouter将使用自己的MAC地址进行响应。当VM1使用该网关MAC地址发送以太网帧时,vRouter使用帧内数据包的目的IP地址在VRF中查找转发表以查找路由,该路由将通过封装隧道连接到正在运行目标的主机。

vRouter的部署选项

vRouter有多种部署选项,可提供不同的好处和易用性:

  • Kernel Module(内核模块)——默认部署模式
  • DPDK——使用英特尔库提供转发加速
  • SR-IOV——提供从VM直接访问NIC
  • Smart NIC(智能NIC)—— vRouter转发器在可编程NIC中实现

这些选项如下所示:

12TFvRouter05.png

每个选项的功能和优点如下所述:

内核模块vRouter

vRouter转发器在Linux内核中运行的模块的方式,是目前的默认部署选项。 vRouter实现了网络功能,否则将使用iptables或Open vSwitch来执行。在内核中运行使转发器在通过KVM的网络堆栈时可以直接访问网络流量,并且与转发器作为用户空间中的进程运行时相比,可以实现显著的性能提升。已实施的优化包括:

  • TCP分片卸载
  • 大量接收卸载
  • 使用多队列virtio数据包处理

内核模块方法允许用户使用Tungsten Fabric实现网络虚拟化,同时对底层服务器和NIC硬件的依赖性最小。不过,这种方式仅支持特定的Linux内核版本。

DPDK vRouter

英特尔的数据平面开发工具包(DPDK)是一组库和驱动程序,允许在用户空间中运行的应用程序直接访问NIC,而无需通过KVM网络堆栈。可以在用户空间中运行并支持DPDK的vRouter转发器版本。

与具有未修改的VM的内核模块相比,DPDK vRouter提供了加速的数据包吞吐量,如果访客 VM也启用了DPDK,则可以实现更好的性能。

DPDK vRouter通过将CPU内核专用于数据包转发来工作,该内核不断转发循环等待数据包。这些内核不能用于运行访客VM,因为它们连续100%运行,这在某些环境中可能是个问题。

SR-IOV (Single Root – 输入/输出虚拟化)

SR-IOV不是vRouter本身的严格部署选项,但在某些应用程序中可以与vRouter一起使用。

SR-IOV允许NIC的硬件资源在多个客户端之间共享,就好像每个客户端都具有唯一访问权限一样,就像虚拟机管理程序对CPU所做的一样。它使VM接口可以直接访问NIC,因此数据路径会绕过虚拟机管理程序网络堆栈,从而提高性能。当VM在物理网络和虚拟网络之间执行网关功能时,SR-IOV非常有用,但由于SR-IOV涉及绕过vRouter,因此接口不参与Tungsten Fabric虚拟网络,也不参与网络策略和网络服务。

智能 NIC vRouter

一些新的可编程NIC正在变得可用。 Tungsten Fabric vRouter转发器功能可以在这些新的NIC上实现,这在性能方面带来了实质性的提升,特别是对于在某些环境中占主导地位的小字节数据包。

此外,转发几乎完全从服务器的x86 CPU上卸载了,因此可以为更多的VM释放CPU内核。

智能NIC看起来非常有前途,但显然要求智能NIC在生产环境中可用,并且它们需要时间才能得到广泛使用。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK