Neutron 的架构是非常开放的,其 plugin 和 agent 模式可以支持多种 network provider,只要遵循一定的设计原则和规范。本节我们将开始讨论这个主题。
先讨论一个简单的场景:在 Neutorn 中使用 linux bridge 这一种 network provider。
根据我们上一节讨论的 Neutron Server 的分层模型,我们需要实现两个东西: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 网络功能。
同样的道理,如果要支持 open vswitch,只需要实现 open vswitch plugin 和 open vswitch agent。
由此可见:Neutron 可以通过开发不同的 plugin 和 agent 支持不同的网络技术。这是一种相当开放的架构。
不过随着支持的 network provider 数量的增加,开发人员发现了两个突出的问题:
- 只能在 OpenStack 中使用一种 core plugin,多种 network provider 无法共存。
- 不同 plugin 之间存在大量重复代码,开发新的 plugin 工作量大。
下一节将深入讨论这两个问题的成因以及解决方案。