Rancher Elemental Bare Metal 网络接口名称变更问题
环境中的 Bare Metal 节点通过 ifnames=1 开启了网络接口命名预测,但在进行 OS 升级后,接口名称由 ens* 变成了 enp*,导致原有的 bond 配置无法生效,网络中断。
环境信息
- Rancher Prime:v2.13.1-ent2-rc1
- Elemental Helm Chart:108.0.0+up1.7.4
- SUSE Linux Micro:6.0(2.1.3-3.64 / 2.1.3-6.216)
- SUSE OS Management UI Plugin:3.0.1
根本原因分析
问题是由 SUSE-RU-2025:20203-1 引入的 systemd 网络接口命名方案变更所致:https://lists.suse.com/pipermail/sle-updates/2025-June/039721.html
该补丁将 systemd 和 udev 升级到 254.24-1.1 版本,并包含 PED-12317,用于保留 SLE 15 系列所使用的网络设备命名方案。
测试结果如下:
- 原始 2.1.3-3.64 镜像使用 systemd 254.9-1.9,
ID_NET_NAMING_SCHEME默认为 v253。 - 2.1.3-6.216 镜像使用 systemd 254.27-4.1,
ID_NET_NAMING_SCHEME默认为 sle15-sp4。
在受影响的 PCI bridge 拓扑中,sle15-sp4 命名方案使 net_id 仅根据 PCI 路径生成 ID_NET_NAME_PATH=enp* 候选名称,而不再生成对应的 ID_NET_NAME_SLOT=ens* 候选名称。
因此,在 v253 命名方案下原本命名为 ens* 的网络接口,在升级到 2.1.3-6.216 后会被重命名为 enp*。
问题复现
部署 Rancher Prime
使用 Docker 部署 Rancher Prime:
1 | docker run -d --restart=unless-stopped --name rancher \ |
安装 SUSE OS Management UI 插件和 Elemental
从 Rancher Prime UI 安装以下组件:


创建 MachineRegistration
在 local 集群导入如下 YAML:
1 | apiVersion: elemental.cattle.io/v1beta1 |
创建 SeedImage
在 local 集群导入如下 YAML:
1 | # 用于测试从 2.1.3-3.64 升级到 2.1.3-6.216 |
测试 1:从 2.1.3-3.64 升级到 2.1.3-6.216
使用 Harvester 等虚拟化环境不利于模拟 Bare Metal PCI bridge 拓扑,所以使用 QEMU / KVM 方式进行复现。
创建 Elemental Machine
使用 QEMU / KVM 模拟 Bare Metal PCI bridge:
1 | PCI root bus 0000:00 |
准备一台 KVM 主机,并下载已构建的两个 RAW 介质文件:
1 | wget --no-check-certificate "https://<SEED_IMAGE_URL>/test-2026-08-06T06:53:01Z.raw" -O /root/test-213-364.raw |
在 KVM 主机上安装依赖项:
1 | apt-get update |
创建专用实验目录和 RAW 工作副本:
1 | mkdir -p /root/elemental-ifname-repro |
创建 SSDT,用于模拟父桥的物理插槽:
1 | cd /root/elemental-ifname-repro |
启动持久化虚拟 TPM:
1 | cd /root/elemental-ifname-repro |
启动 QEMU:
1 | cd /root/elemental-ifname-repro |
虚拟机最初会被 -S 选项暂停。在恢复运行之前,禁用四个测试接口的链路。保持这些接口断开,可防止 NetworkManager 在主机注册期间等待未配置测试接口的 DHCP:
1 | printf '%s\n' \ |
确认主机已成功注册到 Rancher Prime:

登录 Elemental Machine:
1 | # 从 KVM 主机登录 |
登录后,启用测试网络接口端口:
1 | printf '%s\n' \ |
检查网络接口状态:
1 | ip link show | grep -E "ens|enp|bond" |


ens4 是管理网络接口,不位于 PCI bridge 之后,主要用于登录。
检查操作系统信息:
1 | grep -E '^(PRETTY_NAME|IMAGE_TAG)=' /etc/os-release |

检查 SSDT 和物理插槽映射:
1 | ls -l /sys/firmware/acpi/tables/SSDT |

检查旧命名方案的候选名称:
1 | for n in ens2f0 ens2f1 ens7f0 ens7f1; do |

