第 2 章 MTC 发行注记


2.1. Migration Toolkit for Containers 1.8 发行注记

该版本的 Migration Toolkit for Containers 发行注记介绍了新的功能和增强功能、已弃用的功能以及已知的问题。

MTC(Migration Toolkit for Containers)可让您按照命名空间将应用程序工作负载在不同 OpenShift Container Platform 集群间进行迁移。

MTC 提供了一个基于 Kubernetes 自定义资源的 web 控制台和 API,可帮助您控制迁移并最小化应用程序停机时间。

有关 MTC 支持政策的信息,请参阅 OpenShift Application and Cluster Migration Solutions,它是 Red Hat OpenShift Container Platform 生命周期政策的一部分。

2.1.1. Migration Toolkit for Containers 1.8.9 发行注记

2.1.1.1. 已解决的问题

MTC (Migration Toolkit for Containers) 1.8.9 有以下主要解决的问题:

虚拟机在 MigPlan 删除后重启迁移

在此次更新之前,删除 MigPlan 会触发不必要的虚拟机(VM)迁移。这会导致虚拟机恢复,从而导致迁移失败。此发行版本引入了一个修复,它可防止虚拟机在 MigPlan 主动被删除时进行迁移。因此,当 MigPlans 被删除时,虚拟机不再意外迁移,确保用户稳定环境。(MIG-1749)

在将虚拟机从 hostpath-csi-basic 迁移到 hostpath-csi-pvc-block 后,virt-launcher pod 会处于待处理状态

在此次更新之前,由于 pod 反关联性与绑定卷冲突,virt-launcher pod 会在迁移虚拟机后停止。这会导致虚拟机迁移失败,从而导致 virt-launcher pod 卡住。此发行版本解决了 pod 反关联性问题,允许在不同的节点上调度。现在,您可以在没有 pod 处于待处理状态的情况下将虚拟机从 hostpath-csi-basic 迁移到 hostpath-csi-pvc-block,从而提高了整体迁移过程效率。(MIG-1750)

因为源项目中的 LimitRange "NIL" 导致 migration-controller panics

在此次更新之前,openshift-migration 命名空间中的 LimitRange 中缺少 Min spec 会导致 migration-controller pod 出现 panic,会破坏用户体验并防止卷迁移成功。在这个版本中,当遇到 LimitRange 设置为 Nil 时,migration-controller pod 不再崩溃。因此,rsync pod 现在遵循指定的限制,改进了迁移过程稳定性,并消除源命名空间中的崩溃循环。

2.1.2. Migration Toolkit for Containers 1.8.8 发行注记

2.1.2.1. 已解决的问题

MTC (Migration Toolkit for Containers) 1.8.8 有以下主要解决的问题:

存储实时迁移状态检测失败

检测存储实时迁移状态时出错。这个版本解决了这个问题。(MIG-1746)

2.1.3. Migration Toolkit for Containers 1.8.7 发行注记

2.1.3.1. 已解决的问题

MTC (Migration Toolkit for Containers) 1.8.7 有以下主要解决的问题:

因为 OADP 版本和过时的 DPA 规格不兼容,MTC 迁移会停留在 OpenShift Container Platform 4.19 上的 Prepare 阶段

当在 OpenShift Container Platform 4.19 上运行 MTC 1.8.7 时,进程会在 Prepare 阶段停止,迁移计划会在 Suspended 阶段输入。

根本原因是部署比 1.5.0 不兼容的 OADP 版本,其 DataProtectionApplication (DPA)规格格式与 OpenShift Container Platform 不兼容。(MIG-1735)

在 MTC 中使用新的 AWS 插件时,Velero 备份会失败并显示 文件已经关闭 的错误

在阶段或完全迁移过程中,使用新 Amazon Web Services (AWS)插件配置的 OpenShift Container Platform 集群上带有 OADP 的 MTC 的备份过程会间歇性地失败。您可以在 Velero 日志中看到以下错误:

error="read |0: file already closed"
Copy to Clipboard Toggle word wrap

作为临时解决方案,请通过执行以下操作来使用旧的 AWS 插件:

  1. 在 MigrationController 自定义资源(CR)中设置 velero_use_legacy_aws: true 。
  2. 重启 MTC Operator 以应用更改。
  3. 验证 cloud-credentials secret 的 AWS 凭证。

