2023.2 系列 (9.5.0 - 9.7.x) 发布说明¶
2023.2-eol¶
错误修复¶
如果 RAID 阵列的卷名未指定,则使用 md_device 作为默认卷名会导致“不兼容 POSIX”错误。 此问题已通过仅使用 md_device 的最后一部分来解决。 修复 https://bugs.launchpad.net/ironic-python-agent/+bug/2073406
防止在 erase_devices_express 中出现 UnboundLocalError,例如,在磁盘故障时。
9.7.2¶
升级说明¶
实现自定义
HardwareManagers的部署者必须审核他们的代码,查找 qemu-img 和相关方法的非安全用法。
安全问题¶
Ironic-Python-Agent 现在会检查提供的任何镜像格式值与镜像文件的检测格式是否匹配,如果值不匹配,将阻止部署。
之前配置错误的镜像,尽管处于另一种格式,但在某些非默认配置中,如果需要,可能被错误地转换。 Ironic-Python-Agent 现在绝不会对元数据指示为原始格式的镜像执行任何转换。
Ironic-Python-Agent *始终* 会在对任何非原始用户镜像内容进行安全检查后,再运行基于 qemu 的任何实用程序。 这用于识别镜像的格式并验证镜像的整体安全性。 任何具有未知或不安全功能用途的镜像都会被明确拒绝。 可以在 IPA 和 Ironic 中通过将
[conductor]disable_deep_image_inspection设置为True来禁用此功能,以用于 Ironic 部署。 镜像检查是缓解 bug 2071740 中跟踪的 CVE-2024-44082 的主要方法。 操作员可能希望在升级他们的 Ironic-Python-Agent 之前,在 Ironic conductor 上设置[conductor]conductor_always_validates_images以缓解该问题。
Ironic-Python-Agent 现在明确执行允许的镜像类型列表,默认值为“raw”和“qcow2”。 其他镜像类型可能有效,但未明确支持,必须启用。 可以通过为所有 Ironic 服务设置
[conductor]permitted_image_formats来修改此设置。
错误修复¶
修复了一个问题,即操作系统挂载的配置驱动器卷可能保持挂载状态并导致锁定,这可能会与
rebuild等操作冲突。 代理现在始终确保 Glean 和 Cloud-init 使用的文件夹未挂载。
修复了与执行
qemu-img工具相关的镜像处理中的多个问题。 当使用此工具转换不安全的镜像时,恶意用户可以在 Ironic-Python-Agent 部署或转换镜像时提取节点信息。 Ironic-Python-Agent 现在检查所有非原始镜像的安全性,并且绝不会在原始镜像上运行基于 qemu 的工具。 此修复被跟踪为 CVE-2024-44082 和 bug 2071740。
元数据指示“raw”磁盘格式的镜像可能从另一种格式透明地转换。 现在,这些镜像将精确地镜像到磁盘,而不会进行任何修改。
修复了 bug 2066308,即 Ironic Python Agent 会在硬件管理器插件上多次调用 evaluate_hardware_support。 扫描硬件和磁盘非常耗时,并导致性能不佳的节点超时。
9.7.1¶
错误修复¶
修复了一个下载失败的情况,即当校验和验证失败时,下载不会被重试。 现在,代理程序将校验和活动包含在文件下载操作中,并且当校验和失败时,将根据现有的下载重试逻辑自动重试下载。 这主要是响应了底层似乎存在间歇性传输故障的情况,而我们无法以其他方式检测到这些故障。
修复了在将检查数据发送回 ironic-inspector 或 ironic 时缺少
Content-Type标头的问题。 虽然 ironic-inspector 可以容忍缺少标头,但它可能会导致新的检查实现出现问题。
代理程序在 Ironic 部署中查找自身时,默认超时值已从 300 秒延长至 600 秒。 这是为了为负载较重的 Ironic 部署提供更好的稳定性,这些部署可能无法处理新的请求。 当 Ironic 的后端数据库为 SQLite 时,由于数据库有限的写入并发性,尤其如此。
修复了在赋值之前引用 raid_device 变量的问题,已替换为 blk 变量。
现在,在 HTTP 409(冲突)时重试检查,这可能会由 Ironic 中的新实现返回。
修复了将数据发布到 inspector 以在 50X 错误中重试的问题。
修复了 multipathd 服务启动/发现过程中的错误处理。 IPA 处理两种场景:multipathd 服务已经启动的场景,以及服务尚未启动的场景。 在第二种场景中,IPA 会尝试启动该服务。 IPA 不会预先检查 multipathd 是否已经运行,即使它已经运行,IPA 也会启动 multipathd 服务并期望返回 0 错误代码。 已经注意到,在某些 Linux 发行版和 multipathd 版本的组合下,当 IPA 尝试启动已经运行的 multipathd 实例时,错误代码可能不是 0。 当返回的错误代码不是 0 时,将抛出异常,这将导致 multipath 设备发现过早终止,如果选择的根设备是 multipath 设备,则 IPA 将无法进行配置。 此修复程序丢弃了 multipathd 启动过程返回的非 0 错误代码引起的异常。 如果 multipath 服务存在真正的问题,将在执行实际的 multipath 设备列出命令 (multipath -ll) 时捕获该问题。
修复了在软件 RAID 上使用 RAIDed ESP 分区重建实例时的问题。
9.7.0¶
新特性¶
添加了一个新的
service扩展,它促进了 Ironic 检索服务步骤列表的命令处理。
在基础 HardwareManager 中添加了一个新的基础方法
get_service_steps,其工作方式与get_clean_steps和get_deploy_steps相同。 硬件管理器可以扩展这些方法,以允许它们指示允许哪些步骤。
将合理的部署/清理步骤扩展为也嵌入在 Ironic 代理中的服务步骤。 例如,CPU、网络和内存的 burnin 步骤可用作服务步骤,但磁盘 burnin 步骤不可用,因为这可能会导致现有磁盘内容损坏。
错误修复¶
修复了一个部署实例可能无法访问配置驱动的故障情况,该情况可能在部署后发生。当块设备仅支持 4KB IO 交互时,可能会出现此问题。在使用 4KB 块 IO 大小时,Linux 中的 ISO9660 文件系统驱动程序将无法使用,因为它基于 2KB 块建模。现在,当无法挂载提供的配置驱动时,我们将尝试验证并使用 FAT 文件系统重建配置驱动。操作员可以使用
[DEFAULT]config_drive_rebuild选项强制代理使用 FAT 文件系统写入配置驱动。
修复了或至少减轻了运行中的 Ironic agent 在节点被锁定时,对 Ironic 部署进行大量查找请求的情况。特别是,这是因为查找还会驱动 agent token 的生成,这需要 conductor 分配一个 worker,生成 token,并将结果返回给 API 客户端。Ironic 的重试逻辑现在将等待最多
60秒,如果收到 HTTP Conflict (409) 消息,agent 将自动暂停查找操作 30 秒,而不是继续尝试查找,这可能会不必要地给 Ironic 部署增加更多工作。