一、Neutron介绍

    OpenStack网络服务已由Quantum改名为Neutron。Neutron是OpenStack核心项目之一,提供云计算环境下的虚拟网络功能服务。

    Neutron的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于SDN(Software-Defined Networking)实现网络虚拟化的原则,在实现上充分利用了Linux系统上的各种网络相关的技术。

    Neutron网络允许用户创建和管理网络对象,如网络(Net)、子网(Subnet)、端口(Port),这些对象可以被其他OpenStack服务所利用。插件架构模式增强了OpenStack架构和部署的柔韧性,可以适应不同的网络设备和软件。

    Neutron为整个OpenStack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和*** 等。Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。

二、Neutron主要组件

1、neutron-server

    对外提供OpenStack网络API,接收请求,并调用plugin处理请求,它既可以安装在控制节点上也可以安装在网络节点上。

2、OpenStack Networking plug-ins and agents

    插件(plug-ins)处理neutron-server发来的请求,维护OpenStack逻辑网络的状态,并调用agent处理请求。

    代理(agents)处理plugin的请求,负责在network provider上真正实现各种网络功能,比如端口插拔、创建网络或者子网、以及提供IP地址等。

    网络提供商(network provider) 提供网络服务的虚拟或物理网络设备,例如Linux Bridge,Open vSwitch或者其他支持Neutron的物理交换机。

    公共的代理还包括L3(路由器)、DHCP等,都安装在控制节点或者网络节点。

3、Messaging queue

    Neutron Server,Plugin和Agent之间通过Messaging Queue通信和调用。

4、Database 

    存放OpenStack的网络状态信息,包括Network、Subnet、Port、Router等。


这里进行几点说明:

  • plugin解决的是What的问题,即网络要配置成什么样子?而至于如何配置How的工作则交由agent完成。

  • plugin,agent和network provider是配套使用的,比如上例中network provider是linux bridge,那么就得使用linux bridge的plungin和agent;如果network provider换成了OVS或者物理交换机,plugin 和agent也得替换。

  • plugin的一个主要的职责是在数据库中维护Neutron网络的状态信息,这就造成一个问题:所有network provider的plugin都要编写一套非常类似的数据库访问代码。为了解决这个问题,Neutron在H版本实现了一个ML2(Modular Layer 2)plugin,对plugin的功能进行抽象和封装。有了ML2 plugin,各种 network provider无需开发自己的plugin,只需要针对ML2开发相应的driver就可以了,工作量和难度都大大减少。

  • plugin按照功能分为两类:core plugin和service plugin。core plugin维护Neutron的netowrk, subnet和port相关资源的信息,与core plugin对应的agent包括linux bridge, OVS等;service plugin 提供routing, firewall,load balance等服务,也有相应的agent。


三、Neutron Server分层模型

   上图是Neutron Server的分层结构,至上而下依次为:

Core API

    对外提供管理network, subnet和port的RESTful API。

Extension API

    对外提供管理router, load balance, firewall等资源的RESTful API。

Commnon Service

    认证和校验API请求。

Neutron Core

    Neutron server的核心处理程序,通过调用相应的Plugin处理请求。

Core Plugin API

    定义了Core Plgin的抽象功能集合,Neutron Core通过该API调用相应的Core Plgin。

Extension Plugin API

    定义了Service Plgin的抽象功能集合,Neutron Core通过该API调用相应的Service Plgin。

Core Plugin

    实现了Core Plugin API,在数据库中维护network, subnet和port的状态,并负责调用相应的 agent在network provider上执行相关操作,比如创建network。

Service Plugin

    实现了Extension Plugin API,在数据库中维护router, load balance, security group等资源的状态,并负责调用相应的agent在network provider上执行相关操作,比如创建router。

    归纳起来,Neutron Server包括两部分:提供API服务、运行Plugin,即Neutron Server = API + Plugins。

四、ML2 Core Plugin

    Moduler Layer 2()是Neutron在Havana版本实现的一个新的core plugin,用于替代原有的 linux bridge plugin和open vswitch plugin。

1、传统core plugin的问题

  • 无法同时使用多种 network provider。

  • 开发新的 core plugin 工作量大。

2、ML2能解决传统core plugin的问题

    ML2作为新一代的core plugin,提供了一个框架,允许在OpenStack网络中同时使用多种Layer 2 网络技术,不同的节点可以使用不同的网络实现机制。

    ML2不但支持异构部署方案,同时能够与现有的agent无缝集成,以前用的agent不需要变,只需要将Neutron server上的传统core plugin替换为ML2即可。

五、Neutron各组件协同工作

    在我们了解各组件的功能之后,我们有必要先通过一个例子了解这些组件各自的职责以及是如何协同工作。

    以创建一个VLAN100的network为例,假设network provider是linux bridge,流程如下:

  1. Neutron Server接收到创建network的请求,通过Message Queue通知已注册的Linux Bridge Plugin。

  2. Plugin将要创建的network的信息(例如名称、VLAN ID等)保存到数据库中,并通过Message Queue 通知运行在各节点上的Agent。

  3. Agent收到消息后会在节点上的物理网卡(比如 eth2)上创建VLAN设备(比如 eth2.100),并创建 bridge(比如 brqXXX)桥接VLAN设备。

六、项目网络与提供商网络

    用户按需创建项目内互联互通的租户网络;缺省情况下,该项目间的网络是完全隔离的。提供商的网络有OpenStack管理员创建,并直接映射到数据中心的物理网络。

七、OpenStack网络部署架构

    一个标准的OpenStack网络部署架构有四个不同的物理数据中心网络,如下图:

  • 管理网络:用于OpenStack各组件之间的内部通信。

  • 数据网络:用于云部署中虚拟数据之间的通信。

  • 外部网络:公共网络,外部或者互联网可以访问的网络。

  • API网络 :暴露所有的OpenStack APIs,包括OpenStack网络API给项目。

八、Neutron物理部署方案

1、控制节点 + 计算节点

控制节点

    部署的服务包括:neutron server, core plugin 的agent和service plugin的agent。

计算节点

    部署core plugin的agent,负责提供二层网络功能。

    这里有两点需要说明:

    1. core plugin和service plugin已经集成到neutron server,不需要运行独立的plugin服务。
    2. 控制节点和计算节点都需要部署core plugin的agent,因为通过该agent控制节点与计算节点才能建立二层连接。
    3. 可以部署多个控制节点和计算节点。

2、控制节点 + 网络节点 + 计算节点

控制节点 

    部署neutron server服务。

网络节点 

    部署的服务包括:core plugin的agent和service plugin的agent。

计算节点 

    部署core plugin的agent,负责提供二层网络功能。

    这个方案的要点是将所有的 agent 从控制节点分离出来,部署到独立的网络节点上。

  • 控制节点只负责通过neutron server响应API请求。

  • 由独立的网络节点实现数据的交换,路由以及load balance等高级网络服务。

  • 可以通过增加网络节点承担更大的负载。

  • 可以部署多个控制节点、网络节点和计算节点。

  • 该方案特别适合规模较大的OpenStack环境。

参考文档:

          《每天5分钟玩转OpenStack》cloudman编著