HTTPBoot¶
https://bugs.launchpad.net/ironic/+bug/2032380
Ironic 中一个长期以来的特性需求是从单个 HTTP URL 启动节点。然而,这种功能有多种实现方式。
一种实现方式非常类似于虚拟介质,我们要求基板管理控制器 (BMC) 从 URL 启动机器。具体细节取决于供应商,但本质上 UEFI 固件从 URL 启动操作系统。
第二种实现方式与使用 DHCP 的 PXE 启动非常相似,但主要区别在于使用了“HTTPClient”供应商类,而不是“PXEClient”。有趣的是,IPv6 网络启动需要相同形式的 DHCP 响应,即 bootfile-url 的 URL。
需要指出这两点是因为它们都非常相似,并且目前都可以在我们的 CI 中进行测试。此前,我们推迟了 DHCP 路径的实现,因为缺乏在 CI 中测试该路径的能力,但这种情况在 2023 年底已经不再是限制。
同时实现这两种方式相对容易,并且对运营商生态系统非常有益,同时还可以解决 TFTP 存在的安全性和 NAT 不兼容问题。
问题描述¶
基础设施运营商需要可靠且相对安全的手段将引导加载程序和初始工件传送到远程机器。
Ironic 历史上的答案是使用虚拟介质。
但并非所有硬件都支持虚拟介质,并且在启动操作系统后模拟块设备也并非易事。随着 UEFI 和系统的发展,一个有益的方面是,现在基板管理控制器甚至 UEFI 基本固件支持使用 HTTP(s) 从远程系统检索初始引导负载。
提议的变更¶
鉴于其相似性,将对 BMC 导向路径和 DHCP 导向路径的支持作为一项工作来实施是合理的。
实现 DHCP 导向路径的更大好处是,我们可以以最小的努力将此功能扩展到我们的下游用户。
BMC 路径¶
更新 sushy-tools 以支持映射 cals,以使用 HTTP 下次启动 URL 到虚拟介质驱动程序代码。从功能上讲,这很相似,因为似乎无法将从 URL 启动的提示注入 libvirt 中。
更新 sushy 以支持请求从 HTTP URL 启动节点。
创建一个新的
redfish-http-url引导接口,命名为RedfishHTTPBootBootInterface 类,该类基于底层类RedfishVirtualMediaBoot。在此类中,替换_insert_vmedia和_eject_vmedia类。本质上,这些方法将执行必要的调用到 BMC,以执行诸如将BootSourceOverrideEnabled设置为“Once”,BootSourceOverrideMode设置为“UEFI”,BootSourceOverrideTarget设置为“UefiHttp”,最后将HttpBootUri设置为我们希望启动的 ISO 文件等操作。
约束
仅限于 UEFI。
注意
我们可能希望重新设计 RedfishVirtualMediaBoot 类的某些内部结构,以确保我们的实现合理性。
注意
此接口与 BMC 的交互是围绕使用 ISO 镜像作为引导源建模的,而 DHCP 路径是围绕引导加载程序建模的,就像 iPXE 一样。
DHCP 路径¶
确定是否需要修改
neutron-dhcp-agent。创建一个
httpbootBootInterface,该接口基于现有的pxe接口代码库,并通过一个标志连接,该标志由 DHCP 代码库的 PXE 工具调用设置,以向 conductor 发出信号,表明使用 HTTP(S) URL。具体来说,它将采用pxe_utils方法prepare_instance_pxe_config上的一个标志形式,该标志将提供给相同文件中的dhcp_options_for_instance方法调用。可能像pxe_base查找 BootInterface 类上的功能标志一样简单。
注意
我们可能希望创建一个 iPXE 特定的引导接口,这也已经由功能标志处理。分离将能够同时使用 Grub 和 iPXE。
备选方案¶
我们可以限制范围,但实际上没有替代方案,并且两种路径都为 Ironic 的用户提供了大量的功能和好处。
数据模型影响¶
无
状态机影响¶
无
REST API 影响¶
无
客户端 (CLI) 影响¶
“openstack baremetal” CLI¶
无,这完全是服务器端的功能/配置。
“openstacksdk”¶
无,这完全是服务器端的功能/配置。
RPC API 影响¶
无
驱动程序 API 影响¶
预计不会对 Driver API 进行更改,尽管此更改在功能上提出了要创建两个或三个不同的 BootInterface。
Nova 驱动程序影响¶
无
Ramdisk 影响¶
无。引导 ramdisk 将采用现有的代码路径,并在每个驱动程序的情况下进行适度偏差。
安全影响¶
这些功能可以提高部署的整体安全性。具体来说,UEFI 固件可以通过 HTTPS 引导 ISO 或第一阶段引导加载程序。
其他最终用户影响¶
无
可扩展性影响¶
预计没有。
性能影响¶
预计没有。
其他部署者影响¶
有兴趣使用此功能的部署者将拥有扩展的操作和安全能力,这些能力与 Ironic 中已建立的接口和数据模型一致。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Julia (TheJulia) Kreger <juliaashleykreger@gmail.com>
- 其他贡献者
欢迎志愿者!
工作项¶
为 sushy 和 sushy-tools 添加支持,以进行 URL 引导操作。
为 pxe_utils 逻辑添加支持,以生成 URL 引导响应负载,并根据驱动程序功能/能力标志设置该负载。
编写大量文档。
创建 tempest 套件以练习两种引导模式。
依赖项¶
如果我们需要应用 DHCP 服务器配置,类似于 PXE/IPXE,链式加载属性,那么我们需要与 Neutron 开发人员沟通。
测试¶
理想的路径是在 ironic-tempest-plugin 中创建一个单一的集成套件测试,以将节点设置为使用两种接口,并在干净的步骤中切换节点,这将证明接口按我们预期的方式工作。
升级和向后兼容性¶
预计这里没有问题。
文档影响¶
在这些接口的每种情况下,我们可能需要编写比代码更多的文档。