(MIG-1738)

2.1.4. Migration Toolkit for Containers 1.8.6 发行注记

2.1.4.1. 技术变化

不支持命名空间的多个迁移计划

MTC 版本 1.8.6 及更新的版本不支持单个命名空间的多个迁移计划。

虚拟机存储迁移

VM 存储迁移功能从技术预览(TP)状态改为正式发布(GA)。

2.1.4.2. 已解决的问题

MTC 1.8.6 有以下主要解决的问题:

UI 在迁移计划向导中的命名空间搜索过程中失败

当在迁移计划向导的 Select Namespace 步骤中搜索命名空间时,用户界面(UI)会在点 Search 后失败并消失。浏览器控制台会显示一个 JavaScript 错误,表示已访问了未定义值。这个问题已在 MTC 1.8.6 中解决。(MIG-1704)

因为协调失败而无法创建迁移计划

在 MTC 中,当创建迁移计划时,UI 会保留在 持久性卷中,您无法继续。出现这个问题的原因是,一个关键协调失败,并在尝试从后端获取迁移计划时返回一个 404 API 错误。这些问题导致迁移计划处于 Not Ready 状态,您将无法继续。这个问题已在 MTC 1.8.6 中解决。(MIG-1705)

StageBackup 阶段后,迁移过程无法完成

迁移 Django 和 PostgreSQL 应用时,在 StageBackup 阶段后迁移将无法完成。虽然源命名空间中的所有 pod 在迁移开始前健康,但在迁移后,在迁移和终止源集群上的 pod 时,jango pod 会失败,并显示 CrashLoopBackOff 错误。这个问题已在 MTC 1.8.6 中解决。(MIG-1707)

虽然因为误导 UI 状态而导致失败的阶段,但迁移显示为成功

使用 MTC 运行迁移后,UI 会错误地表示迁移成功,状态显示为 Migration succeeded。但是,直接卷迁移(DVM)阶段会失败。这个误导状态会出现在 MigrationMigration Details 页面中。这个问题已在 MTC 1.8.6 中解决。(MIG-1711)

对于没有持久性卷声明的命名空间,持久性卷页面会无限期挂起

当迁移计划包含没有任何持久性卷声明(PVC)的命名空间时,持久性卷 选择页面会无限期保留,并显示以下信息: 发现附加到源 projects…​ 的持久性卷。 该页面永远不会完成加载,阻止您继续迁移。 这个问题已在 MTC 1.8.6 中解决。(MIG-1713)

2.1.4.3. 已知问题

MTC 1.8.6 有以下已知问题:

迁移失败状态的报告不一致

当迁移计划被有意错误时,在命名空间迁移状态报告中存在一个差异。 虽然分布式卷迁移(DVM)阶段可以正确地注册失败,但此故障不会持续反映用户界面(UI)或迁移计划的 YAML 表示。 

此问题不仅仅限于异常或意外情况。在某些情况下,如应用导致 DVM 阶段失败的网络限制时,UI 仍然会报告迁移状态成功。这个行为与之前在 MIG-1711 中观察到的内容类似,但在不同情况下发生。(MIG-1719) 

2.1.5. Migration Toolkit for Containers 1.8.5 发行注记

2.1.5.1. 技术变化

Migration Toolkit for Containers (MTC) 1.8.5 有以下技术更改:

联邦信息处理标准(FIPS)

FIPS 是美国联邦政府根据联邦信息处理标准(FISMA)开发的一组计算机安全标准。

从 1.8.5 开始,MTC 是为 FIPS 合规性而设计的。

2.1.5.2. 已解决的问题

如需更多信息,请参阅 JIRA 中的 MTC 1.8.5 解决的问题 列表。

2.1.5.3. 已知问题

MTC 1.8.5 有以下已知问题:

在 OpenShift Container Platform 4.12 中无法迁移服务帐户关联的 SCC

无法迁移 OpenShift Container Platform 4.12 中服务帐户的相关安全性上下文约束 (SCC)。计划在以后的 MTC 版本中解决这个问题。(MIG-1454)

