我们已经知道在二层中的API资源(network, subnet, port)被称为是neutron的核心资源,并且由Core-plugin(ML2)负责管理。
而从三层到七层的API资源包括L3的Router,防火墙等被称为neutron的扩展资源,由Neutron中的service-plugin来负责管理。对这些资源进行操作的REST API被neutron-server看作是Extension API。
下面以三层为例,三层目前没有像ML2那样单独的插件结构,在未来可能会有ML3插件结构来支持不同的三层网络技术。目前三层提供了基于Linux的静态路由、NAT、基于dnsmasq的DHCP服务这几个功能。
Neutron Server:
上述两类请求处理过程的本质都是数据库数据的CRUD,具体功能实现由对应的agent实现。
Neutron L3 Agent:
graph TD
A[Http Client] --> | Http请求 : 管理L3资源 | B(neutron-server)
B --> | 增删改查 | C(neutron-db)
B --> | 分发请求 | D(L3RouterPlugin)
B --> | 分发请求 | G(other-plugins)
D --> | RPC通知 | E(NeutronL3Agent)
E --> | RPC通知 | D
E --> | 实现具体的L3功能 | F(Linux工具)