本文将讲解OpenStack核心组件之一的Neutron组件。但愿阅读本文前,建议初学者提早认知云计算、Linux操做系统、服务器群集以及OpenStack概念以及架构图。本文主要是为了自行整理有关OpenStack的相关知识理论,也是同读者分享本身对OpenStack中Neutron下面的浅解。linux
友情连接:下面的三篇文章对于初学者或多或少能够帮你在宏观上了解云计算以及OpenStack。数据库
云计算浅谈安全
OpenStack概念以及核心组件概述服务器
Neutron的前身是Quantum,Quantum英文为量子,Neutron英文翻译为中子,虽然笔者不知道这样来命名项目的具体缘由,但从直观的感受上就会以为这个玩意不简单哈!架构
其实最初OpenStack并无将网络组件独立出来,为之成立单独的一个核心项目,最初是一个叫作Nova-network的网络模型,这种模型很是简单,就是一种单一的平面网络,以下图所示:负载均衡
但若熟悉网络知识就会发这种模式存在很大的缺点,好比:框架
因此技术须要不断更新发展,相关的技术大佬通过思索,尝试,最后制定出一种方案——将网络服务独立出来,随后不断优化成立了Neutron项目。而Neutron的网络模型也发生了很大改变,后面会深刻介绍。这里主要是体会一下技术发展的魅力,了解一下Neutron的前身与发展。分布式
Neutron是OpenStack核心的项目之一,主要是提供云计算环境下的网络服务。在OpenStack中,Neutron自己采用的也是分布式架构,即由多个服务或者说功能模块来共同对外提供网络服务。Neutron的设计初衷是实现"网络即服务",即NaaS。在设计上遵循的是基于SDN(软件定义网络)实现网络虚拟化的原则,而在其实现上采用的是linux系统的相关网络技术。ide
在OpenStack中,Neutron网络服务具体的做用是容许用户建立和管理网络对象,这里的对象指的就是网络、子网、端口等,而且这些对象能够被其余的OpenStack服务使用。
而且,Neutron为整个OpenStack环境提供网络的支持,涵盖了二层交换、三层路由转发、负载均衡、防火墙和***等网络通讯技术。
此外,Neutron项目中很是值得一提的就是插件,插件的存在乎味着OpenStack架构的可扩展性很是强,而且能够适应不一样的网络设备,稳定工做。其中ML2算是典型表明,以后的文章也会进行介绍。
在上述给出连接的第三篇文章中,介绍了由OpenStack官网给出的关于OpenStack概念架构图以及逻辑架构图。若是细心认真看这个架构图的话,你会发现逻辑架构图中都有OpenStack中Neutron组件。笔者将之截取出来,以下图所示:
那么如何梳理理解上述的逻辑架构图?
其实,这和咱们生活中同样,熟悉一个事物,或者一我的,你得先初步认识,而后有所了解,最终理解熟悉,这在咱们学习中也是同样的道理。因此,先来认知理解框架中的功能模块的概念和做用。
该模块是一个进程,并且是Neutron惟一主要的服务进程,通常运行于控制节点,提供相应的API(这类API通常基于REST风格原则)做为访问Neutron的入口。
neutron 插件,由core plugins(核心插件)和service plugins(服务插件)组成。担任相似接收请求派发任务的角色。
neutron代理模块,负责接收消息而且执行任务的模块,与上述的neutron plugin对应,扮演的是真正处理工做的角色。
neutron网络提供者,主要做用是提供OpenStack网络服务的虚拟机或者物理网络的设备,例如Linux Bridge、OVS(Open vSwitch)(这二者也是重点)或者其余能够正常Neutron的物理交换机。
Queue——队列,这里是消息队列——MQ,用于Neutron各个模块之间相互的通讯,通常默认的是基于Erlang语言的RabbitMQ来实现协调通讯问题的。
这里你们都知道是数据库,不过这是存放网络信息的数据库,默认使用的是Mariadb数据库。
好了,看完上述的内容,想必对架构中的各类模块有所了解了。那么如何将这些模块联系起来呢?
这就须要来说述一下该架构工做时的过程,笔者将这个过程称做"看图说话"。
这里能够经过一个例子结合上图来说述该架构的工做原理以及整个过程。
假设如今要建立一个虚拟网络。整个流程是这样的:
(1)Neutron-server 收到要建立虚拟网络的请求,经过消息队列通知对应的插件,(先不考虑ML2)假设网络提供者(neutron provider)为OVS(Open vSwitch),那么这里的插件对应的就是OVS的插件;
(2)OVS插件收到消息后,将须要建立的虚拟网络的信息(名称、ID值等)保存到Neutron database中并经过消息队列通知运行在各个节点上的agent;
(3)agent,即代理收到消息后会在节点上建立对应设备,例如vlan设备。
本小节将详细谈一下Neutron-server服务。下图为Neutron-server的分层结构。
Neutron-server的分层结构如上图所示,自上而下分别是:
其中,核心插件主要是在数据库中维护network、subnet和port的状态,并负责调用相应的agent在network provider上执行相关操做,好比建立network;服务插件主要是在数据库中维护router、load balance、security group等资源的状态,并负责调用相应的agent在network provider上执行相关操做,好比建立router。
数据库,用于存放对应的数据信息。
其实归根结底,Neutron-server说白了就能够理解为是API和Plugins的组合,即提供API服务和运行插件两大任务。
其实Neutron-server响应服务请求的流程并不复杂,主要能够分为如下几个步骤:
假设Neutron-server收到客户端发送的建立网络请求的案例:
一、首先,根据用户须要建立的对象调用对应的API(核心仍是扩展API);
二、对应的API响应以后将请求下发,此时须要经过Common Service进行认证校验以及受权;
三、认证和受权等操做都经过以后,交付给Neutron Core核心处理程序经过调用对应的插件类型处理请求。
Neutron管理的网络资源包括network、subnet和port,下面依次介绍。
network是一个隔离的二层广播域。Neutron支持多种类型的network,包括local、fla、VLAN、VxLAN和GRE以及Geneve。
local网络与其余网络和节点隔离。local网络中的instance只能与位于同一节点上同一网络的instance通讯,local网络主要用于单机测试。
特色:
flat网络是无vlan tagging的网络。flat网络中的instance能与位于同一网络的instance通讯,而且能够跨多个节点。
vlan网络是具备802.1q tagging的网络。vlan是一个二层的广播域,同一vlan中的instance能够通讯,不一样vlan只能经过router通讯。vlan网络能够跨节点,是应用最普遍的网络类型。
vxlan是基于隧道技术的overlay网络。vxlan网络经过惟一的segmentation ID(也叫VNI)与其余vxlan网络区分。vxlan中数据包会经过VNI封装成UPD包进行传输。由于二层的包经过封装在三层传输,可以克服vlan和物理网络基础设施的限制。
vxlan和vlan相比的优点:
gre是与vxlan相似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。
不一样network之间在二层上是隔离的。
subnet是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每一个subnet须要定义IP地址的范围和掩码。
port能够看做虚拟交换机上的一个端口。port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF(Virtual Interface)绑定到port时,port会将MAC和IP分配给VIF。
port与subnet是1对多关系。一个port必须属于某个subnet;一个subnet能够有多个port。
前文第一小节中提到有关Neutron的主要做用,的确,Neutron为整个OpenStack环境提供着网络支持,包括二层交换、三层路由、负载均衡、防火墙等等。而且Neutron提供了对应的框架,使得用户经过配置能够实现这些功能。下面简述这些功能。
Neutron支持多种虚拟交换机,包括Linux原生的Linux Bridge和Open vSwitch。
Open vSwitch(OVS)是一个开源的虚拟交换机,它支持标准的管理接口和协议。
利用Linux Bridge和OVS,Neutron除了能够建立传统的VLAN网络,还能够建立基于隧道技术的Overlay网络,好比VxLAN和GRE(Linux Bridge目前只支持VxLAN)。
实例能够配置不一样网段的IP,Neutron的VRouter(虚拟路由器)实现实例可跨网段通讯。通常能够经过IP forwarding、iptables等技术来实现路由和NAT。
Openstack在Grizzly版本第一次引入了Load-Balancing-as-a-Service(LBaaS),提供了将负载分发到多个实例的能力。LBaaS支持多种负载均衡产品和方案,不一样地实现以Plugin的形式集成到Neutron,目前默认的Plugin是HAProxy(我的理解是属于七层负载吧)。
Neutron经过下面两种方式来保障instance和网络的安全性。
本文主要介绍OpenStack中核心子项目之一的Neutron,Neutron项目原理内容涉及很是广,本文先针对其基础部分进行讲述,从总体上了解Neutron,对于neutron provider、neutron plugins(重点是ML2)、网络原理、相关代理(L3)等深层原理(例如Linux中的网络虚拟化,名称空间等专业词汇的理解)后面会继续更新。
本文主要讲述了其基本概念做用、核心组件介绍(着重讲述Neutron-server的响应过程)、Neutron的架构讲解以及Neutron提供的主要功能和网络类型(记住前面4种!)
谢谢阅读!