SDN概念一直如火如荼,若是要谈到概念落地及大规模应用,一定离不开SDN在云计算数据中心的实践应用。云数据中心对网络提出了灵活、按需、动态和隔离的需求,SDN的集中控制、控制与转发分离、应用可编程这三个特点正巧能够较好的匹配以上需求。SDN,可以看为是软件开发和网络技术的混合领域。本文站在云数据中心网络维护工程师的角度,给大家分享SDN与云数据中心结合的前世今生。
一、云数据中心为什么要引入SDN
云计算近十年来受到互联网、IT和电信业共同的关注,云计算技术的快速发展和广泛应用使得数据中心的业务形态产生了很大的变化。目前数据中心业务聚焦在Iaas层,即云计算数据中心利用自身所拥有的计算、存储、网络、软件平台等资源向租户提供Iaas虚拟资源出租。典型的IaaS资源包含云主机(虚拟机)、对象存储、块存储、VPC专用网络(VPC,Virtual Private Network虚拟私有云)、公网IP、带宽、防火墙、负载均衡等产品。
在网络层面,假设暂不考虑公网IP、带宽等衍生网络产品,仅是云主机,网络上最基本的技术要求就是可迁移性和隔离性。可迁移性,通常是指云主机在数据中心具备自动恢复能力。当云主机所在宿主机(物理服务器)出现宕机时,云主机能够自动迁移至另一台正常运行的物理服务器上且IP保持不变。隔离性通常可以分为两个层面,一是不同租户间的网络隔离,鉴于安全考虑,不同租户间内部网络不可达;二是同一租户内部不同子网(vlan)间的隔离,为业务规模较大的租户提供的多层组网能力。
因云主机迁移IP不能变,进而要求网络需处于二层环境中,早期云数据中心在组网上通常是采用大二层技术。大二层技术,简单理解就是整个数据中心是一个大二层环境,云主机网关都位于核心设备上。一想到二层环境,肯定离不开广播风暴,也离不开遏制广播风暴的生成树协议。全网都用生成树协议,势必会阻塞较多的网络链路,导致网络链路利用率不足。为了解决利用率不足的问题,思科VPC(这个跟上文的VPC不一样,virtual port channel虚拟端口转发)技术和华为华三的IRF堆叠技术应运而出。简单的理解,上面两种技术都是对生成树协议的欺骗,最终使被生成树协议阻塞链路转变为可使用状态,提升链路使用率。结合大二层技术使用的租户隔离方式有两种常用的,一个是vlan隔离,一个是VRF(Virtual Routing Forwarding虚拟路由转发)隔离。若是采用vlan隔离,通常需要把云主机网关终结在防火墙上,这样才能满足租户间安全隔离的需求。这种模式下,一般是一个租户对应一个vlan;针对同一租户有多子网的需求,则需要在网关设备防火墙上通过较为复杂策略来实现。若是采用VRF隔离的方式,通常是把云主机网关终结在高端交换机或者路由器上,一个租户对应一个VRF.针对同租户有多子网的需求,则是一个VRF+多个vlan的模式。
受限于vlan/VRF规模,无论是“大二层+vlan”还是“大二层+VRF”,都存在云数据中心租户数量不超过4096个的限制,同时也不允许租户间的IP地址段冲突。在加上传统IP网络架构在虚拟化、灵活配置和可编程方面能力不足,在云数据中心网络服务业务链编排上也有所制约。为了解决上述问题,出现了在云数据中心网络中引入了SDN的技术潮。
二、SDN在云数据中心的系统架构
SDN的3+2架构模型,从上到下分为应用层、控制层和转发层。以控制层为基准点定义了两个外部接口,其中,向上为应用提供自定义业务功能的API称为北向接口,向下控制使用底层网络资源的API称为南向接口。常用的北向接口标准是Restful,常用的南向接口标准是Openflow.
SDN的3+2架构模型相信大家都不陌生。SDN在云数据中心跟云管理平台(以Openstack为例)整体融合考虑时,比较常见的系统架构如下所示。针对下图进行几个说明,说说为什么常用这种模式:
1、关于系统层级的划分:
推荐的SDN系统层次划分中,云数据中心运营管理平台和Openstak统一被定义为应用层,独立的SDN控制器设备构成控制层,底层网络设备构成了转发层。在业界关于Openstack数据中心系统层级,除了图中所示,还有另外一种划分方式。在另一种划分方式中,是把Openstack的Neutorn当成是控制层,由neutron直接对接底层网络设备。在服务器规模较大的云数据中心,尤其是采用虚拟交换机时,控制器跟网络设备(虚拟交换机)之间的交互流量是比较大的。在实际部署中,通常会引用商业版的SDN控制器。商业版的SDN控制器与Neutron的对接,主要体现在于Neutron插件上。
Neutron是Openstack的网络管理模块。Neutron主要由Neutron server、插件代理(Plugin Agent)构成。Neutron Server包含守护进程Neutron-server和各种插件Neutron-*-plugin.守护进程Neutron-server对外暴露API接口,配置管理网络插件,并把来自API的调用请求传给已经配置好的插件进行后续处理;插件Plugin分为core和additional两类,需要访问数据库来维护各种配置数据和对应关系。插件代理(Plugin Agent)通常位于计算服务器上,与Neutron上的插件进行通信,名字为Neutron-*-agent,通常与Neutron上的各种插件Neutron-*-plugin相对应。Neutron默认的core plugin是ML2.若是引入商业版的SDN控制器,需要安装对应的core plugin用来取代ML2,同时也需要安装对应的插件代理。在这种情况下,SDN控制器通过Neutron core plugin与neutron server进行通信连接,通过控制器南向接口纳管底层网络设备,例如通过openflow下发流表。
2、关于管理流量和业务流量的区分:
为保障云数据中心的网络信息安全和流量走向有序,基于数据类型将系统架构划分管理和业务两个平面。管理流量(云平台、控制器及网络设备之间控制流量)跑在管理域交换设备构建物理的通道上,业务流量(所有租户的业务流量)跑在业务域交换设备构建物理的通道上。两个数据通道完全隔离,物理独立。上图中的虚线为系统管理流量,实线为用户业务流量。管理平面并无特殊的组网需求,依旧采用传统组网。业务平面承载数据中心全部用户数据流量,需要考虑前面提到的虚拟机迁移大二层、租户隔离以及IP允许冲突等组网需求。云数据中心在业务平面通常采用vxlan的组网模式。需要澄清一点的是,Openstack的Neutron支持多种业务平面的组网模式,如flat, VLAN, GRE 和VXLAN.在云数据中心选择XVLAN的组网,主要是为了满足前面提到的三个组网需求。
Vxlan,简单理解就是隧道报文封装。原始以太网数据包,包括原始IP/MAC地址和vlan等报头信息,均成为vlxan的报文内容。Vxlan包头,包含vxlan隧道两端VTEP(进行vxlan封装的网络设备)的IP/MAC地址和vxlan设备对应的vlan,与原始以太网报文无关。在这里,有三个网络标识要拎出来。
第一个是外层802.1Q,位于vxlan报文封装的包头,是vxlan设备对应的vlan,也叫做underlay网络的vlan,为全局vlan.
第二个是内层802 .1Q,位于原始以太报文内部,是原始用户数据对应的vlan,也成为本地vlan,仅在用户的虚拟机上联的vxlan设备内部有效。
第三个是vxlan的隧道标识,也叫做VNI,是区分vxlan隧道的关键。Vxlan标识位有24位,即最多可支持2^24个,数量上远远胜出vlan/VRF.
业务平面引入vxlan组网,vxlan和租户/租户网络之间的关系是云数据中心的组网模型重点。以一个云数据中心的典型租户VPC为例,分别分析vlan、VRF和vxlan组网的隔离模型。假设租户有2个子网,分别是子网A(192.168.100.0/24)和子网B(10.100.1.0/24),同子网二层互通,跨子网三层互通。
若是在vlan组网中,子网A和子网B分别对应为两个vlan,vlan的网关终结在防火墙上,通过防火墙策略实现跨子网互通。
若是在VRF+vlan的组网中,租户对应为一个VRF,子网A和B分别对应两个vlan,VRF关联两个vlan实现三层互通。
若是在vxlan的组网中,需要理解前面提到的本地vlan和vxlan VNI和全局vlan这三个概念。Vxlan设备是封装和解封vxlan的边缘设备,因此以vxlan设备为界面,形成了全局vlan域和本地vlan隔离域。全局vlan域是vxlan设备和业务域传统网络设备构建的区域,此vlan是在数据中心业务域全局生效的。以下图为例,全局vlan标识为10,是vxlan设备与传统网络互连的二层标识,一般是在组网初始化时就确定了,后续不会更改。Vm至vxlan设备之间是本地隔离域,vlan仅在本地生效。在不同的本地隔离域中,用户每一个子网分别对应一个vlan,同一个子网的本地vlan标识可以相同也可以不同。如图所示,子网A在vxlan设备1构建的隔离域中对应为vlan100,在vxlan设备2构建的隔离域中对应为vlan200.在vxlan组网环境中,尤为关键的是vxlan的VNI标识。VNI标识也是在业务域全局生效的。业界常用方式是,用户的每个子网对应一个vlxan隧道,即一个VNI标识。跨子网通信也对应一个vlxan隧道。如图所示,子网A内部通信的vlxan VNI是10003,子网B内部通信的vlxan VNI是10002,子网A和子网B之间通信的vlxan VNI是10001.SDN控制器需要分配并存储云数据中心用户的vpc网络和底层网络设备本地vlan/vxlan的正确映射关系,设计并下发合适的流表至vxlan,确保业务流量的正常访问。
3、关于物理交换机和虚拟交换机的选择:
在SDN云数据中心,进行vxlan封装的可以是物理交换机也可以是虚拟交换机。通常把基于虚拟交换机实现vxlan封装的称为软件解决方案,基于物理交换机实现封装的称为硬件解决方案。这两种方案各有优劣,云数据中心可以基于自身业务模型和规模进行适配选择。
在软件解决方案中,每台硬件服务器上都有虚拟交换机来承载vxlan的封装/解封装。以开源OVS为例,虚拟交换机有br-int和br-tun两个网桥,br-tun承载vlxan功能。也有其他的商用解决方案,仅有一个网桥来实现全部通信功能。控制器跟大量的虚拟交换机的控制流量交互,是方案的难点。尤其是虚拟交换机有首包请求机制时,控制器的压力比较大。
在硬件解决方案中,通常由接入交换机来承载vlxan的封装/解封装。接入交换机通常是下挂24/48的硬件服务器,在同规模数据中心的软件方案相比,大大减少了vxlan设备数量。一些商业解决方案中,接入交换机通常会跑bgp evpn,用来在控制平面交互主机路由等关键信息。在硬件解决方案中,通常也会采用上面提到的本地vlan/全局vxlan/全局vlan这三个隔离概念。因为vxlan设备的本地隔离域很大,用户间隔离及用户内部互通流量模型极为复杂。为了区分不同用户,通常会在vxlan设备引入VRF,即一个用户对应一个VRF(VRF是全局生效的),简化控制复杂度。