2023.1 系列 (21.2.0 - 21.4.x) 发行说明¶
2023.1-eom-5¶
安全问题¶
修复了 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 安装或将节点所有权授予项目的环境。
错误修复¶
2023.1-eom¶
安全问题¶
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 对
standaloneIronic 用户使用的校验和的支持相一致。 这包括支持通过 URL 提供远程校验和文件,以防止破坏可能无意中利用先前代码路径的现有用户。 可以通过将[conductor]disable_support_for_checksum_files设置为True来禁用此支持。
21.4.3¶
升级说明¶
升级 Ironic 以解决
qemu-img镜像转换安全问题时,还需要升级ironic-python-agentramdisk。
升级 Ironic 以解决
qemu-img镜像转换安全问题时,可以将[conductor]conductor_always_validates_images设置为True作为短期解决方案,同时更新ironic-python-agentramdisk。 或者,建议将[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-agentramdisk 直接下载的镜像。 默认情况下未启用此功能,因为它会增加 conductor 的整体网络流量和磁盘空间利用率。 可以通过将[conductor]conductor_always_validates_images设置为True来启用此级别的检查。 一旦ironic-python-agentramdisk 已更新,它将独立执行类似的镜像安全检查,如果需要镜像转换。
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 服务配置中进行设置。
错误修复¶
修复了与
qemu-img工具的执行相关的图像处理中的多个问题,该工具用于图像格式转换,恶意用户可以制作磁盘镜像以潜在地从ironic-conductor进程的操作系统环境中提取信息。Ironic 现在明确地强制执行批准的图像格式列表,作为
[conductor]permitted_image_formats列表,该列表反映了 Ironic 项目历史上测试过的图像格式,并被认为是可用的。测试不基于文件扩展名,而是基于对磁盘镜像文件的内容指纹识别。这被跟踪为 CVE-2024-44082,通过 bug 2071740。
21.4.2¶
错误修复¶
为作为清理/部署/服务操作的一部分而掌握的 ISO 镜像添加了 ISO 发布者值,以支持 bug 2032377 的修复。
21.4.1¶
错误修复¶
修复了单元测试中的一个问题,该问题显示了以下弃用警告:未找到由 $schema 指定的元模式。正在使用最新的草案进行验证,但这将在未来引发错误。cls = validator_for(schema) 通过使用新的模板删除了对已弃用模式的警告。
修复了 Ironic 与 Cinder 的集成问题,这是由于最近与安全相关的修复导致的,详情请参见 bug 2004555。Ironic 中跟踪此修复的工作已记录在 bug 2019892 中。Ironic 现在向 Cinder 发送服务令牌,这允许绕过作为原始 CVE-2023-2088 修复的一部分添加的访问限制。Ironic 本身不受影响,但由此添加的限制确实影响了 Ironic 的使用。这是因为 Ironic 卷附件不在共享“计算节点”上,而是映射到物理机器,并且 Ironic 在初始附件之后处理附件生命周期。
修复了在使用
file://镜像 URL 时,某些情况下出现的Invalid cross-device link问题。
修复了指向符号链接的
file:///镜像 URL 的行为。Ironic 不再创建指向符号链接的硬链接,这可能会导致如果符号链接是相对链接,则发生令人困惑的 FileNotFoundError。
修复了在禁用旧版 RBAC 策略时,以项目范围用户列出分配时出现的问题,该问题导致错误地引发 HTTP 406 错误。尝试使用与他们自己不同的所有者列出分配的用户现在将收到 HTTP 403 错误。
正确地从 DVD 设备中弹出虚拟介质,以防这是硬件上唯一可用的 MediaType,并且 Ironic 请求使用 CD 作为要使用的设备。有关详细信息,请参见 bug 2039042。
修复了 iRMC 驱动程序在 parse_driver_info 中的错误,如果启用了 FIPS,则 SNMP 版本始终需要为版本 3,即使 iRMC 驱动程序的 xxx_interface 实际上不使用 SNMP。
修复了 iRMC 驱动程序中的错误,其中 irmc power_interface 设置并更新 irmc_ipmi_succeed 标志,该标志由 iRMC 驱动程序代码的其余部分用于处理 iRMC 固件的 IPMI 不兼容性,但 ipmitool power_interface 不设置或更新 irmc_ipmi_succeed 标志,并且 iRMC 驱动程序代码的其余部分无法正确处理 iRMC 固件的 IPMI 不兼容性。
修复了一个问题,如果节点已经在目标电源状态,而我们尝试关闭节点,则代理令牌可能会被无意中孤立。
修复了使用“self_owned_node”策略检查的范围分类检查,该检查仅限于检查项目范围的执行,因此勾选策略端点的系统范围用户基本上会收到错误的错误。
修复了一个问题,系统范围用户无法在启用清理的情况下将节点置于
manageable状态,因为 Neutron 客户端会尝试使用其用户的令牌为清理操作创建 Neutron 端口,这是设计所致。这是因为使用system范围发出的请求没有关联的项目,并且请求失败。Ironic 现在检查请求是否使用
system范围发出,如果是,则使用内部凭据配置与 Neutron 通信。
修复了 anaconda 部署中的安全启动问题。
修复了在 BMC 不支持 EthernetInterfaces 属性时,Redfish 管理节点配置失败的问题,即使手动提供了 MAC 地址信息。这是通过在 get_mac_addresses() 方法中处理 MissingAttributeError sushy 异常来实现的。此修复对于成功配置 Cisco UCSB 和 UCSX 等机器是必需的。
修复了 Lenovo 硬件的问题,在代理以 UEFI 引导模式将镜像写入主机后,系统固件可能会显示一个蓝色的“Boot Option Restoration”屏幕,需要手动干预才能引导已部署的节点。 该问题源于对节点的基础 NVRAM 配置进行了多次更改。 Lenovo 工程师建议仅更改 UEFI NVRAM,不要通过 BMC 进行任何进一步的更改来配置下一次引导。 Ironic 现在在 Lenovo 硬件上这样做。 有关此问题的更多信息和背景,请参阅 bug 2053064。
不再为已经是原始格式的镜像重新计算校验和。以前,这会导致部署原始镜像时出现重大延迟。
驱动程序信息中的每个节点的
external_http_url设置现在用于启动 ISO。以前,此设置仅用于配置软盘。
修复了一个问题,当启用了
neutronnetwork_interface 设置,并且在 ironic.conf 中未设置全局cleaning_network或provisioning_network时,conductor 服务将无法启动。 这些设置长期以来可以通过 API 以每个节点为基础应用。 因此,现在可以启动该服务,并且会在节点验证调用时出错,如为缺少网络参数的驱动程序所设计。
通过删除“VolumeType”、“Encrypted”并将“Drives”的位置移动到“Links”内部,修复了 iLO6 和其他具有最新模式的 BMC 中的 Raid 创建问题。
为
service角色支持提供了一个修复,以支持使用专用服务项目进行云服务操作以促进云基础设施操作的一部分的操作。OpenStack 云可以采用各种服务帐户配置模型。现在可以使用
[DEFAULT] rbac_service_role_elevated_access设置,以允许在专用service项目中具有service角色的用户以类似于“System”范围“Member”的方式对 API 进行操作,无论owner或lessee设置如何,都可以使用资源。这对于同步过程(例如nova-compute或networking-baremetalML2 插件)在整个 Ironic 部署中执行操作是必需的,如果不需要“System”范围用户,则需要这样做。可以使用
[DEFAULT] rbac_service_project_name设置来调整此功能,以使用自定义项目名称,例如baremetal或admin。运营商还可以完全覆盖
service_roleRBAC 策略规则,如果需要,但 Ironic 认为默认值既合理又足以满足现有 Ironic 部署中可能存在的各种基于角色的访问控制用例。
修复了一个问题,如果在裸机节点在清理操作期间超时,则代理令牌会被孤立,导致将来某些情况下节点无法与 Ironic 建立新的令牌。现在,在这种情况下,我们始终擦除令牌。
21.4.0¶
序言¶
Ironic 团队在此宣布 OpenStack 2023.1(Ironic 23.4.0)的发布。这代表着为期六个月的开发周期的完成,该周期主要侧重于内部和扩展改进。这些改进包括改造数据库层以提高性能并确保与 SQLAlchemy 新版本的兼容性,增强 ironic-conductor 服务以通过 ironic-prometheus-exporter 将应用程序指标导出到 prometheus,以及添加新的 API 概念节点分片以帮助扩展频繁调用 Ironic API 的服务。新的 Ironic 版本还附带了大量 Ironic 服务和硬件驱动程序的错误修复。我们真诚地希望您喜欢它!
新特性¶
添加了对
service角色的支持,该角色用于服务到服务的通信,例如对于ironic-inspector、nova-compute或networking-baremetal需要与 Ironic 的 API 通信的情况。
添加了 Ironic 发送 conductor 进程指标以进行监控的能力。这需要使用新的
[metrics]backend选项值collector。以前,此数据只能通过使用 statsd 获得。这需要ironic-lib版本5.4.0或更高版本。可以使用[sensor_data]enable_for_conductor选项设置为 False 来禁用此功能。
添加了一个
[sensor_data]enable_for_nodes配置选项,允许操作员禁用通过消息总线通知程序发送节点指标数据。
添加了一个新的 gauge 指标
ConductorManager.PowerSyncNodesCount,用于跟踪被认为需要进行电源状态同步的节点。
添加了一个新的 gauge 指标
ConductorManager.PowerSyncRecoveryNodeCount,它表示正在评估进行电源状态恢复检查的节点数。
添加了一个新的 gauge 指标
ConductorManager.SyncLocalStateNodeCount,它表示由 conductor 本地跟踪的节点数。
现在,在新的 ironic.conf [fake] 部分中,可以配置用于模拟驱动程序的随机等待时间。每个受支持的驱动程序都有一个配置选项来控制延迟。这些延迟应用于通常在其他驱动程序中阻塞的操作。这允许为 ironic 本身的性能和功能测试安排更逼真的场景。
添加了对在节点上设置分片键以及按分片过滤节点或端口列表的支持。此分片键不在 Ironic 内部用于任何目的,而是旨在允许 API 客户端过滤一部分节点或端口。能够仅获取一部分节点或端口对于并行化需要对所有节点或端口执行的任何操作任务非常有用。
添加了对查询已分片或未分片节点的的支持。这对于允许操作员查找未分配分片键的节点非常有用。
添加了对通过
/v1/shards查询分片列表的支持。此端点将返回当前分配的分片键列表以及分配了这些键的节点数。使用此 API 端点,操作员可以查看分片方式的高级列表。
已知问题¶
通过消息总线通知程序发送传感器数据(例如,使用
[metrics]backend配置选项的collector在专用 API 服务进程或实例上)目前不受支持。此功能需要定期任务来触发将指标消息发送到消息总线通知程序。
升级说明¶
Ironic 现在支持
service角色,该角色在system范围以及project范围内可用。此功能用于服务到服务的通信(如果需要)。有效的访问权限类似于manager或owner范围的管理员权限。
两个 statsd 指标名称已被修改,以向统计指标的消费者提供结构清晰性和一致性。统计指标的消费者可能需要更新其仪表板,因为
post_clean_step_hook指标现在命名为AgentBase.post_clean_step_hook,并且post_deploy_step_hook现在命名为AgentBase.post_deploy_step_hook。
弃用说明¶
以
send_sensor开头的[conductor]配置组中的设置已被弃用并移动到[sensor_data]配置组。名称已更新为更短、更易于操作员使用的名称。
错误修复¶
在中止清理时,
last_error字段不再为空。现在,它在状态转换为clean failed时填充。
在清理或部署失败时,
last_error字段不再临时设置为None,而电源关闭操作正在运行时。
修复了一个问题,即如果节点启用了控制台但缺少 pid 文件,则无法禁用控制台以及重新启动控制台,这使得控制台功能无法使用。
修复了在某些情况下,在 conductor 接管相关的情况下,自动分配的控制台端口可能在同一主机上发生冲突的问题。
有关更多信息,请参见 story 2010489。
修复了数据库 API 内部检查,以在完成检查后更新
inspection_finished_at字段。
修复了在线升级逻辑中的一个问题,节点 Traits 和 BIOS 设置的数据库模型导致在线数据迁移时出现错误。这是因为这些表最初是作为 Nodes 数据库表的扩展创建的,并且数据库的模式略有不同,以至于如果在这些表中存在要迁移的数据(如果早期 BIOS 设置采用者在升级到 Ironic 的 Yoga 版本之前在数据库中拥有数据),则会发生错误。
在线升级参数现在在适用时替换备用主键名称。
当停止 conductor 服务时,它现在将继续响应 RPC 请求,直到
[DEFAULT]hash_ring_reset_interval经过,从而允许在 conductor 取消注册后完成集群上的哈希环重置。这将提高集群在缩减或推出更新时的可靠性。仅当在线 conductor 超过一个时,才会发生此延迟,以便在单节点 ironic 安装(bifrost、metal3)上实现快速重启。
其他说明¶
oslo_concurrencty.lockutils模块的默认日志级别已更改为WARNING。默认情况下,调试日志记录会产生大量噪音。希望查看此模块调试日志记录的操作员可以使用[DEFAULT]default_log_levels配置选项。