传统的网络设备是分布式和去中心化的,每台设备可以通过自主学习和人工配置,可以知道如何转发数据包,而不需要一个集中式的控制设备。
软件定义网络(Software Defined Network), 在虚拟网络里,vSwitch和vRouter这些设备,通常都不用登录上去敲命令(虽然也可以这么做),而是通过云平台配置。云平台通过API和SDN控制器交互,SDN控制器计算并下发转发表到vSwitch和vRouter,完成配置。
SDN原理示意
所谓Overlay,是在传统的物理网络(Underlay)基础之上,构建出一个虚拟的逻辑网络。 从技术上讲,Overlay的二层数据包封装在物理网络的三层报文中传输,到达目的地之后再解封装得到Overlay的二层报文。实际上,这就是一种“L2 over L3”的隧道封装技术。这方面的协议比较多,主要有(L2 over UDP)、(L2 over GRE)、(L2 over TCP)等。
(Virtual eXtensible Local Area Network,虚拟可扩展局域网)是实现网络的主流技术,正是通过VxLAN,才实现了VPC(包括子网)的完美隔离。
大体而言,就是VM之间交互的数据包,在离开vSwitch时会加上封装,形成隧道,
不同子网带有不同的隧道号标识
。解隧道封装的时候,看到隧道号不对,就会抛弃,这样不同子网内的虚拟机无法进行直接通信(除非做了路由),这就实现了隔离。
VxLAN不仅解决了隔离的问题,还解决了传统二层技术(如VLAN)难以解决的大规模二层互连的问题,由于通过三层传输,虚机的部署和迁移就不受二层物理网络限制了。 VxLAN是怎么将L2 over在L3之上呢,答案是:将以太网帧封装在UDP包中。
VxLAN的包结构
如上图所示,Overlay的二层数据帧被封装在三层的IP包中(精确的说,是四层的UDP报文中), 封装的头部是VxLAN Header,里面的主要内容就是24bit的VNI(VxLAN ID),每个子网都有一个VNI, 这样即便是同一台主机上的两台VM,即便处于同一IP段,只要他们在不同的子网,就无法通信,因为子网的OVS看见不同的VNI就会抛弃掉。
做封装和解封装的端点被称为VTEP ,它同时也就是VxLAN隧道的起点和终点。VTEP通常是由OVS实现的,子网中VM向外发出的二层报文,会由OVS进行封装,做成UDP包发出;同时OVS会在UDP特定端口监听,收到VxLAN报文后,如果VNI正确,则去掉封装,将封装前的二层报文转发给相应的VM。
对于裸金属(云管理的物理机)而言,由于它没有OVS,它的Overlay通信要通过VxLAN网关(承担VTEP功能)实现,或者可以在物理机上插一块智能网卡,由智能网卡做VTEP。
VTEP有软件和硬件两种,前面讲的OVS就是软件VTEP,也有用硬件交换机做VTEP的。 如果VTEP由软件完成,这种Overlay就叫Host Overlay;如果由硬件设备完成,就叫Network Overlay;如果都有,就叫混合Overlay。
对于Host Overlay而言,物理交换机网络中的Leaf和Spine仅进行IP报文的高速转发,不处理VxLAN报文。
Overlay和Underlay示意
上图中,VM1和VM2要通信的话(无论是否在同一子网),由OVS封装成VxLAN报文,由leaf和spine交换机进行物理传输;对于在同一台宿主机上的VM3和VM4,如果它们在同一VPC的同一子网,OVS就直接转发了(不走VxLAN);如果是同一VPC的不同子网,也不用走VxLAN,由vRouter和OVS转发;但如果在不同VPC,就也要走VxLAN,因为不同VPC的隔离就是靠VxLAN实现的。