通常Neutron环境由运行在一个或多个节点上的多个服务service和代理agent组成(尽管某些特殊环境可能不需要任何代理)。每个服务都提供了一些网络或API接口。特别感兴趣的有以下几个:
-
neutron-server. 提供API端点以及数据库访问点。它通常在称为控制器Controller的节点上运行。
-
Layer2 agent代理. 通过Open vSwitch, Linuxbridge或其它厂商的特殊技术为project网络提供分段和隔离的功能。 L2 agent 代理应在每个需要提供连接和保护功能的虚拟接口的节点上运行(通常是计算节点和网络节点)。
-
Layer3 agent. 运行在网络节点上,并提供东西向East-West和南北向North-South路由功能,外加一些先进服务功能,如FWaaS或VPNaaS。
在本文档中,我们将运行在每个节点的所有服务service、服务器server和代理agent统称为服务"service"。
入口点 Entry points
服务的入口点在setup.cfg文件的"console_scripts"段定义。这些入口点通常应该指向位于neutron/cmd/…路径下的main()函数。
注意:一些现存的vendor/plugin代理仍然在其它位置维护入口点。鼓励负责这些代理的开发人员应用以上的规则指南。
与 Eventlet 交互
Neutron广泛利用eventlet库为其服务提供异步的并发模型。为了正确使用它,以下内容应该记住。
如果服务使用了eventlet库,那么它不应该直接调用eventlet.monkey_patch(),而是在neutron/cmd/eventlet/…下维护其入口点main()。如果是这样,标准Python库将为入口点上的服务自动修补(monkey修补是在 python package file 中完成的。
注意:入口点’main()'函数可能只是间接位置,其指向一个位于他处的真正调用,类似于参考服务(referrence service)中的实现。如参考服务:DHCP、L3和neutron-server。
有关代码树建立背后的基本原理信息,请参见文档 the corresponding cross-project spec。
连接到数据库 Connecting to the Database
只有neutron-server连接到neutron数据库。代理可能永远不会直连到数据库,因为这会破坏滚动升级能力。
配置选项 Configuration Options
除了数据库访问之外,配置选项也在neutron-server和agent之间分隔。服务和代理都可以加载neutron.conf文件,因为这个文件包含有内部Neutron RPCs的oslo.messaging配置,也可能包含特定于主机的配置,如文件路径。此外,neutron.conf文件包含数据库、Keystone、Nova凭据和仅供neutron-server使用的端点。
此外,neutron-server还可以加载插件特定的配置文件。agent不应该这样做。因为插件配置主要是站点范围的选项,而且插件为Neutron提供持久层,agent
应被指示为通过RPC作用于这些值。
每个代理都可以有自己的配置文件。这个文件应该在主文件neutron.conf之后加载,所有代理配置具有高优先级。agent特定的配置文件可能包含因Neutron部署中因主机不同而不相同的配置,如对于L3代理的external_network_bridge配置。如果任何代理需要访问超出Neutron RPC的外部服务,这样的端点应定义在agent特定配置文件中(如,metadata agent的nova元数据)。