跳转到: 导航, 搜索

Neutron/dhcp-flexi-model

范围

当前 DHCP agent 的实现方式是,DHCP 服务由部署和运行 DHCP agent 的同一节点提供。通过代码检查可以发现,该 agent 依赖于以下元素:

  • DHCP 驱动:这是负责控制租户网络的 DHCP 的组件。它用于启用/禁用 DHCP,以及检查网络上的服务状态。目前唯一可用的实现是基于 dnsmasq;因此,DHCP 服务由 DHCP agent 在需要 DHCP 服务的网络出现时生成的 dnsmasq 守护进程提供。
  • RPC 插件:这是负责与 Neutron Server 通信的组件。它用于检索特定网络的配置(例如 CIDR、DHCP 选项、网关等),并反映 DHCP 服务与 neutron 资源的映射(例如逻辑端口)。
  • 设备管理器:这是负责实现(即创建/销毁和(un)插拔)将 DHCP 消息传送到/从租户 VM 以及 dnsmasq 守护进程所需的物理资源的组件。
  • 租约中继:这是负责将租约更新从 DHCP agent 传送到 Neutron 服务器的组件(由于 此 review,该组件可能很快会被移除)。
  • 网络缓存:这是为了提高性能而引入的一个组件,负责存储 DHCP agent 管理的所有网络的内存映射。

总体而言,agent 的主要任务是确保 DHCP 服务(agent 相关的)在 Neutron 基础设施中所需的视图与 agent 当前实现的状态保持同步。此蓝图的目的是改进 DHCP agent 的结构,以支持基于代理的模型,其中 DHCP 服务由外部服务提供给租户 VM。在这种新模型中,agent 只需要与驱动程序、rpc 插件、租约中继和缓存组件协作。agent 实际上不需要与设备管理器交互,这可以看作是 DHCP 驱动程序泄漏出的一个实现细节。正如代码所示,agent 和设备管理器之间的交互几乎没有,此蓝图的建议是将设备管理器在 DHCP 驱动程序内封装起来,以便在配置 DHCP agent 使用不同的 DHCP 驱动程序时,管理员无需人为地将设备管理器的接口驱动程序配置选项设置为 NullDriver。还将进行其他小的重构,以实现更高程度的数据封装和关注点分离。

用例

为了支持在无需配置设备管理器的情况下使用不同的 DHCP 驱动程序。

实现概述

将进行以下重构:

  • DHCP agent 与设备管理器解耦;这是通过将其封装在 DHCP 驱动程序中来实现的;
  • 提供更好的信息隐藏;这是通过移动一些类,并通过将网络命名空间封装为网络属性来实现的;
  • 提高测试覆盖率。

数据模型变更

配置变量

没有添加新的配置变量。

API

没有进行 API 更改。

插件接口

Neutron 插件中没有更改。DHCP 驱动程序和 rpc api 插件的实例化方式略有更改。

CLI 要求

没有更改 CLI。

Horizon 要求

没有更改 GUI。

测试用例

受影响的测试用例是:

  • neutron/tests/unit/test_dhcp_agent.py
  • neutron/tests/unit/test_linux_dhcp.py
  • neutron/tests/unit/test_linux_interface.py
  • neutron/tests/unit/test_agent_netns_cleanup.py