2024.2 系列发布说明

26.1.4-4

错误修复

  • 通过缓存 bcrypt 密码检查结果,提高了基本 HTTP 身份验证的性能。这提高了使用 JSON-RPC 和基本 HTTP 身份验证访问 API 时 Ironic conductor 的性能。

  • 确保在尝试复制引导加载程序之前,复制引导加载程序的目标路径存在。

  • 修复了一个竞态条件,该竞态条件可能导致 Redfish 电源接口在电源操作期间出现 HTTP 400(BadRequest)或 HTTP 409(Conflict)错误。现在,如果节点已处于目标电源状态(打开或关闭),则这些错误被视为成功,从而防止在电源状态更改完成后 Ironic 的状态验证超时时发生部署失败。 此外,刷新系统状态以从 BMC 获取当前电源状态,而不是使用可能过时的缓存数据。

26.1.4

错误修复

  • 在不同文件系统之间缓存镜像时,硬链接操作将失败。通过回退到复制操作来修复此问题。

26.1.3

错误修复

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

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

26.1.2

安全问题

  • 修复了 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

  • 在从 glanceclient 切换到 OpenStack SDK 与 Glance 通信时,引入了一个读取镜像属性的错误,导致 Anaconda 部署界面无法使用 Glance 镜像。其他部署界面继续工作,但可能导致某些属性无法生效。有关更多详细信息,请参阅 bug 2099275

  • 修复了步骤验证,其中一些保留的步骤名称(holdwait)未被步骤验证代码正确处理。

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

  • 修复了新添加的策略规则 baremetal:node:set_provision_state:clean_stepsbaremetal:node:set_provision_state:service_steps``,这些规则影响使用 Ironic 2024.2 发行版尝试调用 serviceclean 置备状态命令的项目范围用户。这是由于调用了错误的策略检查器,并且已添加围绕这些函数的额外测试,以确保它们今后能够按预期工作。

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

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

  • 配置选项 [inspector]power_off 现在实际上被启用了快速通道的节点忽略,如其帮助文档中所记录。

  • 修复了内置的带内检查实现,以便在用户请求时关闭节点,除非节点处于快速通道模式或 [inspector]power_off 设置为 False

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

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

  • 在成功服务和清理后更新节点缓存。这可确保节点信息在数据库中得到正确更新。

26.1.1

安全问题

  • 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 配置选项来禁用此功能。

错误修复

  • 修复了一个安全问题,即 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' 而失败。

26.1.0

序言

Ironic 项目很高兴地宣布发布 Ironic 26.1,也称为 2024.2Dalmatian 版本。此版本添加了功能,可以启用在 cleaningservice 状态中重复步骤的 runbooks 的创建和使用。此外,云管理员现在可以通过 Nova 提供的元数据自动向 Nova 用户 lease 裸机节点。固件更新提高了管理多个主机的 BMC 的功能和易用性。此外,redfish 硬件类型的用户现在可以将固件更新作为 service 步骤调用。寻求迁移远离 BIOS 启动的操作员现在有了更多选项来帮助强制执行迁移指令。配合大量的错误修复和其他次要增强,Ironic 的此次发布将改善操作员的使用体验多年。我们希望您喜欢!

新特性

  • 添加了一个新的 API 概念,runbooks,以启用项目成员对节点上维护项目的自助服务。

    Runbooks 是策划的步骤列表,仅可通过特性关联的节点运行,并用作手动清理或服务的手动步骤列表的替代方案。

  • 添加了一个新的顶级 REST API 端点 /v1/runbooks/,并提供基本的 CRUD 支持。

  • 扩展了 /v1/nodes/<node>/states/provision API,以接受 runbook 标识符(名称或 UUID)而不是 clean_stepsservice_steps 进行服务或手动清理。

  • 实现了与 RBAC 感知的 runbook 生命周期管理,允许项目限制谁可以 CRUD 和使用 runbook。

  • Ironic 现在支持使用在部署时由 OpenStack Nova 提供的元数据自动设置节点.lessee。当 [conductor]/automatic_lessee_source 设置为 instance 时,Ironic 将在节点上设置 lessee 字段,并在清理之前将其删除。

  • 添加了一个新的功能,允许通过发出 GET 请求来获取附加到节点的虚拟介质设备列表。

  • 使 idrac 硬件类型从 redfish 硬件类型继承,因为 idrac 硬件类型是 redfish 的扩展,具有 Dell 特定的覆盖。这将确保 redfish 硬件类型可用的功能始终可用于 idrac。将 redfish 接口作为 idrac 硬件类型的 biospowervendor 接口的可用接口添加。

升级说明

  • 升级 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 一起使用的镜像格式。 这些格式也与社区测试的格式相匹配。 如果利用其他磁盘镜像格式的操作员,可能需要进一步修改此设置。

  • [conductor]/automatic_lessee 已被弃用,取而代之的是 [conductor]/automatic_lessee_source

    先前将 automatic_lessee 设置为 True 的独立 Ironic 部署现在可能希望将 automatic_lessee_source 设置为 request 以保留现有行为。

    显式将 automatic_lessee 设置为 false 的部署者可能希望将 automatic_lessee_source 设置为 none 以保留现有行为。在完全删除之前,将遵守显式设置的旧配置选项。

  • Ironic 现在将默认情况下为所有部署设置节点.lessee 字段,前提是在部署时在节点 instance_info 中提供。鼓励部署者查看他们的安全设置和 Ironic Secure RBAC 文档,以确保没有授予意外访问权限。

  • Ironic 现在要求救援密码必须经过哈希处理。希望继续使用未哈希密码的操作员必须将 [conductor]/require_rescue_password_hashed 设置为 false

弃用说明

  • 配置指令 [[agent]]manage_agent_boot 正在被弃用。它未经测试,并且要求操作员手动配置通常由 Ironic 处理的基础设施的显着部分。建议使用此配置的操作员在 2025.2 周期发布(预计于 2025 年底发布)之前迁移离开它。

  • 弃用 idrac-redfish 接口,以支持 redfish 接口的 biospowervendor 接口。这是一个无操作更改,因为这些接口已经以没有更改的方式包装了 redfish 接口。

安全问题

  • 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 服务配置中进行设置。

错误修复

  • 为根 (‘/’) 端点添加微版本头。

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

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

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

  • 从 Neutron 获取的网络数据包含 ‘links’、‘networks’,但缺少 ‘services’。此补丁引入了 ‘services’,以包含可以在 Glean 或 cloud-init 在清理和置备操作期间配置的 dns 域名服务器,尤其是在使用虚拟介质引导而没有 DHCP 时。

  • 在检查完成后,将节点设置为“存活”并使其可进行快速通道跟踪,此外,如果尝试快速通道时代理不可用,则等待代理回调。

  • ari/aki 格式引用替换为文档和 Ironic DevStack 插件中的适当工件,用于内核和 ramdisk。

  • 更新 kernel_append_params 以匹配 [pxe] 配置,解决了 Xena 版本中的 TODO。

其他说明

  • 删除了对内部数据库 API 中 SQLalchemy 2.0 之前的查询对象的支持。下游插件必须调整为使用新型查询。