一、Neutron概述
Neutron是一个用Python写的分布式软件项目,用来实现OpenStack中的虚拟网络服务,实现软件定义网络。Neutron北向有自己的RESTAPI,中间有自己的业务逻辑层,有自己的DB和进程之间通讯的消息机制。同时Neutron常见的进程包括Neutron-server和Neutron-agent,分布式部署在不同的操作系统。OpenStack发展至今,已经经历了20个版本。虽然版本一直在更替,发展的项目也越来越多,但是Neutron作为OpenStack三大核心之一,它的地位是不会动摇的。只不过当初的Neutron也只是Nova项目的一个模块而已,到F版本正式从中剥离,成为一个正式的项目。从Nova-Network起步,经过Quantum,多年的积累Neutron在网络各个方面都取得了长足的发展。其主要的功能为:(1)支持多租户隔离(2)支持多种网络类型同时使用(3)支持隧道技术(VXLAN、GRE)(4)支持路由转发、SNAT、DNAT技术(5)支持FloatingIP和安全组多平面租户私有网络图中同时有VXLAN和VLAN两种网络,两种网络之间互相隔离。租户A和B各自独占一个网络,并且通过自己的路由器连接到了外部网络。路由器为租户的每个虚拟机提供了FloatIP,完成vm和外网之间的互相访问。
二、Neutron架构及网络模型
1、Neutron架构
Neutron-sever可以理解为类似于nova-api那样的一个专门用来接收API调用的组件,负责将不同的api发送到不同Neutronplugin。Neutron-plugin可以理解为不同网络功能实现的入口,接收server发来的API,向database完成一些注册信息。然后将具体要执行的业务操作和参数通知给对应的agent来执行。Agent就是plugin在设备上的代理,接受相应的plugin通知的业务操作和参数,并转换为具体的命令行操作。总得来说,server负责交互接收请求,plugin操作数据库,agent负责具体的网络创建。
2、Neutron架构之Neutron-Server
(1)Neutron-server的本质是一个PythonWebServerGatewayInterface(WSGI),是一个Web框架。(2)Neutron-server接收两种请求:RESTAPI请求:接收RESTAPI请求,并将RESTAPI分发到对应的Plugin(L3RouterPlugin)。RPC请求:接收Pluginagent请求,分发到对应的Plugin(NeutronL3agent)。
3、Neutron架构之Neutron-Plugin
Neutron-plugin分为Core-plugin和Service-plugin。Core-plugin:ML2负责管理二层网络,ML2主要包括Network、Subnet、Port三类核心资源,对三类资源进行操作的RESTAPI是原生支持的。Service-plugin:实现L3-L7网络,包括Router、Firewall、VPN。
4、Neutron架构之Neutron-Agent
(1)Neutron-agent配置的业务对象是部署在每一个网络节点或者计算节点的网元。(2)网元区分为PNF和VNF:PNF:物理网络功能,指传统的路由器、交换机等硬件设备VNF:虚拟网络功能,通过软件实现的网络功能(二层交换、三层路由等)(3)Neutron-agent三层架构如下图:Neutron-agent架构分为三层,北向为Neutron-server提供RPC接口,供Neutronserver调用,南向通过CLI协议栈对NeutronVNF进行配置。在中间会进行两种模型的转换,从RPC模型转换为CLI模型。
5、Neutron架构之通信原理
(1)Neutron是OpenStack的核心组件,