2024.1 系列 (23.1.0 - 24.1.x) 发行说明

24.1.5

错误修复

  • 在 redfish inspector 中,使用条件来控制在检查期间是否更新端口的 pxe_enabled 字段。 [inspector]update_pxe_enabled 用于控制此行为,使其与其他检查接口的行为一致。 此配置的默认值为 True。

  • 修复了 agent 启动时的问题,由于瞬态网络问题导致第一次 agent heartbeat 交互的工作流失败,使 Agent 和 Ironic 处于节点无法部署并继续在每次额外的 heartbeat 操作上记录错误的状态。 调整了检查 agent 状态的逻辑,以忽略 agent 记录的重试操作。 有关此问题的更多信息,请参见 bug 2110698

24.1.4

安全问题

  • 修复了 OSSA-2025-001,其中 Ironic 在用作镜像源时,没有正确过滤 file:// 路径。 这将允许 conductor 可以访问的任何文件被用作镜像来尝试部署。

    添加了 CONF.conductor.file_url_allowed_paths,一个允许列表配置,默认值为 /var/lib/ironic/shared/html/opt/cache/files/vagrant/templates,允许操作员进一步限制 conductor 在提供 file:// URL 时获取镜像的位置。 此默认值是根据 Ironic 下游项目(包括 Metal3、Bifrost 和 OpenShift)的已知用法选择的。 这些默认值可能会在以后更改为更严格。 鼓励使用 file:// URL 的操作员即使当前默认值足够,也显式设置此值。 希望完全禁用使用 file:// URL 部署能力的操作员应将此配置设置为 “” (空字符串)。

    希望恢复原始不安全行为的操作员应将 CONF.conductor.file_url_allowed_paths 设置为 /。 请注意,在 2025.2 版本及更高版本中,/dev/sys/proc/run/etc 将作为一项安全措施被无条件阻止。

    此问题仅在 Ironic 的自动清理过程被禁用并且服务配置为允许不受信任的 API 用户直接部署的情况下,才构成重大的安全风险,例如独立 Ironic 安装或将节点所有权授予项目的环境。

错误修复

  • 用于检测 ipmitool 命令中与密码套件版本相关的错误的字符串集已扩展。 如果字符串 Error in open session response message : invalid role 包含在失败的 ipmitool 命令输出中,则此类错误现在也被视为与不合适的密码套件相关,如果 Ironic 配置为这样做,将使用另一个密码套件版本进行重试。 有关更多详细信息,请参见 bug 2085137

  • 修复了一个问题,即操作员执行包含带外和带内步骤的复杂步骤安排时,例如硬件 RAID create_configuration 步骤,后跟 agent 内部的带内步骤,实际上会导致 agent 在 Cleaning、Servicing 或 Deploying 工作流中陷入 wait 状态。 这与带外步骤的执行和监控方式有关。 Ironic 在开始执行新步骤之前,现在会清除正在执行的工作流的轮询锁定标志,以防止 agent 陷入停滞状态。 有关更多信息,请参见 bug 2096938

  • 一些供应商坚持认为软盘镜像必须为 1440 KiB,并且文件名必须以 .img 结尾。 满足要求。

  • 在获取命令状态请求中包含 agent token 参数,因为端点现在需要身份验证。

  • 修复 CVE-2024-47211 的修复导致始终需要镜像校验和。 但是,基于 file:// 的镜像没有校验和要求。 当基于 file:// 的 image_source 缺少校验和时,现在会动态计算校验和。

  • 修复了 redfish 会话缓存中未指定 redfish_password 时的错误 bug 2097019

24.1.3

安全问题

  • Ironic 中的一个问题已得到解决,即在将镜像转换为 raw 格式镜像之前,不会检查提供的镜像校验和。

    在默认设置下,这通常不会发生,但是 image_download_source 选项,该选项可设置为节点级别进行单个部署,默认情况下,对于该裸机节点在所有情况下,或者通过 [agent]image_download_source 配置选项设置为 local。 默认设置是 http

    这与 [DEFAULT]force_raw_images 设置为 True 结合使用,导致 Ironic 下载并转换文件。

    在 Ironic 在更大的 OpenStack 部署中使用时,镜像来自 Glance 镜像服务,之前的模式没有问题。 该问题是由于能够提供、缓存和转换由经过身份验证的用户提供的 URL 提供的磁盘镜像而引入的。

    Ironic 现在将在镜像转换之前验证 conductor 提供的用户提供的校验和。 可以通过设置 [conductor]disable_file_checksum 配置选项来禁用此功能。

