VXLAN(Virtual eXtensible Local Area Network
,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种 Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络。
简单来讲,VXLAN
是在底层物理网络(underlay)之上使用隧道技术,借助 UDP
层构建的 Overlay 的逻辑网络,使逻辑网络与物理网络解耦,实现灵活的组网需求。它对原有的网络架构几乎没有影响,不需要对原网络做任何改动,即可架设一层新的网络。也正是因为这个特性,很多 CNI 插件(Kubernetes 集群中的容器网络接口,这个大家应该都知道了吧,如果你不知道,现在你知道了)才会选择 VXLAN
作为通信网络。
VXLAN
不仅支持一对一,也支持一对多,一个 VXLAN
设备能通过像网桥一样的学习方式学习到其他对端的 IP 地址,还可以直接配置静态转发表。
一个典型的数据中心 VXLAN 网络拓扑图如图所示:
其中 VM 指的是虚拟机,Hypervisor
指的是虚拟化管理器。
1. 为什么需要 VXLAN?
与 VLAN 相比,VXLAN
很明显要复杂很多,再加上 VLAN 的先发优势,已经得到了广泛的支持,那还要 VXLAN
干啥?
VLAN ID 数量限制
VLAN tag 总共有 4 个字节,其中有 12 bit
用来标识不同的二层网络(即 LAN ID
),故而最多只能支持 $2^{12}$,即 4096
个子网的划分。而虚拟化(虚拟机和容器)的兴起使得一个数据中心会有成千上万的机器需要通信,这时候 VLAN 就无法满足需求了。而 VXLAN 的报文 Header 预留了 24 bit
来标识不同的二层网络(即 VNI
,VXLAN Network Identifier),即 3 个字节,可以支持 $2^{24}$ 个子网。
交换机 MAC 地址表限制
对于同网段主机的通信而言,报文到底交换机后都会查询 MAC
地址表进行二层转发。数据中心虚拟化之后,VM 的数量与原有的物理机相比呈数量级增长,而应用容器化之后,容器与 VM 相比也是呈数量级增长。。。而交换机的内存是有限的,因而 MAC 地址表也是有限的,随着虚拟机(或容器)网卡 MAC 地址数量的空前增加,交换机表示压力山大啊!
而 VXLAN 就厉害了,它用 VTEP
(后面会解释)将二层以太网帧封装在 UDP
中,一个 VTEP
可以被一个物理机上的所有 VM(或容器)共用,一个物理机对应一个 VTEP
。从交换机的角度来看,只是不同的 VTEP
之间在传递 UDP
数据,只需要记录与物理机数量相当的 MAC 地址表条目就可以了,一切又回到了和从前一样。
虚机或容器迁移范围受限
VLAN 与物理网络融合在一起,不存在 Overlay 网络,带来的问题就是虚拟网络不能打破物理网络的限制。举个例子,如果要在 VLAN 100
部署虚拟机(或容器),那只能在支持 VLAN 100
的物理设备上部署。
VLAN 其实也有解决办法