一、NEUTRON架构
OpenStack的网络服务neutron是整个OpenStack中最复杂的一个部分,它的基本架构是一个中心服务(neutron-server)外加各种plugins和agents,使用不同的network provider(网络提供者,如Linux Bridge、OpenvSwitch(ovs)等)来实现各种网络架构,在这之上为实例提供网络、子网、端口和防火墙等网络资源。
下图是neutron的基本架构
可见,neutron采用分布式架构,由多个组件(子服务)共同对外提供网络服务。
1. NEUTRON SERVER
对外提供OpenStack网络API,接收请求,并调用Plugin处理请求。
下图是neutron server的结构图
neutron server包括两部分
1.提供API服务;
2.调用Plugins。
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 Plugin的抽象功能集合,Neutron Core通过该API调用相应的Core Plugin。 Extension Plugin API 定义了Service Plugin的抽象功能集合,Neutron Core通过该API调用相应的Service Plugin。 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。 plugin 处理neutron server发来的请求,维护OpenStack逻辑网络的状态,并调用Agent处理请求,实现“提供什么网络(what)”的功能。 plugin按照功能分为两类: core plugin和service plugin。
core plugin:维护neutron的netowrk, subnet和port相关资源的信息,与core plugin对应的agent包括linux bridge, OVS等; service plugin:提供dhcp、routing, firewall, load balance等服务,也有相应的agent。 agent 处理Plugin的请求,负责在network provider上真正实现各种网络功能,实现“怎么提供网络(how)”的功能。 network provider 提供网络服务的虚拟或物理网络设备,例如Linux Bridge,Open vSwitch等。 Queue Neutron Server,Plugin和Agent之间通过Messaging Queue消息队列通信和调用。 Database 存放OpenStack的网络状态信息,包括Network, Subnet, Port, Router等。
二、NEUTRON的工作原理
下一节要在neutron中使用linux bridge这一种network provider来提供网络服务,那么,它是怎样实现的呢?
根据上面neutron server的分层模型,要想使用这种network provider,需要安装两个东西:linux bridge core plugin和linux bridge agent。
linux bridge core plugin:与neutron server一起运行,实现了core plugin API。负责维护数据库信息,通知linux bridge agent实现具体的网络功能。
linux bridge agent:接收来自plugin的请求,通过配置主机上的linux bridge实现neutron网络功能。通常位于计算节点或者网络节点。
同样道理,如果使用的network provider是open vSwitch,那么只需要安装 open vswitch plugin 和 open vswitch agent就行了。
可见,plugin,agent和network provider是配套使用的,比如上面的network provider是linux bridge,那么就得使用linux bridge的plugin和agent;如果network provider换成了OVS或者物理交换机,plugin和agent也得替换。
这就造成一个问题:所有network provider的plugin都要编写一套非常类似的数据库访问代码。
为了解决这个问题,neutron实现了一个叫ML2(Modular Layer 2)plugin,对plugin的功能进行抽象和封装。
有了ML2 plugin,各种 network provider 无需开发自己的plugin,只需要针对 ML2 开发相应的driver就可以了。
三、ML2(MODULAR LAYER 2)PLUGIN
Moduler Layer 2(ML2)是Neutron 在Havana 版本(H版本)实现的一个core plugin,用于替代原有的linux bridge plugin和open vswitch plugin,并一直沿用至今。
ML2 提供了一个框架,允许在OpenStack网络中同时使用多种Layer 2网络技术,不同的节点可以使用不同的网络实现机制。
采用ML2 plugin后,可以在不同节点上分别部署linux bridge agent, open vswitch agent, hyper-v agent以及其他第三方agent。
ML2 对二层网络进行抽象和建模,引入了type driver和mechansim driver。这两类driver解耦了 Neutron 所支持的网络类型(type)与访问这些网络类型的机制(mechanism),其结果就是使得ML2具有非常好的弹性,易于扩展,能够灵活支持多种type和 mechanism。
type driver Neutron 支持的每一种网络类型都有一个对应的ML2 type driver。 type driver 负责维护网络类型的状态,执行验证,创建网络等。 ML2 支持的网络类型包括 local, flat, vlan, vxlan 和 gre。 Mechansim Driver Neutron 支持的每一种网络机制都有一个对应的ML2 mechansim driver。 mechanism driver负责获取由type driver维护的网络状态。 mechanism driver 有三种类型: Agent-based:包括linux bridge, open vswitch等。 Controller-based:包括OpenDaylight, VMWare NSX等。 基于物理交换机:包括 Cisco Nexus, Arista, Mellanox 等。 比如要创建一个type driver为 vlan,mechansim driver为 linux bridge的network vlan100,那么: vlan type driver会确保将vlan100的信息保存到neutron 数据库中,包括network 的名称,vlan ID等;linux bridge mechanism driver会确保节点上的linux brige agent在物理网卡上创建ID为100的vlan设备和bridge设备,并将两者进行桥接。 linux bridge和open vswitch的 ML2 mechanism driver的作用是配置各节点上的虚拟交换机。
四、SERVICE PLUGIN/AGENT
Service Plugin及其 Agent提供更丰富的扩展功能,包括dhcp、路由,load balance,firewall等
**DHCP** dhcp agent通过dnsmasq为实例提供dhcp服务。 **Routing** l3 agent可以为 project(租户)创建router,提供neutron subnet之间的路由服务。路由功能默认通过IPtables实现。 **Firewall** l3 agent 可以在router上配置防火墙策略,提供网络安全防护。 **Security Group** 另一个与安全相关的功能是Security Group,也是通过IPtables实现。 Firewall与Security Group的区别在于: Firewall 安全策略位于router,保护的是某个project 的所有network。 Security Group 安全策略位于实例,保护的是单个实例。 **Load Balance** neutron默认通过HAProxy为project中的多个instance提供load balance服务。
五、NEUTRON管理的网络资源
neutron可以创建、删除和修改下面几种网络资源
**network** network是一个隔离的二层广播域。neutron支持多种类型的network,包括local, flat, VLAN, VxLAN和GRE。 **subnet** subnet是一个IPv4或者IPv6地址段。实例的IP地址从subnet中分配。每个subnet需要定义IP地址的范围和掩码。 **port** port可以看做虚拟交换机上的一个端口。port上定义了MAC地址和IP地址,当实例的虚拟网卡连接到端口时,port会把ip地址和mac地址分配给虚拟网卡。 在OpenStack中,一个项目(租户)可以有多个network,一个network可以有多个subnet,一个subnet可以有多个port,一个port属于一个实例,一个实例可以连接多个port(多网卡)。
六、NEUTRON和NOVA的交互
网络服务NEUTRON和计算服务NOVA是通过NEUTRON-METADATA-AGENT来交互的。
实例在启动时需要访问NOVA-METADATA-API服务获取METADATA和USERDATA,这些DATA是该实例的定制化信息,比如 HOSTNAME,IP,PUBLIC KEY等。
通过NEUTRON-METADATA-AGENT,能够通过网络访问到NOVA-METADATA-API 服务,从而获得实例的定制化信息。该AGENT让实例能够通过DHCP-AGENT或者L3-AGENT与NOVA-METADATA-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:控制节点 + 网络节点 + 计算节点
在这个部署方案中,OpenStack 由控制节点,网络节点和计算节点组成。
控制节点
部署neutron server服务。
网络节点
部署的服务包括:core plugin的agent和service plugin的agent。
计算节点
部署core plugin的agent,负责提供二层网络功能。
这个方案的要点是将所有的agent从控制节点分离出来,部署到独立的网络节点上。
1.控制节点只负责通过NEUTRON SERVER响应API请求。
2.由独立的网络节点实现数据的交换,路由以及LOAD BALANCE等高级网络服务。
3.可以通过增加网络节点承担更大的负载。
4.可以部署多个控制节点、网络节点和计算节点。
该方案特别适合规模较大的OpenStack环境。
八、网络服务NEUTRON小结