最近由微软、Arista、英特尔、戴尔、惠普、Broadcom和Emulex向IETF提交的通用路由封装(NVGRE)标准提案,和由思科、VMware、Citrix、红帽、Arista和Broadcom提出的VXLAN标准,实际上都使用封装策略来创建大量的VLAN子网,这些子网可以扩展到分散的数据中心和2、3层网络。二者都旨在实现在云和专有网络中共享负载均衡的多租赁网络。
NVGRE通过租赁网络标识符解决多租赁网络问题
一个大型的云可以支持数以百计的租赁用户,每个租赁用户又可以同时运行多个应用,他们之间的流量都是相互隔离的。
目前,VLAN可以用来分隔流量,但是这种方法受限于几个缺陷。例如,VLAN总是无法处理很多的容量分割需求。在一个大型的虚拟云环境中,每个应用都是由多个VM中运行的组件组成的,而每个应用交互的VM流量都必须分别位于独立的VLAN中。结果:所需要的VLAN总数量很容易超出IEEE 802.1Q VLAN定义的上限:4,094。
当VM在物理服务器之间迁移时,又会出现第二个问题。VM迁移不得影响应用程序,因此,2层协议的地址必须保持不变。针对这种情况,网络必须重新配置,将VLAN扩展到不同服务器,而这个过程很容易出错。
通过指定24位的租赁网络标识符(TNI),NVGRE解决了这些问题。每个TNI都定义了一个虚拟的2层网络,最多支持1.6千万个网络。
NVGRE创建了一个虚拟2层网络
NVGRE是一个由RFC 2784定义和RFC 2890扩展的通道协议,该协议提供了一种封装方法,将数据包发送到2层或3层网络目的地址。NVGRE提议使用GRE来创建一个独立的虚拟2层网络,限制物理2层网络或扩展超过子网边界。
每个TNI都与一个GRE通道相关联。从通道终端发送的数据包会通过IP组播送往与同一个TNI相关的另一个终端。使用多播技术意味着通道可以扩展到3层网络,将一个大型的广播域划分成多个较小的域,从而限制广播流量。
NVGRE终端接收来自VM的以太网数据包,将它们封装并通过GRE通道发送出去。终端会打开接收的数据包,将它们分配给对应的VM。虽然终端可能位于任意组件,但是一般情况下,它们都是在服务器的虚拟机管理程序中。
每个NVGRE终端都配置了一个或多个IP地址。每个IP地址叫做供应商地址(PA)。VM的IP地址是客户地址(CA)。为终端配置多个PA就可以实现负载均衡。但这个提案并没有定义流量如何根据特定CA或负载均衡算法分配给某个PA。
通过NVGRE标准隔离租赁数据
NVGRE终端通过在GRE头插入INT指示符的方式分隔各个TNI。TNI指示符是位于RFC 2890规定的关键域中。虽然该关键域定义为32位域,但是TNT会占用24位,其余8位为保留位。NVGRE不使用RFC定义的序列号。
封装了数据包的NVGRE终端必须定义数据包发送的目标地址。目前,NVGRE提议草案将这个问题延迟到后续版本,它规定:“控制面板可以使用任意技术进行配置、发现和分配策略信息”。
通过NVGRE将整个子网迁移到云中
虽然提案并没有指定CA和PA地址的配置方法,但是它可以静态、动态或使用无状态地址自动配置方式来解决分配问题。IPv4或IPv6都是可以使用的。CA能配置IPv4地址,同样的,PA也能配置IPv6地址空间。
根据NVGRE提案,这个标准旨在让企业能够将整个子网迁移到云中。子网的一部分可以迁移,而剩下的运行在企业网络中,这样,VPN就可以将云连接到企业网络中。
有效使用网络需要在多个网络路径中分散流量。提案规定,诸如ECMP的技术可以与保留的8位GRE头关键域一起使用,支持多路径使用。这个提案并不包括实现负载均衡流的算法细节。另一个实现ECMP的方法是在服务器中分配多个PA。然后,交换机可以在PA的路由中分散传输流量。
NVGRE标准与VXLAN标准
很明显,两个提案都解决了相同的问题:4094个VLAN无法支持多个云租赁和应用程序。提案的其他主要相似点包括:
- 引入了新的24位标识符
- 使用通道在网络和子网边界传输数据包
- 使用组播来连接网络VM中运行的应用程序组件
这两个提案的不同之处在于存储目标地址的位置。VXLAN提案详细地描述了数据包是如何通过通道寻找到目标终端。而NVGRE提案将定位目标的方法延迟到后续版本。
两种提案都认为负载均衡是实现有效运营的必要条件。VXLAN解释了如何通过随机分配端口号来分散负载。NVGRE建议使用GRE关键域中的保留8位,但是没有详细介绍它们的使用方法。
总之,VXLAN更为全面。思科和VMware都发布了支持这个标准的产品。而NVGRE提案还需要进一步完善,才能发布产品。