一. Neutron基本架构
下图展示了Neutron基本的架构及包含的组件。
提供REST API服务,后端使用关系数据库。
neutron-server使用Message Queue与其他Neutron agents进行交换消息,但是这个Message Queue不会用于neutron-server与其他OpenStack组件如nova进行交换消息。
负责连接端口(ports)和设备,使他们处于共享的广播域(broadcast domain)。通常运行在Hypervisor上。
用于配置虚机主机的网络(某些情况可能不需要DHCP agent,例如使用config drive来配置虚拟主机的情况)。
负责连接tenant网络到数据中心,或连接到Internet。在真实的部署环境中,一般都需要多个L3 Agent同时运行。
neutron-server组件由REST API Service,RPC SErvice,Plugin几部分组成。
neutron-server本身是WSGi应用,提供REST API服务,使用9696端口,对用户暴露基本的逻辑资源,如network, subnet, port等,同时负责HTTP request和response的序列化。
使用AMQP, 基于oslo messaging模块,用于agents之间的双向通信
使用Python编写。同时只能使用一个plugin,plugin必须实现V2 APIs,可以提供数据库访问或者扩展支持。例如ML2 Plugin。
Plugin提供了扩展机制,这种机制可以为REST API增加更多的逻辑资源,如router,security group等。Pplugin的扩展点由neutron-server在启动的时候发现和加载。常见的扩展点如Binding,DHCP,L3,Provider,Quota, Security,其他的扩展点如Allowed Addresses, Extra Routes,Metering等。
Monolithic Plugin的特征是实现所有的Core资源。Neutron中包含两种类型Monolithic Plugin,一种是Proxy Plugin,将功能代理到其他实际管理data plane的拓扑的服务器,例如BigSwitch Plugin,另一种是Direct Control Plugin,例如Linux Bridge或Open vSwitch Plugin,实际操作虚机设备。
目前Neutron已经默认使用ML2 Plugin,ML2 Plugin使用户能够同时利用数据中心中各种L2网络技术。ML2 Plugin提供两种Drivers,一种是Typer Driver, 维护网络状态,验证provider network和分配tenant网络,目前,支持的网络类型包括local, float, vlan, gre, vxlan。另一种是Mechanism Driver, 负责使用Type Driver提供的信息,实现具体的网络机制,例如通过Open vSwitch实现VLAN网络。
L2 Agent通常运行在Hypervisor,与neutron-server通过RPC通信,监听并通知设备的变化,创建新的设备来确保网络segment的正确性,应用security groups规则等。例如,OVS Agent,使用Open vSwitch来实现VLAN, GRE,VxLAN来实现网络的隔离。
在介绍L3 Agent之前,Mark介绍了Linux network namespace,这时实现L3 agent的技术基础,特别是overlapping ip,必须依赖namespace来实现。每一个namespace是一个独立的IP Stack,namespace之间通过虚拟设备之间的link来实现。关于linux network namespace的信息可以参照这篇文章:http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/
L3 Agent运行在网络结点,负责连接tenant网络到数据中心,或连接到Internet。如上所述使用namespaces,通过独立的IP Stacks,启用Forward,静态路由和metadata proxy来实现。
DHCP Agent用于配置虚拟主机的网络。基于RPC通知实现(来自neutron-server的notifications),使用dnsmasq实现IP地址分配及域名服务器的设置,通过namespace实现不同网络之间DHCP服务的隔离,支持多个DHCP Agent同时运行以支持Active-Active的HA。
将metadata请求代理到Nova。
除此之外,Mark亦简要介绍了LBaaS,VPNaaS,FWaaS等Neutron的Service Plugin组件。也提到Juno当中正在开发的一个新功能:在创建虚机时,Nova等待Neutron创建虚机设备,设备创建成功后通知nova继续虚机的部署。
总体来说,Mark的介绍非常详尽,不过需要具有一定的网络,OpenStack,Linux背景才能够完全吸收,尽管如此,可以从这个介绍入手去进一步熟悉Neutron的架构细节。
本篇,整理自openstack中国社区: http://www.openstack.cn/?p=1745