Zed 系列 (20.2.0 - 21.1.x) 发行说明

21.1.2-10

升级说明

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

  • 作为对 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_always_validates_images 设置为 False 来禁用此级别的检查。不建议这样做,因为 Zed 版本及更早版本的 ironic-python-agent ramdisk 将无法使用,原因是存在回退回归风险。这是由 CVE-2024-44082 跟踪的 bug 2071740 导致的。

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

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

  • 修复了 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 安装或将节点所有权授予项目的环境。

错误修复

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

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

  • 修复了一个安全问题,即 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 来禁用此支持。

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

21.1.2

升级说明

  • 添加了 sha256sha384sha512 作为 iRMC 驱动程序支持的 SNMPv3 身份验证协议。

  • ipxe boot_interface 将默认优先于 irmc-pxe,硬件类型为 irmc 时创建新的裸机节点。此更改不会影响现有的裸机节点。希望继续使用 irmc-pxe 作为默认启动接口的操作员需要在 ironic.conf 中的 [DEFAULT]default_boot_interface 设置中明确指定它。

错误修复

  • 修复 iRMC 驱动程序中的一个错误,其中 irmc power_interface 设置并更新 irmc_ipmi_succeed 标志,该标志被 iRMC 驱动程序代码的其余部分用于处理 iRMC 固件的 IPMI 不兼容性,但 ipmitool power_interface 不会设置或更新 irmc_ipmi_succeed 标志,并且 iRMC 驱动程序代码的其余部分无法正确处理 iRMC 固件的 IPMI 不兼容性。

  • 修复了一个问题,系统范围用户无法在启用清理的情况下将节点置于 manageable 状态,因为 Neutron 客户端会尝试使用其用户的令牌为清理操作创建 Neutron 端口,这是设计所致。这是因为使用 system 范围发出的请求没有关联的项目,并且请求失败。

    Ironic 现在检查请求是否使用 system 范围发出,如果是,则使用内部凭据配置与 Neutron 通信。

  • 修复了硬件类型为 irmc 的默认启动接口顺序,之前它会优先选择 irmc-pxe 而不是 ipxe。这为使用多种硬件类型的操作员造成了不一致,因为两种接口都在部署中启用。由于此修复已回溯到 Zed 的此发布点,因此更新到此版本之后的运营商即使更新是在 Zed 版本中完成,也需要检查相关的升级说明并采取必要的措施。

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

21.1.1

升级说明

  • 如果 Ironic 操作员使用 irmc 驱动程序针对运行 iRMC 版本 S6 2.00 或更高版本的富士通服务器,则操作员可能需要在 driver_info 中设置 Redfish 参数,以便此修复能够正常运行,或者如果可能,应通过 BMC 设置启用 IPMI over LAN。

