1. vlan的数量限制
4096个vlan远不能满足大规模云计算数据中心的需求
2. 物理网络基础设施的限制
基于I P子网的区域划分限制了需要 二层网络连通性的应用负载的 部署
3. TOR交换机MAC表耗尽
虚拟化以及东西向流量导致更多的MAC表项
4. 多租户场景
IP地址重叠?
RFC7348定义了VLAN扩展方案VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网)。
VXLAN采用MAC in UDP(User Datagram Protocol)封装方式,是NVO3(Network Virtualization over Layer 3)中的一种网络虚拟化技术。
VLAN作为传统的网络隔离技术,在标准定义中VLAN的数量只有4000个左右,无法满足大型数据中心的租户间隔离需求。另外,VLAN的二层范围一般较小且固定,无法支持虚拟机大范围的动态迁移。
VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段,提供多达16M租户的标识能力,远大于VLAN的4000;另一方面,VXLAN本质上在两台交换机之间构建了一条穿越数据中心基础IP网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,满足虚拟机大范围动态迁移的需求。
虽然从名字上看,VXLAN是VLAN的一种扩展协议,但VXLAN构建虚拟隧道的本领已经与VLAN迥然不同了。
下面就让我们来看下,VXLAN报文到底长啥样。
VXLAN报文格式(以外层IP头为IPv4格式为例)
如上图所示,VTEP对VM发送的原始以太帧(Original L2 Frame)进行了以下“包装”:
网络中存在多个VTEP,那么这其中哪些VTEP间需要建立VXLAN隧道呢?
通过VXLAN隧道,“二层域”可以突破物理上的界限,实现大二层网络中VM之间的通信。所以,连接在不同VTEP上的VM之间如果有“大二层”互通的需求,这两个VTEP之间就需要建立VXLAN隧道。换言之,同一大二层域内的VTEP之间都需要建立VXLAN隧道。
例如,假设上图中VTEP_1连接的VM、VTEP_2连接的VM以及VTEP_3连接的VM之间需要“大二层”互通,那VTEP_1、VTEP_2和VTEP_3之间就需要两两建立VXLAN隧道,如下图所示。
建立VXLAN隧道示意图
前面提到的“同一大二层域”,就类似于传统网络中VLAN(虚拟局域网)的概念,只不过在VXLAN网络中,它有另外一个名字,叫做Bridge-Domain,简称BD。我们知道,不同的VLAN是通过VLAN ID来进行区分的,那不同的BD是如何进行区分的呢?其实前面已经提到了,就是通过VNI来区分的。对于CE系列交换机而言,BD与VNI是1:1的映射关系,这种映射关系是通过在VTEP上配置命令行建立起来的。配置如下:
bridge-domain 10 //表示创建一个“大二层广播域”BD,其编号为10 vxlan vni 5000 //表示在BD 10下,指定与之关联的VNI为5000
VTEP会根据以上配置生成BD与VNI的映射关系表,该映射表可以通过命令行查看,如下所示:
<HUAWEI> display vxlan vni
Number of vxlan vni : 1
VNI BD-ID State
----------------------------------
5000 10 up
有了映射表后,进入VTEP的报文就可以根据自己所属的BD来确定报文封装时该添加哪个VNI。
在上图所示的数据中心里,企业用户拥有多个部门(部门1和部门2),每个部门中拥有多个VM(VM1和VM3,VM2和VM4)。同部门的VM属于同一个网段,不同部门的VM属于不同的网段。用户希望同一部门VM之间、不同部门VM之间,VM与Internet之间均可相互访问。
如图,Leaf1和Leaf2作为VXLAN网络的VTEP,两个Leaf之间搭建VXLAN隧道,并在每个Leaf上部署VXLAN二层网关,即可实现同一部门VM之间的相互通信。此时Spine只作为VXLAN报文的转发节点,不感知VXLAN隧道的存在,可以是任意的三层网络设备。
相同子网互通
如图,Leaf1、Leaf2和Spine作为VXLAN网络的VTEP,Leaf1和Spine之间、Leaf2和Spine之间分别搭建VXLAN隧道,并在Spine上部署VXLAN三层网关,即可实现不同部门VM之间的相互通信。
不同子网互通(集中式网关)
在不同子网互通(集中式网关)中,同一Leaf(Leaf1)下挂的不同网段VM(VM1和VM2)之间的通信,都需要在Spine上进行绕行,这样就导致Leaf与Spine之间的链路上,存在冗余的报文,额外占用了大量的带宽。同时,Spine作为VXLAN三层网关时,所有通过三层转发的终端租户的表项都需要在该设备上生成。但是,Spine的表项规格有限,当终端租户的数量越来越多时,容易成为网络瓶颈。
分布式网关的出现,很好的解决了这两个问题。
同Leaf节点下不同部门VM之间的通信
Leaf1作为VXLAN网络的VTEP,在Leaf1上部署VXLAN三层网关,即可实现同Leaf下不同部门VM之间的相互通信。此时,VM1和VM2互访时,流量只需要在Leaf1节点进行转发,不再需要经过Spine节点,从而节约了大量的带宽资源。
跨Leaf节点不同部门VM之间的通信
Leaf1和Leaf2作为VXLAN网络的VTEP,在Leaf1和Leaf2上部署VXLAN三层网关。两个VXLAN三层网关之间通过BGP动态建立VXLAN隧道,并通过BGP的remote-nexthop属性发布本网关下挂的主机路由信息给其他BGP邻居,从而实现跨Leaf节点不同部门VM之间的相互通信。
不同子网互通(分布式网关)
随着网络的快速普及和应用的日益深入,基础网络的可靠性日益成为用户关注的焦点,如何能够保证网络传输不中断对于终端用户而言非常重要。
在VXLAN网络的子网互通中,VM与Leaf之间,Leaf与Spine之间都是通过单归方式接入的。这种组网接入方式,显然已经不能满足用户对VXLAN网络可靠性的需求。
这时,可以按照如下图所示方式,提升VXLAN网络的可靠性。