使用 Bare Metal 服务进行网络配置¶
概述¶
Ironic 包含几种不同的网络使用模型,并且很大程度上构建在用户请求附件的基础之上,无论是 nova-compute 服务代表 Nova 用户请求的,还是直接使用 vif 附件(openstack baremetal node vif attach 或 baremetal node vif attach 命令)。
Ironic 管理着与网络服务相关的 vif 请求的附件状态,并且根据所选的整体 网络接口,Ironic 将执行其他操作,例如将节点连接到完全独立的提供商网络,以提高整体运营安全性。
在 网络接口 中涵盖的底层 network_interface 在 Ironic 的整体模型和使用中具有重要作用,操作员应据此选择。
概念¶
术语¶
物理网络- 在本文档的上下文中,物理网络是指协同工作的逻辑网络结构。为了对基础设施进行建模,可以表示这种网络结构,并且由于相似的字段名称physical_network(指的是网络的命名和配置表示形式)而被过度使用。vif或VIF- 虚拟接口,最好描述为 Neutron 端口。对于 Ironic 而言,VIF 始终使用 Neutron 端口 ID 值(即 UUID 值)进行引用。VIF 可以在有限数量的物理网络上可用,具体取决于云的运行配置和运行约束。ML2- ML2 是 Neutron(网络服务)的插件模型。高级网络交互,包括第三方插件和社区插件,在此模型中用于实现各种操作。配置网络- 一个单独的逻辑网络,用于部署裸机节点,以将正在部署的节点与租户控制的已部署节点隔离。清理网络- 与配置网络类似,但用于机器进行清理操作的网络。绑定配置文件- 发送到 Neutron 的信息集合,包括端口类型,在 Ironic 的情况下,始终是VNIC_BAREMETAL,一个与裸机节点 UUID 匹配的host_id值,以及任何其他信息,例如稍后在本文档中将介绍的local_link_connection信息,它告诉 ML2 插件物理裸机端口连接的位置,从而能够适当地更新网络交换机结构。端口- 在本文档的上下文中,端口表示物理或逻辑连接。例如,在 Ironic 的上下文中,端口是连接到底层物理网络以供使用的可能的物理连接。而在 Neutron 的上下文中,端口是虚拟网络接口,或者在 Ironic 术语中,是一个VIF。端口组- 使用 Ironic 的 API 创建的端口组合,用于表示 LACP 或其他绑定网络接口,这些接口存在于网络结构和物理裸机节点之间。
网络接口¶
网络接口是管理节点网络交换的驱动程序接口之一。Ironic 服务中提供 3 个网络接口
noop接口用于独立部署,不执行任何网络交换;flat接口将所有节点放置到网络服务和物理设备上预配置的单个提供商网络中。节点在其整个生命周期中保持物理连接到此网络。根据需要更新提供的 VIF 附件记录,以获取新的 DHCP 记录。在使用此网络接口时,VIF 需要在物理连接裸机节点的相同网络上创建。neutron接口通过网络服务提供租户定义的网络,将租户网络彼此隔离,并与配置和清理提供商网络隔离。节点将在其生命周期中在这些网络之间移动。此接口需要网络服务支持连接到裸机服务器的交换机,以便对其进行编程。此接口通常需要使用 ML2 插件或其他 Neutron SDN 集成来促进网络结构中的端口配置操作。在使用 IPv6 时,强烈建议使用neutron接口,因为 Neutron 中使用dhcpv6-stateful配置模型进行 IPv6 也会自动创建多个地址记录以进行有状态地址解析。
要使用这些接口,需要在 ironic.conf 中使用 enabled_network_interfaces 设置启用它们。
VIF 附件流程¶
创建虚拟接口 (VIF) 时,操作发生在 Neutron 网络服务上,例如使用 openstack port create 命令,然后将端口 ID 提交给 Ironic 以促进 VIF 附件。
注意
使用 Nova 创建的实例可以在各种情况下创建 Neutron 端口。当使用 Nova 时,强烈建议显式声明端口作为 Nova 实例创建请求的一部分。当 Nova 请求 Ironic 部署节点时,nova 尝试将用户请求附加的所有 VIF 记录到 Ironic 中,然后生成用户友好的元数据作为结果。
当请求通过 Ironic API 将 VIF 附加到节点时,将使用以下排序标准来选择合适的未附加端口或端口组
要求端口或端口组没有物理网络,或者具有与 VIF 可配置的可用物理网络匹配的物理网络。
优先选择具有物理网络的端口和端口组,而不是没有物理网络的端口和端口组。
优先选择端口组而不是端口,优先选择启用 PXE 的端口。
注意
此序列还假定整体请求已发送到 Ironic,而没有用户声明的附件请求中的端口或端口组偏好。Nova 集成不支持显式声明要附加 VIF 的物理端口,这是与虚拟机不同的约束模型。
希望显式声明映射的用户应考虑直接使用 Ironic 来管理裸机资源。这是通过使用 --port-uuid <port_uuid> 选项与 baremetal node vif attach 命令一起完成的。
由于所有 VIF 都需要附加到端口组或独立端口,因此 VIF 的最大数量由 Ironic 中表示的配置和可用端口的数量决定,并受上述适用性标准的约束。
Ironic 将要附加任何提供的、选择的,甚至自我创建的 VIF,分为两个不同的步骤。
如果主机未处于活动状态
第一步,由于 bug 2106073,Ironic 向 Neutron 提供初始 host_id,以便 Neutron 可以执行任何延迟地址分配,以启用适当的网络映射。此初始绑定缺少所有细节以实现与确切端口的绑定。在短时间内,VIF 绑定在 Neutron 中可能显示为“ACTIVE”。
注意
如果端口在提交到 Ironic 之前已绑定,并且我们必须执行初始绑定,则端口将被解绑并在工作流程期间重新绑定。
一旦我们将实例交给用户,Ironic 就会设置物理端口的 MAC 地址,并提供其他上下文,例如物理交换机和交换机端口元数据,这些元数据可用于更新网络交换机结构。此操作有效地“重新绑定”端口,如果绑定成功或失败,端口状态在 Neutron 中可能会发生变化。这最终可能对通过接口传递流量的能力没有实际影响,但也可以根植于所使用的整体 network_interface 驱动程序中。
注意
Ironic 的 network_interface 驱动程序选择会影响基本的绑定模型行为,从而影响 Neutron 报告的最终状态。具体而言,flat 假定预先接线、静态且永不改变的物理网络。在使用 flat 接口时,Neutron 端口状态指示失败通常更多地表明 networking-baremetal ML2 插件未在 Neutron 中配置。
如果主机处于活动状态
Ironic 显式设置 VIF 将绑定的物理端口的 MAC 地址,并立即将其附加到主机,以及任何所需的端口绑定元数据,然后将其传输到 Neutron。
默认情况下,端口绑定失败将强制中止 neutron 接口上的部署,以防止出现实例显示为 ACTIVE 但实际上连接到错误网络的场景(例如,仍然保留在配置网络上而不是分配的 VLAN),从而导致网络无法正常工作。
可以使用 neutron.fail_on_port_binding_failure 配置选项(默认值:true)调整此行为。设置为 false 时,失败只会记录警告。
对于智能网卡,无论全局配置设置如何,端口绑定失败都将被视为致命错误,因为这些设备需要正确的网络配置。
操作员可以使用节点 driver_info 中的 fail_on_binding_failure 字段覆盖全局配置和智能网卡默认行为。
当 Ironic 要解绑 VIF 时,Ironic 会发出请求,要求 Neutron “重置”分配的 MAC 地址,以避免与 Neutron 的唯一硬件 MAC 地址要求冲突。
基本配置流程¶
在配置时,Ironic 将尝试将所有启用 PXE 的端口附加到配置网络。此行为的修饰符是 neutron.add_all_ports 选项,其中 ironic 将尝试将所有端口绑定到所需的服务网络,而不仅仅是 pxe_enabled 设置为 True 的 ironic 端口。
在完成配置工作后,并且在节点移动到 ACTIVE provision_state 之前,先前附加的端口将被解绑。
在 network_interface 设置为 flat 的情况下,用于所有绑定配置在所有状态下使用的请求的 VIF。
在 network_interface 设置为 neutron 的情况下,用户请求的 VIF 首次附加到 Ironic 节点,因为在配置网络中花费的时间使用的是 Ironic 创建然后删除的 VIF 作为裸机节点状态机的一部分。
相同的流程和逻辑适用于清理、服务和救援工作流程。
如何在已部署的机器上配置 VIF¶
通常的期望是,已部署的操作系统将使用基于 DHCP 的自动配置来自动建立新配置机器的所需配置状态。
我们不建议也不推荐尝试使用静态配置和动态配置的混合配置。也就是说,Glean 和 cloud-init 等工具可能有助于启用元数据转换到静态系统配置,在需要时可以使用。
物理网络¶
Ironic 端口可以使用其 physical_network 字段与物理网络关联。Ironic 在 Neutron 中的虚拟端口和物理端口和端口组之间进行映射时使用此信息。端口的物理网络字段是可选的,如果未设置,则任何 VIF 都可以映射到该端口,前提是没有免费的 Ironic 端口具有合适的物理网络分配。如果设置了,其值必须是与 networking-baremetal 集成才能正确协调端口对应的 Neutron 中的物理网络的名称(不是 UUID)。
端口组的物理网络由其组成端口的物理网络定义。Ironic 服务确保端口组中的所有端口在其物理网络字段中具有相同的值。
physical_network 设置用于划分可能承载不同流量的网络结构,旨在帮助将多个网络结构建模到 Neutron 的整体操作中。
本地链路连接¶
使用 neutron 网络接口 需要为 Ironic 中的每个节点上的 Ironic 端口填充 Ironic 端口 local_link_connection 信息。当附加虚拟接口 (VIF) 时,此信息会提供给 Neutron 网络服务的 ML2 驱动程序。ML2 驱动程序使用此信息将指定的端口连接到租户网络。
通常,此信息通过内省过程填充,利用交换机广播的 LLDP 数据,但在物理网络发生更改时(例如,裸机端口的电缆移动到交换机上的不同端口,或者交换机被更换),可能需要手动设置或更改此信息。
注意
为了使内省过程中的自动发现正常工作,交换机必须启用 LLDP。
注意
LLDP 数据的解码是一项尽力而为的操作。某些交换机供应商或交换机供应商固件的更改可能会影响字段解码。虽然这种情况很少发生,但请将此类问题作为错误报告给 Ironic 项目。
Field |
描述 |
|---|---|
|
必需。标识一个交换机,可以是 MAC 地址或基于 OpenFlow 的 |
|
必需。交换机/智能网卡上的端口 ID,例如 Gig0/1、rep0-0。 |
|
可选。用于区分不同的交换机型号或其他特定于供应商的标识符。某些 ML2 插件可能需要此字段。 |
|
如果端口是智能网卡端口,则必需。智能网卡设备的 hostname。 |
注意
这不适用于 Infiniband 端口,因为网络拓扑可以通过 Infiniband 子网管理器发现。如果指定,local_link_connection 信息将被忽略。如果端口是智能网卡端口,则
port_id是智能网卡上的代表端口名称。
switch_id不是必需的。
设置 local link connection 信息的示例¶
以下是一个示例命令,您可以将其作为基础来设置 Ironic 中的所需信息。
baremetal port create <physical_mac_address> --node <node_uuid> \
--local-link-connection switch_id=<switch_mac_address> \
--local-link-connection switch_info=<switch_hostname> \
--local-link-connection port_id=<switch_port_for_connection> \
--pxe-enabled true \
--physical-network physnet1
警告
根据您的 ML2 插件,您可能需要提供不同的或额外的数据作为 local_link_connection 信息的一部分。
或者,如果您只需要更新现有值,例如由于电缆更改而更新 port_id 值,您可以使用 baremetal port set 命令。
baremetal port set --node <node_uuid> \
--local-link-connection port_id=<updated_switch_port_for_connection \
<baremetal_port_uuid>
设置带有 local link connection 信息的 Infiniband 端口示例¶
Infiniband 端口需要使用客户端 ID,其中 local link connection 信息应由 Infiniband 子网管理器填充。
客户端 ID 由 <12 字节供应商前缀>:<8 字节端口 GUID> 组成。没有标准的从端口的 MAC 地址 ($HW_MAC_ADDRESS) 推导过程;它是特定于供应商的。
例如,Mellanox ConnectX 系列设备的 前缀是 ff:00:00:00:00:00:02:00:00:02:c9:00。如果端口 GUID 是 f4:52:14:03:00:38:39:81,则客户端 ID 将是 ff:00:00:00:00:00:02:00:00:02:c9:00:f4:52:14:03:00:38:39:81。
Mellanox ConnectX 系列设备的 HW_MAC_ADDRESS 由 6 个字节组成;端口 GUID 的较低 3 个字节和较高 3 个字节。在此示例中,它将是 f4:52:14:38:39:81。综上所述,创建一个 Infiniband 端口如下。
baremetal port create <physical_mac_address> --node <node_uuid> \
--pxe-enabled true \
--extra client-id=<client_id> \
--physical-network physnet1
设置智能网卡端口示例¶
智能网卡的使用是一种非常专业的用例,其中 ML2 插件作为基础设施的一部分,或者 neutron-l2-agent 安装在智能网卡上的操作系统中,并且该服务配置为与 OpenStack 部署的其余部分通信。
当存在以这种方式集成的智能网卡时,Ironic 需要知道以确保整体底盘电源处于适合确保可以连接端口的状态。例如,可以远程编程该卡。
为了向 Ironic 信号设备和连接由智能网卡提供,请使用以下命令。这需要断言智能网卡内部操作系统的 hostname 以及与智能网卡内部端口表示名称匹配的 port_id 值。
baremetal port create <physical_mac_address> --node <node_uuid> \
--local-link-connection hostname=<smartnic_hostname> \
--local-link-connection port_id=<internal_port_name> \
--pxe-enabled true \
--physical-network physnet1 \
--is-smartnic
配置和使用网络多租户¶
请参阅安装指南中的 配置租户网络 部分,了解 Bare Metal (Ironic) 服务。
配置网络服务¶
除了配置 Ironic 之外,还需要对 Neutron 进行一些额外的配置,以确保裸机服务器的端口被正确编程并且表示正确的状态,具体取决于您的使用模型。
此配置由您启用的 Ironic 网络接口驱动程序、您在环境中的机架交换机以及网络的结构模型决定,例如您是否使用 physical_network 值。
Physnet 映射¶
在使用 physnet 映射时,为了正确调度网络资源,告知部署中主机的物理网络映射至关重要。
这采用 ironic-neutron-agent 的形式,操作员应部署它。有关如何设置和配置此代理程序的信息,请参阅 networking-baremetal 安装文档中的 ironic-neutron-agent。
flat 网络接口¶
为了使网络服务端口与 Ironic 服务正确运行,flat 网络接口需要从 networking-baremetal 加载 baremetal ML2 机制驱动程序到 Neutron 配置中。此驱动程序了解交换机应由管理员预先配置,并将标记网络服务端口为成功绑定,因为对由 Ironic 代表用户发起的 VNIC_BAREMETAL 绑定请求无需执行其他操作。
安装
networking-baremetal库$ pip install networking-baremetal
在网络服务 ML2 配置文件中启用
baremetal驱动程序[ml2] mechanism_drivers = ovs,baremetal
重新启动您的 Neutron API 服务,该服务托管 ML2 机制驱动程序。
neutron 网络接口¶
neutron 网络接口允许网络服务为裸机服务器编程物理机架交换机。为此,必须安装并启用支持环境中的机架交换机型号的 baremetal VNIC 类型的 ML2 机制驱动程序。
您可能希望使用 neutron 网络接口的一个情况,即使您的架构配置了类似于 flat 网络的接口,也是在使用 IPv6 时。各种硬件、引导加载程序和操作系统 DHCP 客户端使用不同的技术来生成 DHCP 服务器用于跟踪 IPv6 主机的宿主标识符字符串。neutron 接口生成额外的 IPv6 DHCP 条目来解决这种情况,而 flat 接口无法做到这一点。
这是已知支持 neutron 网络接口的机架交换机 ML2 机制驱动程序的列表。
社区 ML2 驱动程序¶
社区 ML2 驱动程序是由社区维护的驱动程序,通常预计会专注于促进用例所需的最低可行性需求。
- 网络通用交换机
通常认为此 ML2 机制驱动程序是入门的“首选”解决方案。它基于使用文本接口进行远程交换机配置,并且每个交换机的最低功能是“在 VLAN 上设置端口”。此 ML2 驱动程序在 CI 中进行了测试,因为它还支持一些虚拟机网络的管理,因为 Ironic 在 CI 中使用它。它也相对容易修改以启用对较新型号或供应商命令行更改的支持。它也存在一些缺陷和问题,但仍然被认为是入门的第一个“首选”解决方案。更多信息可在项目的 README 中找到。项目文档也可以在 此处 找到。
- 网络 Baremetal
此 ML2 机制驱动程序,我们稍后在本文档的
flat网络接口设置中简要介绍了它,还支持使用 Netconf 和 OpenConfig 数据模型向远程交换机断言配置。与 DMTF Redfish 类似,这意味着它不适用于每个支持 Netconf 的交换机。更多信息可以在 networking-baremetal 文档 和 device-drivers 文档 中找到,其中包含有关如何配置 要管理的设备 的更多详细信息。
供应商 ML2 驱动程序¶
- Cisco Nexus (networking-cisco)
要安装和配置此 ML2 机制驱动程序,请参阅 Nexus 机制驱动程序安装指南。此驱动程序似乎由供应商维护,但 Ironic 社区不了解其状态。
- Arista (networking-arista)
networking-arista 项目似乎具有处理 VNIC_BAREMETAL 请求的一些逻辑,并且 Arista 在创建 ML2 交换机编排的整体模型时深度参与。信息有限,但可以在 OpenDev 的 x/networking-arista 存储库中找到存储库。
之前,我们在此列表中包含 networking-fujitsu,但它似乎不再维护。富士通产品的客户应直接向富士通咨询。