我们已经知道在二层中的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服务这几个功能。

L3的整体架构:

L3的整体架构.png

  • Neutron Server:

    • 接收rest api请求,并将rest api分发到对应的plugin (L3RouterPlugin)
    • 接收plugin agent的RPC请求,分发到对应的plugin (NeutronL3Agent)

上述两类请求处理过程的本质都是数据库数据的CRUD,具体功能实现由对应的agent实现。

  • Neutron L3 Agent:

    • 接收对应的plugin发送的RPC请求,转换为具体的设备操作
    • 当设备本地发生问题,将情况通知给对应的plugin

L3流程.png

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工具)