MTC 在存储类转换时不会修补 statefulset.spec.volumeClaimTemplates[].spec.storageClassName

在为 StatefulSet 应用程序运行存储类转换时,MTC 会更新 .spec.volumeClaimTemplates[].metadata.name 中的持久性卷声明 (PVC) 引用以使用迁移的 PVC 名称。MTC 不会更新 spec.volumeClaimTemplates[].spec.storageClassName,这会导致应用程序扩展。另外,新副本会消耗在旧存储类下创建的 PVC,而不是迁移的存储类。(MIG-1660)

执行 StorageClass 转换会触发命名空间中的所有应用程序的缩减

当在多个应用程序上运行 StorageClass 转换时,MTC 会在 cutover 阶段缩减所有应用程序,包括不涉及迁移的应用程序。(MIG-1661)

在更改了后,MigPlan 无法编辑为与源集群具有相同的目标命名空间

在 MTC UI 中创建 MigPlan 时将目标命名空间更改为与源命名空间不同的内容后,您无法再次编辑 MigPlan,使目标命名空间与源命名空间相同。(MIG-1600)

迁移的构建器 Pod 无法推送到镜像 registry

在将包含 BuildConfig 的应用从源迁移到目标集群时,构建器 Pod 会遇到错误,无法将镜像推送到镜像 registry。(BZ#2234781)

冲突条件在显示后会在短时间内清除

在创建会导致冲突错误的新状态迁移计划时,这个错误会在显示后被清除。(BZ#2144299)

设置 pv_resizing_threshold 后不会显示 PvCapacityAdjustmentRequired 警告

在调整 pv_resizing_threshold 后,PvCapacityAdjustmentRequired 警告信息将不会出现在迁移计划中。(BZ#2270160)

有关所有已知问题的完整列表,请参阅 JIRA 中的 MTC 1.8.5 已知问题列表。

2.1.6. Migration Toolkit for Containers 1.8.4 发行注记

2.1.6.1. 技术变化

Migration Toolkit for Containers (MTC) 1.8.4 有以下技术更改:

  • MTC 1.8.4 扩展其依赖项解析,使其包含对使用 OpenShift API for Data Protection (OADP) 1.4 的支持。

支持带有 DirectVolumeMigration 的 KubeVirt 虚拟机

MTC 1.8.4 添加了对带有直接卷迁移(DVM)的 KubeVirt 虚拟机(VM)的支持。

2.1.6.2. 已解决的问题

MTC 1.8.4 包括以下主要解决的问题:

安装 OpenShift Virtualization 时 Ansible Operator 无法正常工作

安装 OpenShift Virtualization 的 python3-openshift 软件包中有一个错误,在处理任务的过程中会返回一个例外 ValueError: too many values to unpack。早期版本的 MTC 会受到影响,MTC 1.8.4 提供了一个临时解决方案。更新至 MTC 1.8.4 代表您不再会受到此问题的影响。(OCPBUGS-38116)

在创建迁移计划时,UI 会在 Namespaces 步骤中卡住

当尝试从 MTC UI 创建迁移计划时,迁移计划向导会停留在 Namespaces 步骤中。这个问题已在 MTC 1.8.4 中解决。(MIG-1597)

迁移失败,并显示版本 kubevirt/v1 中没有匹配的虚拟机类型

在应用程序迁移过程中,所有必要的步骤(包括备份、DVM 和恢复)都会成功完成。但是,迁移被标记为未成功并带有错误信息 no matches for kind Virtual machine in version kubevirt/v1(MIG-1594)

当迁移到与源命名空间不同的命名空间时,直接卷迁移会失败

在执行从源集群到目标集群的迁移时,如果目标命名空间与源命名空间不同,DVM 会失败。(MIG-1592)

直接镜像迁移不遵循 migplan 中的标签选择器

使用 Direct Image Migration (DIM) 时,如果在迁移计划上设置了标签选择器,DIM 并不会遵循它,并尝试迁移命名空间中的所有镜像流。(MIG-1533)

2.1.6.3. 已知问题

MTC 1.8.4 包括以下已知的问题:

在 OpenShift Container Platform 4.12 中无法迁移服务帐户关联的 SCC

无法迁移 OpenShift Container Platform 4.12 中服务帐户的相关安全性上下文约束 (SCC)。计划在以后的 MTC 版本中解决这个问题。(MIG-1454)

rsync pod 无法启动,导致 DVM 阶段失败

因为权限问题,Rsync pod 无法启动会导致 DVM 阶段失败。

(BZ#2231403)

迁移的构建器 pod 无法推送到镜像 registry

在将包含 BuildConfig 的应用程序迁移到目标集群时,构建器 Pod 会导致错误,无法将镜像推送到镜像 registry。

(BZ#2234781)

在创建后,冲突条件会在短暂的时间段内被清除

在创建会导致冲突错误的新状态迁移计划时,这个错误会在显示后被清除。

(BZ#2144299)

在设置 pv_resizing_threshold 后,PvCapacityAdjustmentRequired 警告信息没有显示

在调整 pv_resizing_threshold 后,PvCapacityAdjustmentRequired 警告信息将不会出现在迁移计划中。

(BZ#2270160)

2.1.7. Migration Toolkit for Containers 1.8.3 发行注记

2.1.7.1. 技术变化

Migration Toolkit for Containers (MTC) 1.8.3 有以下技术变化:

现在支持 OADP 1.3

MTC 1.8.3 添加了对 OpenShift API for Data Protection (OADP) 的支持,作为 MTC 1.8.z 的依赖。

2.1.7.2. 已解决的问题

MTC 1.8.3 包括以下主要解决的问题:

CVE-2024-24786: Golang protobuf 模块中的一个错误会导致 unmarshal 函数进入死循环

在以前的 MTC 版本中,在 Golang 的 protobuf 模块中发现了一个漏洞,在处理某些无效输入时,unmarshal 函数会进入一个死循环。因此,攻击者可以利用这个漏洞,通过一个精心构建的无效输入,会导致这个函数进入死循环。

在这个版本中,unmarshal 功能可以正常工作。

如需更多信息,请参阅 CVE-2024-24786

CVE-2023-45857: Axios Cross-Site Request Forgery 安全漏洞

在以前的 MTC 版本中,在 Axios 1.5.1 中发现了一个漏洞,它会被利用来发现存储在 Cookie 中的敏感的 XSRF-TOKEN,方法是在向主机发出的每个请求的 HTTP 标头 X-XSRF-TOKEN 中包括它。

如需更多信息,请参阅 CVE-2023-45857

当源工作负载没有静止时,Restic 备份无法正常工作

在以前的 MTC 版本中,当使用路由部署应用程序时,一些文件不会被迁移。当源工作负载取消选择 quiesce 选项时,Restic 备份无法正常工作。

这个问题已在 MTC 1.8.3 中解决。

如需更多信息,请参阅 BZ#2242064

因为 Velero 中的一个不被支持的值错误,Migration Controller 无法安装

因为 Velero 不支持的值错误,MigrationController 无法安装。将 OADP 1.3.0 更新至 OADP 1.3.1 可解决这个问题。如需更多信息,请参阅 BZ#2267018

这个问题已在 MTC 1.8.3 中解决。

有关所有已解决的问题的完整列表,请参阅 JIRA 中的 MTC 1.8.3 解决的问题 列表。

2.1.7.3. 已知问题

MTC (Migration Toolkit for Containers) 1.8.3 有以下已知问题:

安装 OpenShift Virtualization 时 Ansible Operator 无法正常工作

安装 OpenShift Virtualization 的 python3-openshift 软件包中有一个错误,在处理任务的过程中会返回一个例外 ValueError: too many values to unpack。MTC 1.8.4 实施了一个临时解决方案。更新至 MTC 1.8.4 代表您不再会受到此问题的影响。(OCPBUGS-38116)

在 OpenShift Container Platform 4.12 中无法迁移服务帐户关联的 SCC

OpenShift Container Platform 版本 4.12 中服务帐户的相关安全性上下文约束 (SCC) 无法迁移。计划在以后的 MTC 版本中解决这个问题。(MIG-1454)

有关所有已知问题的完整列表,请参阅 JIRA 中的 MTC 1.8.3 已知问题列表。

2.1.8. Migration Toolkit for Containers 1.8.2 发行注记

2.1.8.1. 已解决的问题

此发行版本有以下主要解决的问题:

在设置自定义 CA 复制存储库后备份阶段失败

在以前的 MTC 版本中,在编辑复制存储库后,添加自定义 CA 证书、成功连接仓库并触发迁移,在备份阶段出现问题。

CVE-2023-26136: 在 4.1.3 之前使用 tough-cookie 软件包会受到 Prototype Pollution 的攻击

在以前的 (MTC) 版本中,MTC 中使用的 tough-cookie 软件包版本 4.1.3 会被受到原型处理的影响。发生此漏洞的原因是,当 rejectPublicSuffixes 的值设置为 false 时,CookieJar 无法正确处理 Cookie。

如需了解更多详细信息,请参阅 (CVE-2023-26136)

CVE-2022-25883 openshift-migration-ui-container: nodejs-semver: Regular expression 拒绝服务

在以前的(MTC)版本中,当不受信任的用户数据作为 newRange 提供时,MTC 中使用的 7.5.2 之前的 semver 软件包版本容易受到 Regular Expression Denial 的 Service (ReDoS)的攻击。

如需了解更多详细信息,请参阅 (CVE-2022-25883)

2.1.8.2. 已知问题

MTC 1.8.2 包括以下已知的问题:

安装 OpenShift Virtualization 时 Ansible Operator 无法正常工作

安装 OpenShift Virtualization 的 python3-openshift 软件包中有一个错误,在处理任务的过程中会返回一个例外 ValueError: too many values to unpack。MTC 1.8.4 实施了一个临时解决方案。更新至 MTC 1.8.4 代表您不再会受到此问题的影响。(OCPBUGS-38116)

2.1.9. Migration Toolkit for Containers 1.8.1 发行注记

2.1.9.1. 已解决的问题

MTC (Migration Toolkit for Containers) 1.8.1 解决了以下主要问题:

CVE-2023-39325: golang: net/http, x/net/http2: 快速流重置可能会导致过量工作

在处理 HTTP/2 协议(被 MTC 使用)中的多路流中发现了一个安全漏洞。 客户端可以重复请求新的多路流,并立即发送 RST_STREAM 帧来取消它。这在设置和分离流方面为服务器创建额外的工作负载,同时避免每个连接的最大活跃流数量的服务器端限制,从而导致因为服务器资源消耗而拒绝服务。(BZ#2245079)

建议升级到 MTC 1.8.1 或更高版本,从而解决了这个问题。

如需了解更多详细信息,请参阅 (CVE-2023-39325)(CVE-2023-44487)

2.1.9.2. 已知问题

MTC (Migration Toolkit for Containers) 1.8.1 有以下已知问题:

安装 OpenShift Virtualization 时 Ansible Operator 无法正常工作

安装 OpenShift Virtualization 的 python3-openshift 软件包中存在一个错误。在任务执行期间会返回一个例外 ValueError: too too value to unpack。MTC 1.8.4 实施了一个临时解决方案。更新至 MTC 1.8.4 代表您不再会受到此问题的影响。(OCPBUGS-38116)

2.1.10. Migration Toolkit for Containers 1.8.0 发行注记

2.1.10.1. 已解决的问题

MTC (Migration Toolkit for Containers) 1.8.0 解决了以下问题:

间接迁移会一直处于备份阶段

在以前的版本中,因为 InvalidImageName 错误,间接迁移会卡住在备份阶段。 ((BZ#2233097))

PodVolumeRestore 会保留在 In Progress 状态,使迁移一直处于 Stage Restore 状态

在以前的版本中,在执行间接迁移时,迁移会停留在 Stage Restore 步骤中,等待 podvolumerestore 完成。 ((BZ#2233868))

迁移的应用程序无法从目标集群上的内部 registry 中拉取镜像

在以前的版本中,在将应用程序迁移到目标集群时,迁移的应用程序无法从内部镜像 registry 中拉取镜像,从而导致 应用程序失败。 ((BZ#2233103))

由于授权问题,在 Azure 上迁移失败

在以前的版本中,在 Azure 集群中,当备份到 Azure 存储时,迁移会在 Backup 阶段失败。((BZ#2238974))

2.1.10.2. 已知问题

MTC 1.8.0 包括以下已知的问题:

安装 OpenShift Virtualization 时 Ansible Operator 无法正常工作

安装 OpenShift Virtualization 的 python3-openshift 软件包中有一个错误,在处理任务的过程中会返回一个例外 ValueError: too many values to unpack。MTC 1.8.4 实施了一个临时解决方案。更新至 MTC 1.8.4 代表您不再会受到此问题的影响。(OCPBUGS-38116)

升级 MTC 1.7.x 1.8.x 时不会删除旧的 Restic pod

在这个发行版本中,当将 MTC Operator 从 1.7.x 升级到 1.8.x 时,旧的 Restic pod 不会被删除。因此,在升级后,Restic 和 node-agent pod 仍然可以在命名空间中看见。((BZ#2236829))

迁移的构建器 pod 无法推送到镜像 registry

在本发行版本中,在将包含 BuildConfig 的应用程序从源迁移到目标集群时,builder pod 会导致错误,无法将镜像推送到镜像 registry。((BZ#2234781))

[UI] CA 捆绑包文件字段没有被正确清除

在本发行版本中,在启用 Require SSL 验证 并将内容添加到 MigStorage 的 MCG NooBaa 存储桶的 CA 捆绑包文件中后,连接会如预期失败。但是,通过删除 CA 捆绑包内容并清除 Require SSL 验证 来恢复这些更改时,连接仍会失败。该问题仅通过删除和重新添加存储库来解决。((BZ#2240052))

在设置自定义 CA 复制存储库后备份阶段失败

在(MTC)编辑复制存储库后,添加自定义 CA 证书、成功连接仓库并触发迁移,在备份阶段出现问题。

这个问题已在 MTC 1.8.2 中解决。

CVE-2023-26136: 在 4.1.3 之前使用 tough-cookie 软件包会受到 Prototype Pollution 的攻击

MTC 中使用的 4.1.3 tough-cookie 软件包版本之前(在 MTC 中使用)容易受到对轮询建模的攻击。此漏洞发生,因为当 rejectPublicSuffixes 的值设置为 false 时,CookieJar 无法正确处理 Cookie。

这个问题已在 MTC 1.8.2 中解决。

如需了解更多详细信息,请参阅 (CVE-2023-26136)

CVE-2022-25883 openshift-migration-ui-container: nodejs-semver: Regular expression 拒绝服务

在以前的(MTC)版本中,当不受信任的用户数据作为 newRange 提供时,MTC 中使用的 7.5.2 之前的 semver 软件包版本容易受到 Regular Expression Denial 的 Service (ReDoS)的攻击。

这个问题已在 MTC 1.8.2 中解决。

如需了解更多详细信息,请参阅 (CVE-2022-25883)

2.1.10.3. 技术变化

此发行版本有以下技术更改:

  • 从 OpenShift Container Platform 3 迁移到 OpenShift Container Platform 4 需要旧的 MTC Operator 和 MTC 1.7.x 的 Migration Toolkit。
  • 不支持从 MTC 1.7.x 迁移到 MTC 1.8.x。
  • 您必须使用 MTC 1.7.x 来迁移使用 OpenShift Container Platform 4.9 或更早版本源的任何内容。

    • MTC 1.7.x 必须在源和目标中使用。
  • Migration Toolkit for Containers (MTC) 1.8.x 仅支持从 OpenShift Container Platform 4.10 或更高版本迁移到 OpenShift Container Platform 4.10 或更高版本。对于仅涉及集群版本 4.10 或更高版本的迁移,可以使用 1.7.x 或 1.8.x。但是,在源和目标上 MTC 1.Y.z 必须相同。

    • 不支持从源 MTC 1.7.x 迁移到目标 MTC 1.8.x。
    • 不支持从源 MTC 1.8.x 迁移到目标 MTC 1.7.x。
    • 支持从源 MTC 1.7.x 迁移到目标 MTC 1.7.x。
    • 支持从源 MTC 1.8.x 迁移到目标 MTC 1.8.x。
  • MTC 1.8.x 默认会安装 OADP 1.2.x。
  • 从 MTC 1.7.x 升级到 MTC 1.8.0,需要手动将 OADP 频道改为 1.2。如果没有这样做,Operator 升级会失败。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat