3.5.4 Overlay 网络通信 VXLAN

有了各类虚拟设备之后,下一步就是要使用这些设备组成网络,由于容器网络模型多数属于 overlay 网络,所以本节内容,笔者以 VXLAN 为例介绍 overlay 网络的通信原理。

什么是 overlay 网络

overlay 网络是通过封装技术将数据包封装在另一个数据包中,从而在现有网络(underlay 网络)之上创建一个逻辑网络。不同物理位置的虚拟机、容器、节点通过 Overlay 技术组网之后,它们之间的通信就像在一个局域网内一样。

本文介绍的 VXLAN,以及本书第四章负载均衡 4.3.1 节提及的 IPIP 都属于 overlay 网络技术。


图 3-24 Overlay 与 Underlay 网络模型

VXLAN 你可能没有听说过,但 VLAN(Virtual Local Area Network,虚拟局域网)相信只要从事计算机行业的人都有所了解,

1. VLAN

1995 年,IEEE 就发表了 802.1Q 标准定义了在以太网数据帧中 VLAN 的格式,并且沿用至今。

由于二层网络本身特性决定它非常依赖广播,但当设备非常多,广播又非常频繁的时候,很容易形成广播风暴。因此 VLAN 的首要职责是划分广播域,将同一个物理网络的设备区分出来。VLAN 的做法是在以太网的报头增加 VLAN tag,让所有广播只针对相同的 VLAN tag 的设备生效,这样就缩小了广播域,也提高了安全性和可管理性。

不过 VLAN 有一个非常明显的缺陷,就是 VLAN tag 长度限制,当时的网络工程师完全未料及云计算会发展得会如此普及,只设计了 12 位来存储 VLAN ID,导致一个 VLAN 子网内的设备数量局限在 4000 个左右,这显然无法支持大型数据中心数以万计的设备数。

其次,在服务器虚拟化后,虚拟机动态迁移变得常态化,为了保证迁移时业务不中断,就要求在虚拟机迁移时,不仅虚拟机的 IP 地址不变,而且虚拟机的运行状态也必须保持原状,所以虚拟机的动态迁移只能在同一个二层域中进行,而不能跨二层域迁移。

2. VXLAN

为了解决 VLAN 的设计缺陷,IETF 又重新定义了 VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网) 规范。

从名字上看,VXLAN 是 VLAN 的一种扩展协议,但 VXLAN 的设计与 VLAN 有着本质的不同。VXLAN 属于三层虚拟化网络(Network Virtualization over Layer 3,NVO3)的标准技术规范之一,它实际是一种隧道封装技术,它使用 TCP/IP 协议栈的惯用手法“封装/解封装技术”,将 L2 的以太网帧封装成 L4 的 UDP 报文,然后在 L3 的网络中传输,效果就像 L2 的以太网帧在一个广播域中传输一样,不再受数据中心传输的限制

使用 VXLAN 技术构建一个隧道网络之后,每个节点都会部署了一个 VTEP 设备(VXLAN Tunnel Endpoints,VXLAN 隧道端点)。VETP设备 在 Linux 系统中通常表现为一个虚拟的网络接口,可以配置 IP 地址,可以像物理接口一样加入到 Linux Bridge 中。

VXLAN 的通信原理如图 3-26 所示,源服务器发出的原始数据帧,在 VTEP 设备中被封装成 VXLAN 格式的报文,并在 IP 网络中传递到隧道另一头的 VTEP 设备,目标服务器的 VETP 设备对 VXLAN 报文解封,得到原始的数据帧,然后根据 Linux Bridge 的转发表转发到正确的端口或 VLAN。


图 3-26 VXLAN 通信概览

从上述,我们看到 VXLAN 完美地弥补了 VLAN 的不足:

  • 一方面通过 VXLAN 中的 24 比特 VNI 字段(如图 3-25 所示)提供多达 16M 租户的标识能力,远大于 VLAN 的 4000;
  • 另一方面,VXLAN 本质上在两台交换机之间构建了一条穿越数据中心基础 IP 网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,使虚拟机可以在不同子网之间动态迁移。


图 3-25 VXLAN 报文结构

从 Linux 内核 3.12 版本起,Linux 对 VXLAN 有了完备的支持。现在,只要三层可达的网络,不需要专门的硬件,简单的配置下 Linux 系统,就可以部署 VXLAN 网络。

VXLAN 因其具有很高的灵活性、扩展性和可管理性,也已经成为当前构建数据中心的主流技术,绝大多数的公有云的 VPC 都是用 VXLAN 来作为数据转发层面。

总字数:1233
Last Updated:
Contributors: isno