错误修复

  • 修复了当从 ramdisk 接收的 inventory 中 bmc_addressbmc_v6addressnull 时的检查失败。

  • 修复了一个安全问题,即 Ironic 在下载磁盘镜像文件时不会对其进行校验和检查,而 Ironic 被要求下载并将镜像转换为原始镜像格式。 这需要将 image_download_source 显式设置为 local,这不是默认设置。

    可以通过将 [conductor]disable_file_checksum 设置为 True 来禁用此修复,但是此选项将在新的 Ironic 主要版本中删除。

    因此,已经引入了与 Ironic-Python-Agent 对 standalone Ironic 用户使用的校验和的支持相一致。 这包括支持通过 URL 提供远程校验和文件,以防止破坏可能无意中利用先前代码路径的现有用户。 可以通过将 [conductor]disable_support_for_checksum_files 设置为 True 来禁用此支持。

  • 修复了中止带内检查的问题。 之前,它会因 Can not transition from state 'inspect failed' on event 'abort' 而失败。

24.1.2

升级说明

  • 升级 Ironic 以解决 qemu-img 镜像转换安全问题时,还需要升级 ironic-python-agent ramdisk。

  • 升级 Ironic 以解决 qemu-img 镜像转换安全问题时,可以将 [conductor]conductor_always_validates_images 设置为 True 作为短期解决方案,同时更新 ironic-python-agent ramdisk。 或者,建议将 [agent]image_download_source 设置为 local,以最大程度地减少冗余网络数据传输。

  • 作为对 qemu-img 镜像转换安全问题进行修复的结果,Ironic 添加了一个新的配置参数 [conductor]permitted_image_formats,默认值为“raw,qcow2,iso”。 Raw 和 qcow2 格式的磁盘镜像是在 Ironic 社区始终声明允许并期望与 Ironic 一起使用的镜像格式。 这些格式也与社区测试的格式相匹配。 如果利用其他磁盘镜像格式的操作员,可能需要进一步修改此设置。

安全问题

  • Ironic 现在检查提供的镜像格式值与镜像文件的检测格式是否匹配,如果值不匹配,将阻止部署。 如果与 Glance 一起使用并且检测到元数据不匹配,则需要重新上传镜像,以表示更正后的元数据。 这是由跟踪的 CVE-2024-44082 引起的 bug 2071740

  • Ironic 始终 检查通过 conductor 传递的提供的用户镜像内容是否安全,然后再部署节点,即使镜像以 raw 格式提供。 这用于识别镜像的格式和镜像的整体安全性,以便明确拒绝具有未知或不安全功能使用的源镜像。 可以通过将 [conductor]disable_deep_image_inspection 设置为 True 来禁用此功能。 这是由跟踪的 CVE-2024-44082 引起的 bug 2071740

  • Ironic 还可以检查通常作为 URL 提供以供 ironic-python-agent ramdisk 直接下载的镜像。 默认情况下未启用此功能,因为它会增加 conductor 的整体网络流量和磁盘空间利用率。 可以通过将 [conductor]conductor_always_validates_images 设置为 True 来启用此级别的检查。 一旦 ironic-python-agent ramdisk 已更新,它将独立执行类似的镜像安全检查,如果需要镜像转换。

  • Ironic 现在显式执行 [conductor]permitted_image_formats 设置中允许的镜像类型列表,默认值为“raw”、“qcow2”和“iso”。 虽然该项目历来一直声明允许的镜像为“qcow2”和“raw”,但之前可以提供其他 qemu-img 已知的镜像格式,并且该实用程序会尝试转换镜像。 需要“iso”支持才能支持“从 ISO 启动”ramdisk。

  • Ironic 现在显式将源输入格式传递给 qemu-img 的执行,以限制可能评估镜像的允许 qemu 磁盘镜像驱动程序,以防止针对 qemu-img 的不匹配格式攻击。

  • ansible 部署接口示例 playbook 现在为 qemu-img 的执行提供输入格式。 如果您正在使用自定义 playbook,请将“-f {{ ironic.image.disk_format }}”添加到对 qemu-img 的调用中。 如果您没有这样做,qemu-img 将自动尝试猜测,这可能导致已知的不安全问题,因为源格式驱动程序不正确。

  • 已经实施任何自定义部署驱动程序或附加功能的运营商应审查他们的下游代码,以确保他们正确调用 qemu-img。 如果有任何问题或疑虑,请联系 Ironic 项目开发人员。

  • 提醒操作员,他们应在其环境中利用清理。 禁用任何安全功能,例如清理或镜像检查,是自己承担风险。 如果您在使用安全相关功能时遇到任何问题,请不要犹豫,向项目提交错误报告。

  • [conductor]disable_deep_image_inspection 设置会自动传递给 ironic-python-agent ramdisk,并将阻止这些运行 ramdisk 在写入镜像之前执行深度检查。

  • [conductor]permitted_image_formats 设置会自动传递给 ironic-python-agent ramdisk。 如果需要显式允许其他格式,则应在 Ironic 服务配置中进行设置。

