Kea DHCP 后端

https://bugs.launchpad.net/ironic/+bug/2081847

问题描述

DHCP 是在 OpenStack 部署中为实例分配 IP 地址的关键服务。Ironic 和 Neutron 都依赖 dnsmasq 提供 DHCP 服务。然而,dnsmasq 的可靠性越来越低,出现间歇性 DHCP 故障、频繁重启和 dnsmasq 进程崩溃等问题。

请参阅此处关于 dnsmasq 的错误报告:https://bugs.launchpad.net/ironic/+bug/2026757

提议的变更

为 Ironic 和 Neutron 添加新的 Kea DHCP 后端,作为替代的 DHCP 提供程序。这将提供更可靠的 DHCP 选项,易于扩展,同时保持与现有系统的兼容性。

  • 创建一个新的 DHCP 提供程序类,扩展 BaseDHCP 接口。

  • 添加配置选项以启用和配置 Kea DHCP。

  • 添加方法以使用 Kea API 管理 DHCP 选项、租约和端口更新。

  • 确保 DevStack 支持 Kea

  • 更新文档,涵盖 Kea DHCP 的添加、设置和使用。

Ironic 将通过基于 HTTP 的 API 与 Kea DHCP 服务器交互 [1]

  • config-get, config-set:管理 Kea 配置

  • reservation-get:检索将通过 Ironic/Neutron 查询共享的主机保留数据库外部处理的主机保留。动态保留更新(reservation-addreservation-del)需要高级 ISC 订阅,并且在本实现中不受支持 [3]

  • lease4-get, lease6-get:检索租约信息

  • subnet4-add, subnet6-add:添加新的子网

  • statistic-get:监控 DHCP 服务器统计信息

Kea DHCP 后端可以添加带有或不带有代理层的形式。两种方法都将使用 Kea 的基于 HTTP 的 API,但其架构以及 Ironic 与 Kea DHCP 服务器的交互方式不同。

代理方法具有更多的活动部件和复杂性,但对于大型部署具有更好的可扩展性、Kea 实例的本地管理以及减少到中央 Ironic 服务的网络流量。

  • 流程:Ironic → 驱动程序 → 代理 → Kea 服务器

  • Kea DHCP 代理部署在每个 DHCP 服务器节点上,并管理本地 Kea 配置并处理 Ironic 和 Kea 之间的通信。

  • Ironic DHCP 驱动程序实现 Ironic DHCP 接口,并与 Kea DHCP 代理通信。

  • Ironic 将 DHCP 配置发送到 Ironic DHCP 驱动程序,后者将其分发到 Kea 代理,以将配置应用于本地 Kea 服务器。

  • 对于租约管理,代理监控本地 Kea 租约更改,并将更改报告回 Ironic DHCP 驱动程序。

无代理方法将具有更简单的架构,可能更容易实现和维护,并具有直接控制权,但可能无法很好地扩展,增加到 Kea 服务器的网络流量,甚至可能对大规模操作中的 Ironic 性能产生影响。

  • 流程:Ironic 驱动程序将配置转换为 Kea API 调用并直接更改 Kea 服务器。

    直接应用到 Kea 服务器。

  • Ironic 管理所有 Kea 服务器,通过直接 Kea API,没有代理层。

  • Ironic 驱动程序将配置转换为 Kea API 调用并直接更改 Kea 服务器。

  • 对于租约管理,可能需要定期轮询 Kea 服务器以获取租约更新,或者使用 Webhook 机制。

备选方案

  • 找到一种改进现有的 Dnsmasq 实现的方法。值得注意的是,dnsmasq 本质上存在局限性,因为它实际上是为小型计算机网络设计的,尽管 Ironic 一直在使用它,因此解决这些问题可能需要大量的重新设计。截至本文档编写时,它也是一个单一维护者 OSS 项目。作为单个维护者项目,它会导致长时间的非活动期,这会增加 OpenStack 等项目的消费者风险。

  • 使用与 Kea 不同的、同样积极维护的 DHCP 提供程序,提供 Kea 提供的可靠性、灵活性和集成,或更好。

  • 开发一个全新的、定制的 DHCP 服务器,这将是一项艰巨的任务,并会增加额外的长期技术债务。

数据模型影响

不需要更改 Ironic 的数据模型。

状态机影响

不需要更改状态机。

REST API 影响

不需要更改 REST API。

客户端 (CLI) 影响

不需要更改 python-ironicclient。

RPC API 影响

不需要更改 RPC API。

驱动程序 API 影响

将添加一个新的 DHCP 提供程序类,但它不应影响现有的驱动程序。

Nova 驱动程序影响

Ramdisk 影响

不需要更改 ironic-python-agent 或 ramdisk。

安全影响

添加 Kea DHCP 后端不会带来预期的安全权衡。增加操作员选项通过提供更多选项来限制总体风险,这应该是一种净安全收益。

如果将来发生此类事件,其积极的开发很可能会确保及时的安全更新。

其他最终用户影响

可扩展性影响

Kea DHCP 专为比 dnsmasq 更好的可扩展性而设计,这可以提高性能,尤其是在大型部署中。

性能影响

Kea DHCP 可能比 dnsmasq 具有更好的性能,尤其是在具有数千台机器的大型部署中。

其他部署者影响

部署者需要在与 Ironic 相同的环境中安装和配置 Kea DHCP 服务器,可能与 dnsmasq 类似,但具有 Kea 特定的可配置项,例如网络接口、IP 地址范围和租约时间。

开发人员影响

实现

负责人

主要负责人

Afonne-CID (cid)。

其他贡献者

Jay Faulkner (JayF)。

工作项

  • 编写一个扩展 BaseDHCP 接口的 Kea DHCP 后端。

  • 添加单元测试和 DevStack 支持,以使用 Kea 运行。

  • 配置至少一个 CI 作业以使用 Kea DHCP。

  • 为新的 Kea DHCP 后端添加 Bifrost 支持。

  • 为 Kea DHCP 实现未管理检查支持。

  • 更新文档。

依赖项

  • Kea DHCP 服务器 [2]

测试

添加测试以验证完整的 DevStack 支持、新的 Tempest 测试,这些测试专门用于 Kea DHCP 功能,以及新的单元测试:* 通过 Kea API 检索租约信息。* 确保 Kea 正确从主机保留数据库读取。

升级和向后兼容性

现有的 dnsmasq 支持将保持不变。

文档影响

  • 关于 Kea 功能以及它与 dnsmasq 的不同之处的完整文档,并交叉引用到外部 Kea 资源。

  • 文档应记录配置选项和从 dnsmasq 切换到 Kea 的步骤,包括配置 Kea 以使用只读主机保留数据库以及如何设置 Ironic/Neutron 来管理此数据库。

  • 安装、配置和架构文档应将 Kea 作为可配置选项呈现,并提供清晰的说明,说明用户如何选择 Kea 和 dnsmasq。

  • 需要更新 API 文档以反映对现有方法的任何更改以及它们现在与 Kea 相比与 dnsmasq 的交互方式。

  • 当前文档中可能引用 dnsmasq 作为默认或唯一 DHCP 提供程序的章节需要更新,以反映 Kea 现在也是受支持的后端。

参考资料