论文《CrystalNet: Faithfully Emulating LargeProduction Networks》【中文翻译版 CrystalNet:超逼真地仿真大型生产网络】描述了微软在大型仿真网络方面的学术研究成果,也揭示了部分技术细节和架构实现方法。2018年,微软将其更名为开放网络仿真器(Open Network Emulator,简称ONE),该仿真器可以通过模拟整个Azure网络基础架构,来查找最终导致网络中断的Bugs、故障和其他恶意软件,并且微软打算开源这项技术。就公布的论文来看,本文将着重基于论文的理解简要提炼微软在实现Azure网络基础架构仿真方面的技术实践。
微软网络仿真器的开发团队认为,理想的测试应该包含:实际生产配置 软件 硬件 拓扑。最终利用网络仿真器完成Azure网络基础架构相似的网络操作验证。所以在微软网络仿真器架构中,首要条件是网络仿真器要有足够的可扩展性以仿真大型Azure网络,微软给的答案是只有基于云的网络仿真器才能仿真云规模的网络,因此微软网络仿真器是基于云架构的,可在公有云和私有云以及不同云之间进行部署和联动,可以跨越云的边界,具备云资源的调度和编排能力,因此具备足够多的资源来仿真云规模的网络拓扑和环境。其次是要很好的兼容生产配置,也就是Azure网络基础架构中使用的交换机和路由器设备,在网络仿真器中也需要运行相同的设备固件、软件版本、配置文件,这样构建出来的相同拓扑才具有在生产环境直接作用的意义。还有其他一些基于成本、性能等方面的考量而确定的仿真边界等问题(不仿真互联网)而最终构建的网络仿真器。
Open Network Emulator(CrystalNet)仿真器的架构根据论文的描述,其主要架构如下图所示:
图1网络仿真器架构
网络仿真器由几个部分组成:
Orchestrator(协调器/编排器):Orchestrator(协调器/编排器)是网络仿真器的“控制大脑”。通过读取生产网络的信息来配置和编排仿真网络环境,并监控和采集仿真网络环境的状态。此外,Orchestrator(协调器/编排器)对外提供API接口供其他程序进行功能调用。
设备虚拟化沙箱:设备虚拟化沙箱是网络仿真器用来进行隔离的装置的基本格式,基于容器进行构建。主要用于隔离设备与设备之间的运行环境、虚拟接口等内容,同时也将其异构的不同类型的虚拟机、容器等形式进行同质化。虚拟化最大的贡献是将异构的资源标准化和模块化,基于标准化和模块化的资源才能和海运的集装箱一般实现快速编排和管理。设备虚拟化沙箱也是类似的思想,通过标准化和模块化的沙箱对异构的资源进行同构。按照论文的描述,网络仿真器的设备虚拟化沙箱主要有两种:基于VM的、基于Docker的和基于硬件的。设备虚拟化沙箱主要包含什么东西呢?设备虚拟化沙箱的内部架构如下图所示:
图2容器沙箱组成
上图是一个典型的容器沙箱的内部架构图,我们可以看到,在典型的容器沙箱内部,包括三个组成部分:一是Docker运行的路由器交换机固件及可能的业务,第二是作为网络连接的物理网络层封装,主要提供虚拟接口和网络连接等功能。三是在物理网络层封装和Docker容器之间有一个网络命名空间将两者连接起来。
图3虚拟机沙箱组成
虚拟机沙箱和容器沙箱类似,虚拟机沙箱三层结构,区别在容器层,该容器运行的是一台打包过的虚拟机,包括虚拟机映像、KVM管理程序二进制文件和生成设备虚拟机的脚本。也就是通过容器来运行虚拟机。所有在该容器运行着KVM程序和虚拟机的操作系统(设备固件)。
基于硬件的沙箱主要运用于虚实互联的场景。我们在虚实互联小节来说明。
在这三种类型的沙箱中,统一的物理网络层或者PhyNet容器层包含所有虚拟接口,并作为目标拓扑连接。网络仿真器在PhyNet容器层中放置常用的工具,如Tcpdump、包注入和提取脚本等,可以很方便实现流量监控、跟踪及镜像等内容。PhyNet容器层可以说是网络仿真器针对虚拟机和容器的封装,网络仿真器所有的操作均针对PhyNet容器层进行,不使用虚拟机或容器的接口。本质上,沙箱是通过PhyNet容器层实现的对Docker和虚拟机的再次封装。因此沙箱其实本质上是两个容器组成的,因此沙箱又可以使用标准化的Docker管理引擎来实现编排和管理。
图4建立同构网络层
网络仿真器实现异构设备的管理和维护的关键思想:使用同质的容器层维护网络,为每个交换机路由器仿真设备启动一个PhyNet容器,在PhyNet容器之间建立Vxlan网络,打通隧道。并通过PhyNet容器中管理Vxlan网络实现高效和自动化。
虚拟链路:有了控制器,有了标准沙箱之后,就需要使用“网线”将这些沙箱按照需要仿真的拓扑结构连接起来。就需要在云或虚拟化网络中实现虚拟链路,虚拟链路将实现沙箱与沙箱之间的连接。网络仿真器使用的虚拟链路技术是Linux Bridge和Vxlan。通过Linux Bridge和Vxlan建立沙箱与沙箱之间的网络隧道,即可完成沙箱与沙箱之间的以太网数据包传输,并且是在安全隔离的通道中传输,保证了相互之间互不影响,实现和网络一样的通讯效果。
在该网络仿真器中,和生产网络环境一样,基于Vxlan构建了业务网络和管理网络虚拟链路,每种类型的链路将实现各种的功效。
业务网络的虚拟链路实现方式如下图所示:
图5业务网络虚拟链路实现方式
在每个沙箱内,PhyNet容器层虚拟接口会首先和Linux Bridge的网桥接口进行连接,PhyNet容器层会维护一对veth接口,一端是PhyNet容器层的虚拟接口,另一端是LinuxBridge上的虚拟接口。两个接口总是成对出现的,这样就建立一个沙箱到Linux Bridge的链路。如果沙箱和沙箱之间是实现内部通讯而不用进行远端通讯,那么使用Linux Bridge建立的内部链路即可完成通讯和数据包传输工作。如果要实现和远端沙箱的通讯,那么就需要使用Linux Bridge构建VXLANOverlay网络,实现和远端沙箱的对等隧道通讯,也就是建立起一条虚拟链路实现本地沙箱和远端沙箱的连接。在建立的VXLAN Overlay网络中,每个LinuxBridge也有一个VXLAN隧道接口,VXLAN隧道接口也是成对出现的,并且通过给每个链路分配一个唯一的VXLAN ID来隔离每个虚拟链路。这样的话,在正常的IP网络传输中,这对沙箱的通讯就是透明的。
对于管理网络,这个网络仿真器实现的是集中管控方式。
图6管理网络虚拟链路实现方式
如上图,该网络仿真器的管理网络也同样使用Linux Bridge和Vxlan来构建虚拟链路管理通道。区别在于,该管理网络将所有沙箱都连接起来并统一集到一台管理运维机器Jumpbox VM上。Jumpbox VM安装部署了一系列的管理工具,并可以像在生产管理运维那样去访问沙箱里面的仿真设备。其他JumpboxVM(例如基于Windows的jumpbox)通过V**连接到Linuxjumpbox。当然,通过Vlan同样可以将管理网络延伸到其他远端。
仿真边界:另外一个重要的方面是仿真边界,也就是网络仿真器只仿真内部的云数据中心网络,不仿真互联网。但是云数据中心网络涉及到和互联网的交互,这一块怎么解决网络仿真器的交互问题呢?网络仿真器需要引入一种外部设备来实现仿真网络和互联网的交互。外部设备保持与仿真设备的连接,然后可定制的初始仿真路径。也就是说,正常情况下,运营商给到我们数据中心的访问路由地址和路由规则是不太可能变动频繁的,我们只需要有这个外部设备能够(类似互联网)与仿真网络保持连接,看起来是互联网连接的样子,也就是通讯的交互和互联网类似即可。这个外部设备的仿真边界不需要对内部的仿真网络本身发生的路由更新、变化等作出反应,它只要安安静静保持类似互联网的通讯交互接口。因此微软也称之为静态仿真边界。即对仿真内部的动态不会主动给予反应。通过这种比较省成本的方式来解决网络仿真器和互联网的交互问题。
图7典型的静态仿真边界
虚实互联。最后,网络仿真器还涉及到和真实物理设备的交互。比如有些网络设备是没有虚拟化版本的,那么真实物理设备接入到网络仿真器中进行生产业务的对标就很重要。因此,网络仿真器还需支持虚实互联的功能。那么该网络仿真器是如何实现虚实互联的?
图8基于硬件的沙箱组成
网络仿真器在硬件接入层面,会有一个特定的交换机,每个物理设备都接入到交换机端口上,交换机通过物理网线和服务器(硬件沙箱)进行连接。在调度虚实互联的过程中,交换机一端由交换机的管理软件来对交换机端口进行vlan标签的标记从而进行链路互联的切换。而是硬件沙箱的虚拟接口层面,则由PhyNet容器层对虚拟接口进行管理,最后PhyNet容器层和交换机管理软件相互调用和关联,就讲物理接口和虚拟接口打通,建立了一条基于vlan标签的虚实互联通道。而硬件沙箱就是包含PhyNet容器层和交换机管理软件的典型容器。
以上就是微软这款网络仿真器实现的一些技术原理,当然还有很多技术细节论文并未一一说明,但是论文已经把关键点技术点说清楚了。上述的技术点也非常容易就能实现,属于比较常用的系列技术。