使用 Biosdevname 的网络接口资源

https://bugs.launchpad.net/ironic-python-agent/+bug/1635351 https://bugs.launchpad.net/ironic-inspector/+bug/1635351

目前,硬件检查会收集网络接口的 MAC 地址、IP 地址和内核分配的名称,但不会收集 BIOS 分配的网络接口名称。部署者需要网络接口的 BIOS 分配名称,以便在多网卡节点上设置网络配置自动化。 在此规范中,我们希望在 ironic-python-agent 的 default 收集器收集的网络接口库存中添加一个额外的字段 ‘biosdevname’。 该额外字段使用 biosdevname 工具获取。 一旦节点检查成功,从 ramdisk 收集的硬件详细信息将以 JSON 编码字符串的形式存储在 swift 对象中。

问题描述

内核应用于网络接口的经典命名方案是简单地为所有接口分配以“eth0”、“eth1”等开头的名称,因为驱动程序探测到它们。 内核名称不是固定的,每次启动都会更改。 这可能会产生严重的安全隐患,例如,为某些命名方案编写的防火墙规则对不可预测的名称更改很敏感。

为了解决这个问题,我们需要网络接口的稳定且一致的命名方案。 一种解决方案是名为 biosdevname 的工具。 Biosdevname 在某些固件接口中查找固定的插槽拓扑信息,并使用它们为接口分配固定的名称,这些名称包含它们在主板上的物理位置。 这将有助于提供内核名称与系统之间一致的映射。

从收集器收集的数据将使我们能够创建配置文件来编写节点配置脚本。 例如,系统启动时,它使用这些文件来确定要启动哪些网络接口以及如何配置它们。 因此,当我们有多个网卡时,我们需要网络接口的唯一名称来进行配置,这可以通过提出的规范获得。

提议的变更

拟议的更改是在 ironic-python-agent inspector 模块的 default 收集器收集的网络接口库存中添加一个 ‘biosdevname’ 字段,该模块将返回包含所有库存的列表。

请求的更改将在 NetworkInterface、HardwareManager 和 GenericHardwareManager 类中进行。 该列表将包含包含添加到现有网络接口详细信息的 biosdevname 字段的字典。

"inventory":
{
    ...,
    ...,
    "interface":[
    {
        ...,
        ...,
        "name": "eth0",
        "ip": "172.24.42.100",
        "mac: "52:54:00:52:bc:2c",
        "biosdevname": "em0",
        ...,
        ...,
    }
],
...,
...,
}

备选方案

数据模型影响

HTTP API 影响

客户端 (CLI) 影响

Ironic python agent 影响

上述更改将在 IPA 中实现

性能和可扩展性影响

安全影响

部署者影响

开发者影响

实现

负责人

主要负责人

Annie Lezil <annie-lezil>

工作项

  • 创建一个用于 biosdevname 的工具模块,以收集 BIOS 分配的名称。

  • 在 ironic-python-agent inspector 模块的 default 收集器收集的网络接口库存中添加一个额外的字段。

  • 记录新功能。

依赖项

测试

将添加单元测试用例。