
由上图可以看到 Neutron 有以下组件构成:
·
Neutron Server:对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
·
Plugin:处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络的状态,并调用
Agent 处理请求。
·
Agent:处理 Plugin 的请求,负责在 Network Provider 上真正实现各种网络功能。
·
Network Provider:提供网络服务的虚拟或者物理网络设备,比如 Linux
Bridge,OpenVSwitch 或者其他支持 Neutron 的物理交换机。
·
Queue:Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用。
·
Database:存放 OpenStack 的网络状态信息,包括 Network,Subnet,Port,Router 等。
举例说明
为了了解他们之间的关系,我们举个例子进行说明,创建一个 VLAN100 的
Network,Network Provider 是 Linux Bridge:
(1)Neutron Server 接收到创建 Network 的请求,通过 Message Queue(RabbitMQ)通知已
注册的 Linux Bridge Plugin。
(2)Plugin 将要创建的 Network 的信息(例如名称、VLAN ID 等)保存到数据库中,并通
过 Message Queue
通知运行在各节点上的 Agent。
(3 ) Agent 收到消息后会在节点上的物理网卡(比如 eth2)上创建 VLAN 设备(比如
eth2.100),并创建 Bridge(比如 brqXXX)桥接 VLAN 设备。
这里进行几点说明:
(1)Plugin 确定的是网络要配置成什么样子,而至于如何配置,则交由 Agent 完成。
(2)Plugin,Agent 和 Network Provider 是配套使用的,比如上例中 Network Provider 是
Linux Bridge,那么就得使用 Linux Bridge 的 Plugin 和 Agent;如果 Network Provider 换成了
OVS 或者物理交换机,Plugin 和 Agent 也得替换。
(3)Plugin 的一个主要的职责是在数据库中维护 Neutron 网络的状态信息,这就造成一个
问题:所有 Network Provider 的 Plugin 都要编写一套非常类似的数据库访问代码。为了解决这
个问题,Neutron 在 Havana 版本实现了一个 ML2(Modular Layer 2) Plugin,对 Plugin 的功能进
行抽象和封装。有了 ML2 Plugin,各种 Network Provider 无需开发自己的 Plugin,只需要针对
ML2 开发相应的 Driver 就可以了,工作量和难度都大大减少。ML2 会在后面详细讨论。
5
10
15
20
25
评论