错误修复

  • 修复了 Ironic 与 Cinder 的集成问题,这是由于最近与安全相关的修复导致的,详情请参见 bug 2004555。Ironic 中跟踪此修复的工作已记录在 bug 2019892 中。Ironic 现在向 Cinder 发送服务令牌,这允许绕过作为原始 CVE-2023-2088 修复的一部分添加的访问限制。Ironic 本身不受影响,但由此添加的限制确实影响了 Ironic 的使用。这是因为 Ironic 卷附件不在共享“计算节点”上,而是映射到物理机器,并且 Ironic 在初始附件之后处理附件生命周期。

  • 在中止清理时,last_error 字段不再为空。现在,它在状态转换为 clean failed 时填充。

  • 在清理或部署失败时,last_error 字段不再临时设置为 None,而电源关闭操作正在运行时。

  • 修复了在使用 file:// 镜像 URL 时,某些情况下出现的 Invalid cross-device link 错误。

  • 修复了一个问题,如果启用了 selinux 并强制执行,并且发布的镜像是一个硬链接,则会保留源 selinux 上下文,导致在使用硬链接 URL 检索镜像时访问被拒绝。

  • 修复了 iRMC 驱动程序在 parse_driver_info 中的错误,如果启用了 FIPS,则 SNMP 版本始终需要为版本 3,即使 iRMC 驱动程序的 xxx_interface 实际上不使用 SNMP。

  • 修复了 iRMC 版本 S6 2.00 及更高版本固件的兼容性问题,默认情况下不支持 IPMI over LAN。为了解决此问题,irmc 驱动程序首先尝试 IPMI 操作,然后,如果 IPMI 操作失败,则尝试富士通服务器的 Redfish API。如果 iRMC 禁用或不支持 IPMI over LAN,操作员必须在 driver_info 中设置 Redfish 参数。

  • 修复了 'NoneType' object is not iterable 在 Conductor 日志中出现的错误,用于 redfishidrac-redfish RAID 清理和部署步骤。该消息不再出现。对于受影响的节点,请重新创建节点或从 driver_internal_info 字段中删除 raid_configs 条目。

  • 修复了在线升级逻辑中的一个问题,节点 Traits 和 BIOS 设置的数据库模型导致在线数据迁移时出现错误。这是因为这些表最初是作为 Nodes 数据库表的扩展创建的,并且数据库的模式略有不同,以至于如果在这些表中存在要迁移的数据(如果早期 BIOS 设置采用者在升级到 Ironic 的 Yoga 版本之前在数据库中拥有数据),则会发生错误。

    在线升级参数现在在适用时替换备用主键名称。

  • 修复了一个问题,如果节点已经在目标电源状态,而我们尝试关闭节点时,代理令牌可能会被无意中孤立。

  • 修复了使用“self_owned_node”策略检查的范围分类检查,该检查仅限于检查项目范围内的执行,因此点击策略端点的系统范围用户基本上会收到错误的错误。

  • 修复了在 BMC 不支持 EthernetInterfaces 属性时,Redfish 管理节点配置失败的错误,即使手动提供了 MAC 地址信息。这是通过在 get_mac_addresses() 方法中处理 MissingAttributeError sushy 异常来实现的。此修复对于成功配置 Cisco UCSB 和 UCSX 等机器是必需的。

  • 修改 iRMC 驱动程序以使用 ironic.conf [deploy] default_boot_mode 来确定默认 boot_mode。

  • 不再为已经是原始格式的镜像重新计算校验和。以前,这会导致部署原始镜像时出现重大延迟。

  • 驱动程序信息中的每个节点的 external_http_url 设置现在用于启动 ISO。以前,此设置仅用于配置软盘。

  • 修复了一个问题,如果在裸机节点在清理操作期间超时,则代理令牌会被孤立,导致将来某些情况下节点无法与 Ironic 建立新的令牌。现在,在这种情况下,我们始终擦除令牌。

21.1.0

序言

Ironic 团队在此宣布 Ironic 的 Zed 版本发布。此版本,21.1.0,代表了 Ironic 贡献者在 Zed 发布周期内的合作,该周期首先发布了 Ironic 20.2.0,然后发布了 Ironic 21.1.0。这些版本在功能上有所改进,以更好地支持基础设施操作员,从单个节点的配置到支持更大的职责分离,最终实现自服务裸机即服务,或“SSBMaaS”。除了这些功能外,这些版本还修复了许多错误。我们真诚地希望您喜欢它!

新特性

  • 添加 raritan_pdu2servertech_sentry3servertech_sentry4vertivgest_pdu SNMP 驱动程序以支持其他 PDU 型号。

  • 当源是 URL 路径而不是 stage2 内存盘时,自动切换到 url 用于 kickstart 模板。

  • 添加了并发限制器,用于限制 Ironic 部署中与 CleaningProvisioning 操作相关的节点数量。这些设置默认情况下将并发部署的最大数量限制为 250,将并发删除和清理操作的最大数量限制为 50。可以使用 [conductor]max_concurrent_deploy[conductor]max_concurrent_clean 进行调整。默认值通常对大多数操作员在大多数情况下都适用。大规模操作员应评估默认值并根据需要进行调整,因为此功能无法禁用,因为它是一种安全机制。

  • 为硬件类型 iloilo5 添加了新的清理步骤 create_csradd_https_certificate,允许用户创建证书签名请求 (CSR) 并将签名的 HTTPS 证书添加到 iLO。

  • 配置选项 [dhcp]dhcp_provider 现在可以设置为 dnsmasq,作为独立部署中 none 的替代方案。这启用了与 neutron 提供程序相同的节点特定 DHCP 功能。有关配置选项,请参阅 [dnsmasq] 部分。

  • 为硬件类型 iloilo5 提供供应商直通方法,以创建、删除和获取 BMC 事件的订阅。这些方法支持 HPE ProLiant Gen10HPE ProLiant Gen10 Plus 服务器。

  • 添加了项目范围的 admin 用户能够创建 Ironic 中的节点的能力,然后这些节点可以由项目范围的 admin 用户管理。实际上,这是自服务裸机即服务,但是更高级的字段(例如驱动程序、机箱)对于这些用户不可用。这通过自动填充节点 owner 字段来控制,并且可以通过 [api]project_admin_can_manage_own_nodes 设置来控制,该设置默认为 True,以及新的策略 baremetal:node:create:self_owned_node

  • 添加了项目范围的 admin 用户能够删除 Ironic 中其 project 拥有的节点的能力。这可以通过 [api]project_admin_can_manage_own_nodes 设置来控制,该设置默认为 True,以及 baremetal:node:delete:self_owned_node 策略。

