每次我跟连网工程师同事讨论VXLAN技术的时候,我总是会遇到“我如何将它与外部世界连接在一起?”这样的问题。 让我们假定你想利用基于VXLAN技术的虚拟子网建立一个典型的3级应用体系结构,而且你已经拥有了防火墙和负载均衡功能,但你能够使用它们吗? 就目前来说,答案是否定的。
近期支持VXLAN Tunnel End Point(VTEP)的唯一一款产品是Nexus 1000V虚拟网关,你能够与VXLAN系统连接的唯一一类设备是虚拟机上的以太网接口卡。如果你想在两个VXLAN系统之间或是一个VXLAN与外部世界之间使用路由器、防火墙或负载均衡器(有时被称为应用配送控制器),那么你就必须使用一台虚拟机版本的3级设备。 那可不一定是个好主意,因为虚拟连网设备有很多影响性能的弊端,而且对CPU周期的消耗也很大。 但是如果你是一家按虚拟机实例数量或CPU周期向客户收费的云供应商,那么你可能不会太在乎这个问题。
虚拟连网设备还可以为你的网络注入更多跃点和不可预知的数据流,因为它们可以在负载均衡器的指挥下自由地在数据中心中移动。这样,一个结构清晰的网络设计就会迅速转变成一团乱麻。
思科没有一款3级虚拟机产品,你能够从VMware买到的唯一一款3级虚拟机产品是vShield Edge,一款拥有精美图形用户界面的定制版Linux。如果你真是非常喜欢部署VXLAN,那么你肯定不会在乎这个问题。基于虚拟机的产品并不少,包括F5的BIG-IP负载均衡器和Vyatta的路由器产品。 在最坏的情况下,你可以将一台标准的Linux虚拟机转换成一个可用的路由器、防火墙或NAT设备,只要把它的一些功能去掉就行了。我并不想那么做,但这总是我们现在能够选择的候选方案之一。
下一步?
有些客户迟早要在物理设备上部署VXLAN,在虚拟机上运行连网功能时速度很慢,而且成本很高。虽然我并没有获得任何确切情报(甚至连路线图也没有),但是请记住Ken Duda在VXLAN Packet Pushers网播中的热情讲话,以及Arista和博通都出现在了VXLAN和NVGRE草案的作者列表之中。
此外,VXLAN密封格式实际上是OTV密封的一个子集,正如Omar Sultan在他的VXLAN Deep Dive博客上所指出,思科已经拥有能够让Nexus 7000停止使用VXLAN所需的必要硬件。
你应该如何做?
VXLAN的3级终端实际上很容易(从架构和制导的角度来说);
附属在VXLAN上的虚拟机配置了默认网关的IP地址(在物理终端设备VXLAN子网内部的逻辑IP地址);
发送IP数据包来达到断网目的的虚拟机必须将数据包发送到默认网关的IP地址并执行ARP请求;
一个或以上3级VXLAN终端设备会对VXLAN密封中的ARP请求作出回应,运行在虚拟机中的管理程序里的Nexus 1000V网关可以记下RouterVXLANMAC-to-RouterPhysicalIP地址转换情况;
当虚拟机向默认网关的MAC地址发送一个IP数据包时,Nexus 1000V网关就会将IP-in-MAC帧发送到最近的RouterPhysicalIP地址。
没有广播或洪水与3级终端有关,因此你可以轻松地在不同路由器上使用相同的物理IP地址和相同的VXLAN MAC地址,实现瞬间冗余,而不用先跳上象HSRP或者VRRP那样的冗余协议。
VXLAN向VLAN的2级拓展(你或许需要将基于VXLAN的主机与外部防火墙相连)有些麻烦。当你将VXLAN和802.1Q VLAN连接在一起的时候,你必须保证不会建立一个转换环路。
你可以将VXLAN2级拓展配置在多台交换机上,并且在VXLAN上运行STP, 但我希望你们最好永远也别那么做。使用IP功能来实现VXLAN-to-VLAN转换可能更好一些。 例如,你可以在多余的VXLAN-to-VLAN桥之间运行VRRP以及把VRRP IP地址象桥的VXLAN物理IP地址一样使用。 VRRP功能还可以控制VXLAN-to-VLAN的转换,只有活跃VRRP网关才可以执行2级转换。你还可以使用STP的最小化子集以避免出现转换环路,但我不会将它作为主要的会聚机制来使用。
结论
VXLAN是一个很棒的概念,它可以让你清楚地将虚拟网络与物理IP转运基础设施区分开,但我们在考虑大规模部署之前,我们还是需要在物理设备(网关、防火墙和负载均衡器)中使用VXLAN。在那之前,它将一直是一个有趣的概念工具或基础设施云供应商使用的一款重要产品。