阿里云的网络产品,为海量的客户提供了私密、灵活、高效、可靠、安全的基础服务,在由云栖社区和阿里云网络团队联合主办的2017阿里云网络技术在线高峰论坛上,阿里云高级技术专家仙侠就为大家揭开了阿里云的网络产品背后技术架构,并且分享了阿里云网络团队对sdn和nfv相关技术的理解和实践。本文内容根据演讲嘉宾分享视频以及ppt整理而成。一、什么是nfv公有云客户的需求:“既要”、“又要”、“还要”sdn、nfv的概念对于很多同学而言是比较陌生的,其实在阿里云网络团队最开始设计sdn和nfv的时候对于这两个概念也并没有非常深刻的理解。其实在最开始,阿里云是一切以客户的需求作为出发点来做的。那么问题来了,阿里云是一家面向公有云用户的云计算公司,而做云计算,客户到底需要什么样的功能呢?经过阿里云长期对于客户的调研和分析发现,阿里云所提供的公有云需要能够满足客户们各种各样的诉求,这些需求可以使用三个词形象地概括:“既要”、“又要”、“还要”。
阿里云所面向的是公有云的用户,大体上客户的需求可以分为以下七点:海量租户、隔离性、互联、安全、高性能、可靠性、私密。
海量租户;对于阿里云而言,首先需要解决的问题就是海量租户的问题。海量租户会对于阿里云的系统容量造成巨大的挑战,那么对于用户或者租户而言,他们首先需要考虑的问题就是自己能否与其他人隔离起来。
隔离;所以对于公有云用户,首先需要提供的功能就是隔离。
互联;在实现了隔离之后,用户又会提出新的需求,就是需要实现互联。因为每个租户自己的资源不是一个完全孤立的岛屿,彼此之间必然会存在资源的互联互通,除此之外还需要满足和公网流量进行互通,甚至需要跨机房、跨地区以及出海等各种各样的互联互通需求。
安全;对于公有云用户而言,在云上往往会非常关注的一件事情就是自身产品以及数据的安全,而且用户对于云上安全的需求是非常强烈的。
高性能;当用户上云之后,其所接到的需求也会递增,所以也会期望能够获取性能更高的产品来满足提供更高的pps以及bps的需求。
可靠;看似用户的一系列问题都已经满足了,但是实际上还会有更多的需求出现。比如虚拟机一定是存活于某一个宿主物理机上的,那么如果宿主物理机宕机了应该怎样处理,如果整个机房都挂掉了又应该怎么处理,这就是客户对于阿里云的可靠性诉求。
私密;除此之外,客户还会产生一些保护私密性的诉求。比如想要和自己的办公网互通的时候并不会将办公网暴露在公网上,那么就需要将自己的办公网与阿里云的vpc打通,并使得两者能够互联互通而且还能够保护客户的私密性。
以上就是客户对于阿里云所提出的诉求,总结而言就是“既要”、“又要”、“还要”的诉求。先把网络隔开阿里云首先需要去满足公有云用户对于网络的第一个需求:隔离。如果对于整个网络进行抽象,那么先隔离开就是为每个租户提供一个完全属于自己的网络空间。在这个网络空间里,用户可以自行购买计算、存储等一系列资源,这样网络对于用户而言称为虚拟网络,而虚拟网络最终是由物理网络承载的。
如上图所示,“先隔开”的概念实际上是包含两个层面含义的。第一层含义是租户与租户之间网络的隔开,也就是每个租户都会有自己的虚拟网络,彼此之间是没有任何关联的完全隔开的网络。可以看到,在虚拟网络中会提供一个虚拟路由器,并且会提供很多个虚拟交换机,而在虚拟交换机下面会挂载计算节点ecs、负载均衡器slb、云数据库rds以及缓存ocs等云产品。在整个虚拟网络流量转发路径中,ecs、负载均衡器slb和云数据库rds等构成了东西向的流量路径;而ecs的流量需要出公网和其他的网络互联互通,就会需要经过虚拟交换机和虚拟路由器进行流量交换,以上就是虚拟网络层面的隔开。而在另外一个层面的隔开是这样的理念:阿里云希望用户与用户的流量可以完全隔开,并且采用通用的overlay技术方案。overlay并不是一个新的概念,其有很多的实现方案比如iponip、xlan等,阿里云采用的是xlan方案。在xlan方案中,为每个用户提供了一个具有xlan地址空间的vpc网络,在这个网络里面实现了虚拟网络隔开和物理网络隔开。在物理网络隔开方面,普通的组网里面有一个核心交换机、一个接入交换机以及最下面的物理服务器,这是物理网络接入的基本情况。如果在传统的网络里面,路由以及流量的交换等一系列功能实际上是由传统的交换设备来实现的,那么如果想使用overlay的技术把这些功能分开,把路由以及交换的功能做到虚拟网络里面之后就会发现物理网络变得非常简单,这也就意味着物理网络的可靠性以及稳定性会更好,这也是阿里云网络团队多年以来得出的经验。所以对于物理网络的需求就是只要物理网络达到2层或者3层互通即可,而一系列复杂的逻辑会在虚拟网络中完成,如此就能够形成上下完全隔离的一张网络。这样的做法会带来非常多的好处,比如对于物理网络而言,它并不知道虚拟网络的流量是如何转发的,而只知道将虚拟流量包装成为xlan之后在物理网络中去跑,这是一个非常简单的拓扑关系。在虚拟网络中的虚拟路由器、虚拟交换机等实际上都是虚拟的网络设备,这也就是nfv的概念。光隔离不够,还要互通
在实现了隔离之后,实际上还远远不够。用户的诉求还有很多,其中比较典型的就是互通。云上的客户对互通的需求大致可分为四类:
私网互通。私网互通不仅包括vpc内部的私网互通,还需要包括同一用户的两张网络之间的互通。
公网互通。公网互通属于必备的功能之一,它也是混合云接入的一种方案。ecs搭配公网ip来联通公网是其中的一种方式,除此之外,用户还会需要另外的方式。举个例子现在每个家庭中都会有自己的无线网络,自己的手机等设备连接上无线网络之后就可以连接到公网,也就能够享受到snat服务。所以对于用户网络而言,是具有联通公网的需求的,也就是用户网络会具有snat和dnat的一系列需求。
用户idc。对于普通用户而言,私网互通和公网互通这两种形态已经能够满足绝大部分的需求了,但是实际中还会有一些用户具有特殊的需求,比如这些用户的线下机房是属于idc的,线下机房扛起平时的流量已经足够了,但是会有一些流量的高峰出现,比如举办活动或者新闻热点出现的时候,所以需要有一个弹性扩展的机房空间。对于这样的场景,阿里云提供了专线接入方案,最后得到的效果就是把用户的idc就近接入一个阿里云的pop点,这样就可以实现idc和阿里云vpc之间的互联互通。就阿里云对于用户的了解来看,对于上述这样的方案,用户会存在两种诉求:第一种诉求就是用户需要非常可靠的接入,不仅可靠还需要延迟比较低,这是一种硬专线的接入方式。还有一种诉求就是需要较为灵活的接入方式,也就是软专线的接入。
跨地域互通。除了能够用上述三种方案满足需求的用户之外,阿里云还有一些用户的业务分散在全国各地甚至世界各地,这样的用户往往就会产生跨地区甚至全球互通的需求。
自研是解决互通之道如下图所示的是阿里云设计的整体网络拓扑图。阿里云在为用户提供网络解决方案的时候也会考虑几套方案,其中第一种方案就是使用交换设备来解决问题,而这种方案会带来两个问题,第一个问题就是包括交换设备在内的硬件的研发周期往往会比较长,这样就容易跟不上用户需求发展的节奏,可能导致当用户的需求提出之后,却迟迟无法实现,所以这样的方案就会受制于硬件。而依赖于硬件也会带来另外一个问题,因为像交换设备这些硬件设备的升级都是需要重启的,而设备重启会对于用户的业务产生时间点不可精确控制的影响。所以从整体层面上来看,阿里云认为通过硬件方式实现解决用户网络的问题会存在很多弊端,因此阿里云选择了软件的方式,通过自研一些网络设备解决了上述的问题。
上图中有几点需要说明,其中的虚拟交换机、网络设备和控制器这三部分都是阿里云自研的产品。从上向下看这张图,自研网络设备会承载用户idc机房的流量和vpc流量的专线流量互通,也就是自研设备会承载两个设备之间的流量,将其打通。除了用户idc之外,还有公网南北向的流量,南北向的流量是由自研的网络设备承载的。虚拟交换机承载的是东西向流量,比如vm和rds数据库进行东西向数据交换的时候,是需要经过虚拟交换机的。所以,从数据层面上来看,自研网络设备和虚拟交换机设备之间的分工都非常明确。而在控制层面,自研的控制器对自研的网络设备和虚拟交换机会进行流表和转发表的下发,实际上是由自研控制器来控制整个转发行为。在控制器上面可以见到的控制台以及售卖等一系列的配套周边资源。对于整体网络拓扑图而言,从上往下以及从左往右的分工都是非常清晰明确的。自研节点可靠吗?这里可能有同学会产生疑问:这么多自研的东西是否靠谱呢?对于这个问题,阿里云网络团队在研发的时候也经常自问,这些设计真的靠谱吗?真的能够解决问题吗?当发生故障的时候真的能够把对于用户的影响降到最低吗?所以在阿里云网络团队设计整个产品的时候就已经把产品的可靠性考虑在内了。阿里云网络团队思考了很多,认为冗余容灾仍旧是最重要的手段。在如下图所示的拓扑图中,自研的网络设备是集群化的,而集群是由多台设备组成的,也就是说首先这个集群是可以水平扩展的,当流量达到水位之后就可以通过水平扩展来抗住更多的流量。第二点,设备之间实际上是没有关系的,也就是说当集群中某台设备宕机了,流量可以自动被其他的正常的设备承担,这样就可以做到对于用户没有影响,用户无感知热升级也是阿里云的技术优势所在。
除此之外,如果网络节点只在一个机房,如果机房挂掉怎么办?这就涉及到容灾的另外一个层面,也就是机房和机房之间的容灾。比如在上图中,机房1中自研的网络设备和机房2中自研的网络设备之间形成的是互为主备的备份关系,这样在没有网络设备故障的时候,机房1和机房2的设备都抗住自己的流量,此时机房1的备也是机房2,而机房2的备也是机房1,他们互为主备都是active的。而当机房1发生了故障之后流量就会自动迁移到机房2上去,这样就可以实现瞬时的容灾。而自研的控制器采用的也是类似的方案。也就是从这个层面上来看,所有的自研方案都可实现容灾和备份,并且能够实现机房之间的容灾冗余,使得机房能够非常可靠地提供服务。安全、安全、还是安全安全永远是公有云用户排在第一位的诉求。这里的安全特指公网层面的安全,公网其实是一个非常脆弱的地方,如果用户将自己的服务暴露在公网上,往往会有黑客进行攻击或者破坏。接下来就分享阿里云对于公网安全的处理逻辑和采取的方案。
首先,当公网流量进入到阿里云的时候,会有一个旁路的检测设备,这就是流量的清洗中心。当流量进入到机房之后,旁路检测设备就会对于流量进行检测和分析,如果发现其中包含攻击流量就会对它进行清洗。而且这里旁路检测设备的清洗能力是tb级别的,也就是说如果tb级别的流量过来都能够在这里清洗完成。当然清洗的过程是需要一定的时间反应的,在这一时刻流量也会透到下一层的自研的边界网关设备上。在边界网关设备上也需要有tb级别的容量,也就是当清洗设备还没有完成清洗工作之前,边界网关设备需要扛起全部流量,这里包括了正常流量和攻击流量。当流量到了边界网关设备之后接下来会经过一系列的处理流程对流量进行分析和限速。如果流量达到了限速的标准,就会将流量限制下来,到这一步就能够抵抗住大概60%~70%以上的攻击流量,经过限速处理完了之后流量就会通过黑名单的过滤流程。其实限速这个环节是比较模糊的处理手段,而过滤这个环节则是比较明确的处理,谁有问题就直接丢掉谁,在经过了过滤阶段之后,就能够抵抗住大概90%以上的攻击流量。最后流量会到调度中心,调度中心会对于流量进行采样分析,将攻击流量甚至包括一些畸形包检测出来最终反馈给过滤环节,以此来丰富过滤环节的处理,让过滤环节更好地处理流量。控制器抽象出虚拟的网络组件
在虚拟网络上已经有很多的虚拟组件了,比如大家在vpc中所见到的虚拟交换机、虚拟路由器,这是两个最常见的虚拟组件。虚拟交换机为其下的ecs、rds等产品提供数据交换的服务,而虚拟路由器则允许用户在其上加一些路由来控制整个网络流量的转发。虚拟边界路由器可能大家看到的比较少,其主要应用在有专线接入的场景中。虚拟边界路由器一端连接用户的idc,另一端连接阿里云的vpc,这里的vpc会与阿里云上的虚拟路由器关联起来,但是又不是直接和虚拟路由器直接连接起来的,实际上中间需要借助路由器接口,也就是虚拟路由器和虚拟边界路由器都会有一个接口,这样中间连接起来。还有就是虚拟nat网关,以及阿里云刚刚推出的虚拟vpn网关�...