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

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

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

vRouter的体系结构

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

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的数据包的逻辑详细信息略有不同,以下两张图和说明中对此进行了描述。

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

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

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

当数据包从物理网络到达时,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解析目标名称。

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中实现

这些选项如下所示:

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

内核模块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在生产环境中可用,并且它们需要时间才能得到广泛使用。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/23756.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于19-12-07
0