Zed 系列 (20.2.0 - 21.1.x) 发行说明¶
21.1.2-10¶
升级说明¶
升级 Ironic 以解决
qemu-img镜像转换安全问题时,还需要升级ironic-python-agentramdisk。
作为对
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-agentramdisk 提供。默认情况下启用此功能,会增加导管的网络流量和磁盘空间利用率。可以通过将[conductor]conductor_always_validates_images设置为False来禁用此级别的检查。不建议这样做,因为 Zed 版本及更早版本的ironic-python-agentramdisk 将无法使用,原因是存在回退回归风险。这是由 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-agentramdisk,并将阻止这些运行 ramdisk 在写入镜像之前执行深度检查。
[conductor]permitted_image_formats设置会自动传递给ironic-python-agentramdisk。 如果需要显式允许其他格式,则应在 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 对
standaloneIronic 用户使用的校验和的支持相一致。 这包括支持通过 URL 提供远程校验和文件,以防止破坏可能无意中利用先前代码路径的现有用户。 可以通过将[conductor]disable_support_for_checksum_files设置为True来禁用此支持。
21.1.2¶
升级说明¶
添加了
sha256、sha384和sha512作为 iRMC 驱动程序支持的 SNMPv3 身份验证协议。
ipxeboot_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 日志中出现的错误,用于redfish和idrac-redfishRAID 清理和部署步骤。该消息不再出现。对于受影响的节点,请重新创建节点或从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_pdu2、servertech_sentry3、servertech_sentry4和vertivgest_pduSNMP 驱动程序以支持其他 PDU 型号。
当源是 URL 路径而不是
stage2内存盘时,自动切换到url用于 kickstart 模板。
添加了并发限制器,用于限制 Ironic 部署中与 Cleaning 和 Provisioning 操作相关的节点数量。这些设置默认情况下将并发部署的最大数量限制为
250,将并发删除和清理操作的最大数量限制为50。可以使用[conductor]max_concurrent_deploy和[conductor]max_concurrent_clean进行调整。默认值通常对大多数操作员在大多数情况下都适用。大规模操作员应评估默认值并根据需要进行调整,因为此功能无法禁用,因为它是一种安全机制。
为硬件类型
ilo和ilo5添加了新的清理步骤create_csr和add_https_certificate,允许用户创建证书签名请求 (CSR) 并将签名的 HTTPS 证书添加到 iLO。
配置选项
[dhcp]dhcp_provider现在可以设置为dnsmasq,作为独立部署中none的替代方案。这启用了与neutron提供程序相同的节点特定 DHCP 功能。有关配置选项,请参阅[dnsmasq]部分。
为硬件类型
ilo和ilo5提供供应商直通方法,以创建、删除和获取 BMC 事件的订阅。这些方法支持HPE ProLiant Gen10和HPE 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以匹配其环境的需求。
正在升级的操作员应注意,发现了一个与
ilo和ilo5硬件类型的boot_interface自动选择相关的错误。这是一个不一致,导致如果同时启用了两个启动接口,则会选择pxe而不是ipxe。根据本地配置,这可能或可能没有发生,并且将保持在预先存在的裸机节点上不变。一些用户可能依赖于这种不正确的行为,通过尝试使用pxe接口来错误地对齐默认值。希望继续使用这种用法(如之前)的用户需要在ironic.conf中显式设置boot_interface值,具体取决于本地配置,设置为pxe或ilo-ipxe。大多数操作员都利用了默认示例,因此没有明确遇到这种情况。明确希望使用pxe启动接口的操作员,并且将默认值设置为覆盖ironic.conf中的默认值,需要继续利用ironic.conf文件中的默认覆盖配置。
安全问题¶
此版本包含一项改进,默认情况下允许用户在其自己的项目内创建和删除裸机节点。可以使用
[api]project_admin_can_manage_own_nodes设置禁用此功能。
错误修复¶
修复了在仅提供
ValueDisplayName时,在redfishBIOS 接口中检测 BIOS 设置枚举的允许值的问题。
添加了一个配置选项
[anaconda]insecure_heartbeat,允许禁用anaconda部署接口中 TLS 证书验证,这对于能够在没有大量子板镜像自定义的情况下执行持续集成是必需的。不建议在任何生产用途中使用此选项。
修复了一个问题,在使用
anaconda部署接口时,如果提供了路径,则图像信息检索将失败,因为 HTTP HEAD 请求在 URL 路径上没有 Content-Length。现在,我们在尝试从 Glance 收集其他配置数据之前,会考虑是否使用了路径。
修复了一个问题,回退到默认 kickstart 模板值会导致错误,指示“Scheme-less image href 不是 UUID”。这是因为回退处理代码在保存值之前没有显式指示它是文件 URL。
修复了一个问题,清理操作可能会以难以恢复的方式失败,当在验证网络接口配置的预清理时,配置无效时。现在 Ironic 正确捕获错误,并以允许重试清理的状态退出。
修复了
idrac-redfishRAIDdelete_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清理步骤。