在 2.1.3-3.64 版本中,ID_NET_NAMING_SCHEME 默认为 v253。
在模拟的 PCI bridge 拓扑中,net_id 会为每个测试接口同时生成 ID_NET_NAME_SLOT 和 ID_NET_NAME_PATH 候选名称。系统选用基于插槽的候选名称,因而得到 ens2f0、ens2f1、ens7f0 和 ens7f1 等接口名称。
创建 Elemental RKE2 集群
使用该 Elemental Machine 创建 RKE2 集群:

使用 ManagedOSImage 升级操作系统
在 local 集群导入如下 YAML:
1 | apiVersion: elemental.cattle.io/v1beta1 |
验证升级后的接口命名
检查网络接口状态:
1 | ip link show | grep -E "ens|enp|bond" |


检查操作系统信息:
1 | grep -E '^(PRETTY_NAME|IMAGE_TAG)=' /etc/os-release |

检查 SSDT 和物理插槽映射:
1 | ls -l /sys/firmware/acpi/tables/SSDT |

检查新命名方案的候选名称:
1 | for n in enp1s0f0 enp1s0f1 enp2s0f0 enp2s0f1; do |

测试结论
从 2.1.3-3.64 升级到 2.1.3-6.216 后,成功复现了该问题。
升级后,ID_NET_NAMING_SCHEME 从 v253 变为 sle15-sp4。sle15-sp4 方案展开为:v238+bridge_no_slot+slot_function_id+16bit_index
由于该命名方案包含 bridge_no_slot,net_id 不会为 PCI bridge 后的测试接口生成 ID_NET_NAME_SLOT 候选名称,只会生成 ID_NET_NAME_PATH 候选名称,从而导致接口名称从 ens* 变为 enp*。
测试 2:直接安装 2.1.3-6.216
验证接口命名
将 RAW 介质替换为 test-213-6216.raw,然后启动 QEMU 进行验证。
检查网络接口状态:
1 | ip link show | grep -E "ens|enp|bond" |

检查操作系统信息:
1 | grep -E '^(PRETTY_NAME|IMAGE_TAG)=' /etc/os-release |

检查 SSDT 和物理插槽映射:
1 | ls -l /sys/firmware/acpi/tables/SSDT |

检查新命名方案的候选名称:
1 | for n in enp1s0f0 enp1s0f1 enp2s0f0 enp2s0f1; do |

测试结论
直接安装 2.1.3-6.216 时,也观察到了相同的接口命名行为。
直接安装的系统同样使用 ID_NET_NAMING_SCHEME=sle15-sp4,并且 net_id 仅为模拟 PCI bridge 后的接口生成 ID_NET_NAME_PATH 候选名称。
这证实接口名称变更并非由 Elemental 操作系统升级过程本身引起,而是与 2.1.3-6.216 镜像中所包含的 systemd/udev 版本的网络接口命名行为有关。
总体结论
测试表明,无论是从 2.1.3-3.64 升级到 2.1.3-6.216,还是直接安装 2.1.3-6.216,都可复现网络接口名称从 ens* 变为 enp* 的现象。
2.1.3-3.64 版本使用 systemd 254.9-1.9 和 v253 命名方案。在该方案下,net_id 会针对受影响的 PCI 拓扑同时生成基于插槽的(ID_NET_NAME_SLOT)和基于路径的(ID_NET_NAME_PATH)候选名称。
2.1.3-6.216 版本使用 systemd 254.27-4.1 和 sle15-sp4 命名方案。由于该方案包含 bridge_no_slot,系统不再为受影响 PCI bridge 后的接口生成基于插槽的候选名称。因此,这些接口会获得基于路径的 enp* 名称,而非之前基于插槽的 ens* 名称。
直接安装测试进一步证实,该行为与 2.1.3-6.216 镜像中包含的 systemd/udev 网络命名方案有关,而不是 Elemental 操作系统升级机制本身造成的。
Workaround
对于从旧版本升级的 Machine,可在 ManagedOSImage 中添加基于 enp* 接口名称或 MAC 地址的配置,例如:
1 | apiVersion: elemental.cattle.io/v1beta1 |
对于新安装的主机,可在 MachineRegistration 中添加基于 enp* 接口名称或 MAC 地址的配置,例如:
1 | apiVersion: elemental.cattle.io/v1beta1 |
Rancher Elemental Bare Metal 网络接口名称变更问题
https://warnerchen.github.io/2026/08/12/Rancher-Elemental-Bare-Metal-网络接口名称变更问题/