错误修复

  • 修复了单元测试中的一个问题,该问题显示了以下弃用警告:未找到由 $schema 指定的元模式。正在使用最新的草案进行验证,但这将在未来引发错误。cls = validator_for(schema) 通过使用新的模板删除了对已弃用模式的警告。

  • 修复了由于服务状态(states.SERVICING 和 states.SERVICEWAIT)缺失于 _FASTTRACK_HEARTBEAT_ALLOWED 常量中而导致服务步骤无法启动的问题。

  • 修复了通过在允许此方法的状态白名单中添加 states.SERVICING 和 states.SERVICEWAIT 条目来配置虚拟介质引导以执行服务步骤的问题。

  • 修复了与 qemu-img 工具的执行相关的图像处理中的多个问题,该工具用于图像格式转换,恶意用户可以制作磁盘镜像以潜在地从 ironic-conductor 进程的操作系统环境中提取信息。

    Ironic 现在明确地强制执行批准的图像格式列表,作为 [conductor]permitted_image_formats 列表,该列表反映了 Ironic 项目历史上测试过的图像格式,并被认为是可用的。测试不基于文件扩展名,而是基于对磁盘镜像文件的内容指纹识别。这被跟踪为 CVE-2024-44082,通过 bug 2071740

  • 修复了 redfish 分离虚拟介质功能的用法,使其符合通用实现。之前使用 redfish 驱动程序的虚拟介质分离 API 调用未按预期工作,并导致操作失败。

  • 修复了 redfish 连接/断开通用虚拟介质时的问题,连接的设备未被正确识别,导致连接操作失败。

  • 服务步骤验证不再需要优先级字段,该字段不适用于服务。

  • 修复了依赖于重新启动的服务步骤。 之前,重新启动在 conductor 逻辑中未被正确识别。

  • 为作为清理/部署/服务操作的一部分而掌握的 ISO 镜像添加了 ISO 发布者值,以支持 bug 2032377 的修复。

  • 修复了使用虚拟介质附件 API 时生成的 URL。 之前,它缺少节点 UUID,导致不同节点之间的冲突。

24.1.0

序言

Ironic 贡献者很高兴地宣布发布 24.1.0 版本,该版本作为 OpenStack 2024.1 (Caracal) 的一部分经过了六个月的测试。此版本可以直接从 Ironic 21.4 升级,作为 OpenStack 2023.1 (Antelope) 的 SLURP 升级的一部分。Ironic 的第一个版本是在 2014.1 (Icehouse) 周期期间发布的——十年前。在这十年里,redfish 已经创建,默认部署驱动程序已被替换,并且 Ironic 已经扩展到 CNCF 社区,与 Metal3 一起。感谢您使我们成为您云的一部分!

新特性

  • 添加了一个 http 引导接口,基于 pxe 引导接口,该接口告知 DHCP 服务器 HTTP URL 以引导机器,然后请求 BMC 以 UEFI HTTP 模式引导机器。

  • 添加了一个 http-ipxe 引导接口,基于 ipxe 引导接口,该接口告知 DHCP 服务器 HTTP URL 以引导机器,然后请求 BMC 以 UEFI HTTP 模式引导机器。

  • agent 检查实现添加了节点自动发现支持。

  • 添加了对 ovn vtep 交换机的支持。 运营商将能够使用逻辑和物理交换机。 在生产环境中经过了最小的测试。

  • 添加了一个新的服务 ironic-pxe-filter,旨在与 agent 检查接口配合使用,以进行“未管理”检查。 它改编自 ironic-inspector 的 dnsmasq PXE 过滤器,可以用作其替代品。 有关更多详细信息,请参阅文档。

  • 为 Redfish 驱动程序添加了连接/断开通用虚拟介质设备的实现。

已知问题

  • 使用 Ubuntu 22.04 测试 http 引导接口时,Grub2 提供了一些间歇性故障,这些故障似乎更多的是环境性质,因为签名的 Shim 加载程序将启动,然后加载 GRUB 加载程序,然后可能会尝试访问某些预期的文件,然后由于明显的传输超时而失败。 与一些 grub 开发人员的协商一致认为这可能是环境问题,这意味着特定的 grub 构建或 CI 性能相关。 如果遇到任何问题,请随时联系 Ironic 开发社区。

升级说明

  • 新的检查接口 添加了在线迁移。 如果启用了 agent 检查并禁用了 inspector 检查,则 inspect_interface 字段将为所有使用 inspector 且当前未处于检查状态(即,未处于 inspect waitinspecting 状态)的节点更新。

    如果一些节点可能在升级期间正在检查,您可能需要多次运行在线迁移,并延迟一段时间以完成所有节点的迁移。

弃用说明

  • redfish 供应商弹出 vmedia 操作现已弃用,将在下一个周期中删除,以支持通用 API。

错误修复

  • 修复了在仅在系统而非管理器上公开 VirtualMedia 资源的 BMC 上 Redfish 虚拟介质引导的问题。 有关更多信息,请参阅 bug 2039458

  • 修复了在使用 iLO6 硬件的 ilo 硬件类型时出现的模糊错误,方法是返回更具体的错误,建议采取行动以解决该问题。 具体来说,ilo 硬件类型使用的其中一个 API 在 iLO6 BMC 中被禁用,以支持用户使用 Redfish。 建议运营商对这些机器使用 redfish 硬件类型。

  • Ironic 的一些 API 端点,当强制执行新的 RBAC 策略时,由于策略需要 system 范围,之前在访问权限不足时发出 500 错误代码。 这已得到纠正,并且如果经过身份验证的请求者的访问权限不足,这些端点现在应该正确地发出 403 错误代码。

  • NodeHistory 模型中 user 列的 32 个字符限制增加到支持长达 64 个字符的值。 有关更多信息,请 参阅 bug

  • 修复了 Lenovo 硬件的问题,在代理以 UEFI 引导模式将镜像写入主机后,系统固件可能会显示一个蓝色的“Boot Option Restoration”屏幕,需要手动干预才能引导已部署的节点。 该问题源于对节点的基础 NVRAM 配置进行了多次更改。 Lenovo 工程师建议更改 UEFI NVRAM,不要通过 BMC 进行任何进一步的更改来配置下一次引导。 Ironic 现在在 Lenovo 硬件上这样做。 有关此问题的更多信息和背景,请参阅 bug 2053064

  • 修复了一个问题,当启用了 neutron network_interface 设置,并且在 ironic.conf 中未设置全局 cleaning_networkprovisioning_network 时,conductor 服务将无法启动。 这些设置长期以来可以通过 API 以每个节点为基础应用。 因此,现在可以启动该服务,并且会在节点验证调用时出错,如为缺少网络参数的驱动程序所设计。

  • 每个 conductor 现在为其 worker 线程(默认情况下为 5%)保留一小部分,用于 API 请求和其他关键任务。 这确保了即使在极端内部负载下,API 仍然响应迅速。

  • service 角色支持提供了一个修复,以支持使用专用服务项目进行云服务操作以促进云基础设施操作的一部分的操作。

    OpenStack 云可以采用各种服务帐户配置模型。 现在可以使用 [DEFAULT] rbac_service_role_elevated_access 设置,以启用在专用 service 项目中具有 service 角色的用户以类似于“系统”范围的“成员”的方式对 API 进行操作,无论资源的所有者或承租人设置如何。 这对于同步过程(例如 nova-computenetworking-baremetal ML2 插件)在整个 Ironic 部署中执行操作是必需的,如果不需要“系统”范围的用户,则可以这样做。

    可以使用 [DEFAULT] rbac_service_project_name 设置来调整此功能,以使用自定义项目名称,例如 baremetaladmin

    运营商还可以完全覆盖 service_role RBAC 策略规则,如果需要,但 Ironic 认为默认值既合理又足以满足现有 Ironic 部署中可能存在的各种基于角色的访问控制用例。

  • API 中期望列表的查询参数现在接受重复的参数(param=value1&param=value2),除了逗号分隔的字符串(param=value1,value2)之外。 后者似乎更常见,实际上(不正确地)用于 GopherCloud。

  • 修复了虚拟介质附件 API 在图像下载失败时的错误处理。 现在 last_error 字段已正确填充,并且错误已记录。