Openstack neutron:云数据中心底层网络架构
目录
除去我们上一节提到的cisco 的ACI是与思科封闭,自成一体的SDN解决方案以外,大部分SDN的解决方案的重点都不在硬件设备上。常见SDN解决方案的目的都是尽量在现有的成熟交换机或者标准白牌openflow的交换机基础上,完成SDN的跨越。
所以对于物理层面的设计,我们重点都放在了网络结构的设计,也就是几类网络流量模型的区分和设计上。
云数据中心流量类型
云数据中心的流量可以简单分为以下几个大类:
- 管理网络(API网络):用于云数据中心内部的管理流量,包括对内部虚拟化组件之间的、SDN控制组件之间、消息队列、以及各种HA的检测信号等。管理流量一般不对外,并且需要连接云数据中心中的每一个服务器节点,并只在数据中心内部传输。
- 租户网络:用于数据中心的各个租户之间流量,提供云计算服务,保证用户内部vm之间能够通信同时隔离不同用户之间的流量是最基本的要求。租户之间隔离的方式包括了vlan、vxlan、gre、stt、nvgre等等,后续我们再详细介绍。
- 外联网络(外部网络):外部网络的名称是站在租户角度进行描述的,即租户网络只能用户业务虚拟机之间的通信,与其余设备的通讯则都要通过外部网络的转发。除了路由以外,外部网路往往还兼具VPN、NAT、LB、FW等职能。此处往往需要将租户网络中为了隔离而修改过的数据包转封包成常见的二层帧,以及与外界网络的路由
- 存储网络:用于连接计算节点和存储节点,主要是为计算节点中的主机和虚拟机提供存储服务。存储网络也不对外,尽在数据中心内部传输。
NSX整体网络结构
我们先看一下NSX定义的整体网络结构:
在nsx的架构中,左侧区域对应的是计算节点集群,其上以运行租户的业务为主。包括用户部署的各类的虚拟机、虚拟网络、分布式网关、安全策略等等。是数据中心服务的核心。该区域的流量类型包括:租户网络、存储网络、管理网络。(也意味着服务器至少需要三块网卡)
中间区域对应是的基础架构集群,包括云计算数据中心的管理节点和IP SAN 共享存储。管理节点包括: vCenter Server、NSX Manager、NSX Controller、CMP 。IP SAN共享存储节点则主要是向计算节点集群中的主机或用户的虚拟机提供基于IP网络的iSCSI或者是NAS存储。流量类型包括:存储流量、管理流量。
右侧的边缘节点则用来为租户网络提供互联网访问服务。因此需要连接租户网络和外部网络,并为租户提供路由、NAT、防火墙、公网IP等服务。其中以NSX的EDGE虚拟网关为主。也可以有硬件路由器、防火墙等设备。流量类型以:外部网络、租户网络、管理网络为主。
管理网络(API网络)
管理网络需要连接云环境中的每一个节点,上面传输的数据包括虚拟化中心vcenter对host的管理流量、HA心跳、SDN控制器(nsx controller、nsmanager)、云管理平台API、云监控运营平台等多种云计算数据中心管理运营组件的管理流量,属于数据中心的神经网络。
在vmware的设计中,管理控制的节点部署在一个物理主机集群,集群开启HA、DRS等服务,保障数据中心整个控制平面的可靠和稳定。此外IP共享存储也被放置在该区域中。
vmware特意将vmotion的流量也单独列出来成为一类流量。除此之外共享存储也需要单独进行传输。管理节点上存储、vmotion、租户网络、管理网络、外部网络,一般通过物理交换机上的VLAN进行隔离的,并连接物理服务器上的不同物理网卡。管理网络对于带宽的要求并不高,千兆、万兆都可以。但是管理网络的IP共享存储对带宽的要求较高,至少需要部署万兆的网络。
总结:
管理网络连接数据中心所有的节点,主要用于对底层资源的控制,和API调用,对网络的要求不高。一般通过服务器的管理网卡 1 x 1 GbE 或者1 x 10 GbE 交换机网络互联,一般采用单独的接入交换机。
对于vmware的环境来说,vmotion的流量可以走单独的网卡和也可以和万兆管理网络互联
租户网络
租户网络对应的是云数据中心的租户之间的虚拟机用来通信的网络。一般连接所有提供计算服务的计算节点。租户网络的数据都被封装到指定的VLAN中,在外部看来就是VLAN内主机之间的通信,内部流量不可见。
租户网络涉及到NSX、openstack neutron 这类解决方案中一个核心的理念,那就是二层的overlay。
严格来说二层的overlay技术并不算sdn技术中的一部分。在数据中心的环境中,为了保障数据的安全,需要在网络层面上隔离各个租住的虚拟主机,根据业务的特点,一个租户可能使用到多个vlan,例如一个典型的三层架构的应用中,界面、中间件、数据库分属于不同vlan,并通过安全策略控制之间的访问。这种情况下一个租户就占用了3个vlan,而vlan的总数才4096个,还要扣除各个设备厂家的保留vlan和用作管理的vlan等。这样一个数据中心能够承载的用户数就被极大的限制住了。
云数据中心用户的虚拟网络通过不同的VNI号(Vxlan Network identifier)来区分,24bit的VNI包含2^24 = 16 777 216个网段,按照一个用户创建10个私有的网段来计算,一个机房可以满足上百万用户的使用需求。实际上即使是国内的阿里云的总的用户数加起来也才几十万。这还是由分布在全国和海外的多个机房共同承当。所以通过二层的overlay技术,租户网络仅需设计少量vlan即可满足海量用户的使用要求。甚至可以将所有租户的流量全部封装在一个vlan内,但是过多的广播包会影响网络的性能,vmware有针对广播、多播流量的解决方案。详细情况放到下一节。
因为单个主机上承载的虚拟机数量较多,为了保障虚拟设备之间有足够的带宽,租户网络至少应该采用万兆的网络,且因为二层数据层有额外的封装开销,所有需要将租户网络MTU设置成1600.
总结:
租户网络连接计算节点和云数据中心的出口区域,其上是通过overlay技术标记的租户的虚机之间的数据。租户网络一般会规划多个vlan来减轻广播流量的影响。物理机主机上虚拟机数量比较多,要保证比较良好的网络质量,则服务器的租户一般网卡通过1 x 10 GbE 或者1 x 40 GbE交换机网络互联。
外联网络
外联网络是相对用户来说,用户虚拟机之间的流量完全可以通过用户网络完成传输,但与外界(通常是是互联网,也包括数据中心内部网络)通信,则需要解除原本overlay的封装,并映射公网IP。除此之外还包括一起其他网络服务,如:NAT、VPN、防火墙、LB等。
所以外联网络内的流量包括:用户网络流量、管理流量、外网流量。
Vmware Edge 机架中主要运行的是NSX的edge设备。edge设备一边连接租户网络的分布式路由一边连接外网(WAN)。它代表是传统数据中心的南北向的流量,在网络的边缘提供NAT、VPN、LB、FW等服务。edge组件本身是一台虚拟设备,通过vmware nsx的管理页面来统一管理,但是控制层面和转发层面还是集中在设备上。它的实现方式更像NFV。
总结:
NSX采用软件路由器连接租户网络和外部网络。每个租户都能创建自己专属的软件路由器,并自定义出口的策略。外部网络一般通过1 x 10 GbE 或者1 x 40 GbE交换机网络互联。外部网络北向一般是数据中心的传统交换机和路由器。
存储网络
存储网络主要是用于连接存储节点和计算节点。在云计算数据中心中,存储以分布式的存储为主。
VMware推荐直接在计算节点使用VSAN来直接为租户业务提供持续化存储,也就是说计算节点也同时作为存储节点来使用。那就意味着存储网络是计算节点服务器之间互联的网络,VSAN的最佳实践,推荐主机采用相同或者类似的磁盘配置。并使用单独的网卡用作主机之间的存储流量。
VSAN支持通过千兆网络部署,前提是该网卡仅传输VSAN流量,但是实际使用中极度不推荐。且纯SSD架构中,不支持使用千兆网络。VSAN是以物理主机集群为单位组建的,每个集群有且仅有一个vsan存储集群。且所有需要使用到该存储的主机,必须都处于同一个集群内。即便该主机不提供vsan磁盘组。
所以存储网络至少应该使用使用万兆交换机,服务器通过单个万兆网卡互联(VSAN暂不支持网卡聚合),组建VSAN内部网络。同时VSAN需要通过组播来获取集群变化信息,所以组播也必须支持。
配置重点
存储网络以集群为单位,连接集群内的所有物理主机,存储网络至少需要1 x 10 GbE 或者1 x 40 GbE交换机网络,并且需要组播支持。
openstack整体网络结构
网络上流传的各种opnstack的架构图都是组件模块之间的架构图,基本上会让刚开始了解openstack的人看得一头雾水。Mastering openstack书中有一张物理拓扑,架构非常清晰,如下:
(Mastering Openstack)
通过这个架构图很容易发现,其实两者openstack的物理网络架构和vmware NS的架构非常的类似。同样将流量分为管理网络、外部网络、存储网络、租户网络。(同中将租户网络和存储网络都用红色表示,但实际上是两张网的)。但是细细探究会发现两者还是有较大的差异。
管理网络:(上图中蓝线)
openstack的管理网络流量,同样需要连接所有的主机,其上传输的流量包括:horizon、nova、cinder、keystone、glance、neutron等组件的管理服务。并通过管理网络与计算节点、网络节点上的agent、client通信。
值得一提的是,与vmware不同的是,openstack没有将虚拟机迁移(vmotion)的流量单独出来,而是直接走的管理网络。所以此处会比vmware官方建议的少一类网络,计算节点上也会少一块网卡。
所以管理网络的带宽也会建议上到万兆。
外部网络:(上图中黑线)
同样是用来为租户的私有网络和我们常用的互联网。其上主要运行的是neutron的各种插件,包括L2 agent、L3 agent、DHCP agent、VPN agent、FW agent,以及配套各种软件(或者linux的network namespace网络命名空间,负责具体实现路由、防火墙、VPN等功能)。为租户提供各种诸如NAT、router之类的出口服务。
存储网络:(图中红线)
与VSAN计算和存储节点融合在一起有所不同,openstack架构中,普遍采用单独的存储服务器集群向计算节点服务器提供存储服务,且支持块存储、文件存储、对象存储多种类型。
在网络设计上也会有较大的差异,存储服务器集群内部需要通过高性能网络连接。同时存储服务器与计算节点服务器之间也要通过高带宽网络连接。
实际上,vmware vsan 同样允许计算节点和存储节点处于不同的物理服务器上,但是要求使用vsan存储的主机和提供vsan存储的主机处于同一个集群。但是vsan集群中对于主机数有限制(6.0版本中已经升级到64台),每个集群只能有一个VSAN,且集群中所有的主机都会消耗vsan的license数量。所以在这种特殊的收费方式下,vsan的实际部署都是采用融合方式也就是存储节点和计算节点结合在一起。
租户网络:(图中红线)
neutron的租户网络结构与vmware的类似,同样通过二层的overlay技术来对租户的流量进行标记,实现隔离。但是相比vmware必须采用自家的vDS或有限的几家合作伙伴(cisco、ibm、brocade)以外。Openstack neutron支持的二层设备包括一大票的开源虚拟交换机和商用虚拟交换机的插件,并且不同的二层设备支持的协议和功能的实现都有不同。
- Open vSwitch Plugin最开始nicira主导的开源标准openflow交换机
- Cisco UCS/Nexus Plugin
- Cisco Nexus1000v Plugin较早商用的虚拟交换机,支持包括openstack、vmware在内的多个平台
- Linux Bridge Plugin 老牌linux 网桥技术,很早就已经集成到linux内核
- Modular Layer 2 Plugin
- Nicira Network Virtualization Platform (NVP) Plugin 也就是NSX的插件
除此之外还有Big switch 、brocade、IBM、MidoNet等等非常多的二层插件。不用的插件在二层租户网络的实现上都有非常大的差异。而且也大量使用着各种私有协议。早期openstack版本中,因为不同的插件控制器不同,而控制器只能使用一种。导致网络使用的二层agent也必须为同一种。这一问题在后来版本中加入ML2层后得到了很好的解决。ML2屏蔽了不同插件的不同,而统一对外提供neutron网络功能的API,兼容不同的二层实现方式只需将不同厂家的插件加入到ML2中。ML2中间层能够很好地在一个网络中兼容多种二层的插件。
所以,neutron server成了SDN的控制器,通过openflow、OVS DB的协议兼容了多种二层软硬件设备。
后面的中心也会放在Open vSwitch和Linux Bridge上。
最后,这仅仅是openstack和nsx的标准范例,实际上不同的环境下,所采用的技术有非常大的差异,比如专用的高安全性的机房、物理的overlay实现等。不过总的来说,流量的类型还是逃不出这几大类。