升级说明

  • 大规模操作员应注意,作为一种安全机制,引入了一个新功能,称为“并发操作限制”,旨在限制攻击者或有故障的脚本可能造成的不可逆转的损害。此功能无法禁用,并且鼓励操作员调整新的设置 [conductor]max_concurrent_deploy[conductor]max_concurrent_clean 以匹配其环境的需求。

  • 正在升级的操作员应注意,发现了一个与 iloilo5 硬件类型的 boot_interface 自动选择相关的错误。这是一个不一致,导致如果同时启用了两个启动接口,则会选择 pxe 而不是 ipxe。根据本地配置,这可能或可能没有发生,并且将保持在预先存在的裸机节点上不变。一些用户可能依赖于这种不正确的行为,通过尝试使用 pxe 接口来错误地对齐默认值。希望继续使用这种用法(如之前)的用户需要在 ironic.conf 中显式设置 boot_interface 值,具体取决于本地配置,设置为 pxeilo-ipxe。大多数操作员都利用了默认示例,因此没有明确遇到这种情况。明确希望使用 pxe 启动接口的操作员,并且将默认值设置为覆盖 ironic.conf 中的默认值,需要继续利用 ironic.conf 文件中的默认覆盖配置。

安全问题

  • 此版本包含一项改进,默认情况下允许用户在其自己的项目内创建和删除裸机节点。可以使用 [api]project_admin_can_manage_own_nodes 设置禁用此功能。

错误修复

  • 修复了在仅提供 ValueDisplayName 时,在 redfish BIOS 接口中检测 BIOS 设置枚举的允许值的问题。

  • 添加了一个配置选项 [anaconda]insecure_heartbeat,允许禁用 anaconda 部署接口中 TLS 证书验证,这对于能够在没有大量子板镜像自定义的情况下执行持续集成是必需的。不建议在任何生产用途中使用此选项。

  • 修复了一个问题,在使用 anaconda 部署接口时,如果提供了路径,则图像信息检索将失败,因为 HTTP HEAD 请求在 URL 路径上没有 Content-Length。现在,我们在尝试从 Glance 收集其他配置数据之前,会考虑是否使用了路径。

  • 修复了一个问题,回退到默认 kickstart 模板值会导致错误,指示“Scheme-less image href 不是 UUID”。这是因为回退处理代码在保存值之前没有显式指示它是文件 URL。

  • 修复了一个问题,清理操作可能会以难以恢复的方式失败,当在验证网络接口配置的预清理时,配置无效时。现在 Ironic 正确捕获错误,并以允许重试清理的状态退出。

  • 修复了 idrac-redfish RAID delete_configuration 步骤,如果 PERC 9 和 PERC 10 控制器未设置为 RAID 模式,则将其转换为 RAID 模式。

  • 修复了硬件类型为 ilo 的默认启动接口顺序,之前它会优先选择 pxe 而不是 ipxe。这为使用多种硬件类型的操作员造成了不一致,因为两种接口都在部署中启用。

  • 修复了 jsonschema>=4.8 的 API 错误消息。现在可以检测到通用模式错误的潜在根本原因。

  • 修复了一个问题,Redfish 会话缓存会在更改 Redfish BMC 的密码时继续使用旧会话。现在,旧会话将不会在此情况下找到,并且将使用最新的凭据信息创建新的会话。

其他说明

  • 最大磁盘擦除并发设置 [deploy]disk_erasure_concurrency 已增加到 4。以前,为了保持体验的连续性,将其保持在 1,但操作员没有报告任何与增加并发相关的问题,因此我们认为上游启用并发磁盘擦除/清理是安全的。此设置适用于 erase_devices 清理步骤。