IPMI 驱动

概述

`ipmi` 硬件类型通过使用 IPMI(智能平台管理接口)协议版本 2.0 或 1.5 来管理节点。它使用 IPMItool 工具,这是一个用于控制支持 IPMI 的设备的开源命令行界面 (CLI)。

词汇表

  • IPMI - 智能平台管理接口。

  • IPMB - 智能平台管理总线/桥接。

  • BMC - 主板管理控制器。

  • RMCP - 远程管理控制协议。

启用 IPMI 硬件类型

请参阅 配置 IPMI 支持 以获取所需的依赖项。

  1. 从 Ocata 版本开始,`ipmi` 硬件类型默认启用。要显式启用它,请将以下内容添加到您的 `ironic.conf` 文件中

    [DEFAULT]
    enabled_hardware_types = ipmi
    enabled_management_interfaces = ipmitool,noop
    enabled_power_interfaces = ipmitool
    

    可选地,启用 厂商直通接口 和一个或两个 控制台接口

    [DEFAULT]
    enabled_hardware_types = ipmi
    enabled_console_interfaces = ipmitool-socat,ipmitool-shellinabox,no-console
    enabled_management_interfaces = ipmitool,noop
    enabled_power_interfaces = ipmitool
    enabled_vendor_interfaces = ipmitool,no-vendor
    
  2. 重新启动 Ironic conductor 服务。

请参阅 启用驱动程序和硬件类型 以获取更多详细信息。

使用 IPMI 驱动程序注册节点

配置为使用 IPMItool 驱动程序的节点应将 `driver` 字段设置为 `ipmi`。

以下配置值是必需的,必须添加到节点的 `driver_info` 字段中

  • `ipmi_address`:BMC 的 IP 地址或主机名。

其他选项可能需要匹配 BMC 的配置,以下选项是可选的,但在大多数情况下,建议设置它们

  • `ipmi_username`:访问 BMC 的用户名;默认为 *NULL* 用户。

  • `ipmi_password`:访问 BMC 的密码;默认为 *NULL*。

  • `ipmi_port`:远程 IPMI RMCP 端口。默认情况下,ipmitool 将使用端口 *623*。

注意

强烈建议您为 BMC 设置用户名和密码。

可以使用 `baremetal node create` 命令注册使用 IPMItool-based 驱动程序的节点。例如

baremetal node create --driver ipmi \
    --driver-info ipmi_address=<address> \
    --driver-info ipmi_username=<username> \
    --driver-info ipmi_password=<password>

更改默认 IPMI 凭据持久性方法

配置选项 `store_cred_in_env` 允许用户在基于文件和环境变量的持久性方法之间切换,用于 IPMI 密码。

对于临时文件选项,长时间的 IPMI 会话(例如用于控制台支持的会话)会在 conductor 磁盘上留下包含凭据的文件,持续整个会话。

要切换到环境变量持久性,请将 `store_cred_in_env` 参数在配置文件中设置为 `True`

[ipmi]
store_cred_in_env = True

高级配置

当仅提供 `address`、`username` 和 `password` 等简单配置不足时,IPMItool 驱动程序包含许多其他选项,可用于解决特殊用途。

单/双桥接功能

注意

要使用桥接功能,需要 IPMItool 的版本高于或等于 1.8.12。

IPMItool-based 驱动程序支持两种不同的桥接功能:*单*桥接和*双*桥接。

需要将以下配置值添加到节点的 `driver_info` 字段中,以便可以使用桥接

  • `ipmi_bridging`:桥接类型;默认值为 *no*;其他支持的值为 *single* 表示单桥接或 *dual* 表示双桥接。

  • `ipmi_local_address`:桥接请求的本地 IPMB 地址。

    仅当 `ipmi_bridging` 设置为 *single* 或 *dual* 时才需要。此配置是可选的,如果未指定,IPMItool 将自动发现它。

  • `ipmi_target_address`:桥接请求的目标地址。仅当 `ipmi_bridging` 设置为 *single* 或 *dual* 时才需要。

  • `ipmi_target_channel`:桥接请求的目标通道。仅当 `ipmi_bridging` 设置为 *single* 或 *dual* 时才需要。

双桥接特定选项

  • `ipmi_transit_address`:桥接请求的传输地址。仅当 `ipmi_bridging` 设置为 *dual* 时才需要。

  • `ipmi_transit_channel`:桥接请求的传输通道。仅当 `ipmi_bridging` 设置为 *dual* 时才需要。

参数 `ipmi_bridging` 应指定所需的桥接类型:*single* 或 *dual* 以访问裸机节点。如果未指定该参数,则默认值将设置为 *no*。

可以使用 `baremetal node set` 命令将所需的桥接信息设置为使用 IPMItool 驱动程序注册的 Ironic 节点。例如

  • 单桥接

    baremetal node set <UUID or name> \
        --driver-info ipmi_local_address=<address> \
        --driver-info ipmi_bridging=single \
        --driver-info ipmi_target_channel=<channel> \
        --driver-info ipmi_target_address=<target address>
    
  • 双桥接

    baremetal node set <UUID or name> \
        --driver-info ipmi_local_address=<address> \
        --driver-info ipmi_bridging=dual \
        --driver-info ipmi_transit_channel=<transit channel> \
        --driver-info ipmi_transit_address=<transit address> \
        --driver-info ipmi_target_channel=<target channel> \
        --driver-info ipmi_target_address=<target address>
    

更改 IPMI 协议版本

IPMItool-based 驱动程序使用 IPMI 协议的 *2.0* 和 *1.5* 版本。默认情况下,使用版本 *2.0*。

为了在裸机节点中更改 IPMI 协议版本,需要将以下选项设置为节点的 `driver_info` 字段

  • `ipmi_protocol_version`:IPMI 协议的版本;默认值为 *2.0*。支持的值为 *1.5* 或 *2.0*。

可以使用 `baremetal node set` 命令设置所需的协议版本

baremetal node set <UUID or name> --driver-info ipmi_protocol_version=<version>

警告

IPMI 协议版本 *1.5* 不支持加密。因此,强烈建议使用版本 2.0。

密码套件

IPMI 2.0 引入了对加密的支持,并允许设置要使用的密码套件。传统上,`ipmitool` 默认使用密码套件 3,但由于 SHA1 不再符合现代安全要求,近期的版本(例如 RHEL 8.2 中使用的版本)正在切换到套件 17。

通常,与 BMC 的密码套件使用特殊命令进行协商。在某些硬件上,协商产生不正确的结果,IPMI 命令失败,并显示

Error in open session response message : no matching cipher suite
Error: Unable to establish IPMI v2 / RMCP+ session

另一个可能的问题是 `ipmitool` 命令花费很长时间(几秒钟甚至几分钟),因为 BMC 不支持密码套件协商。在两种情况下,您可以自己指定所需的套件,例如

baremetal node set <UUID or name> --driver-info ipmi_cipher_suite=3

在无法为每个节点指定 `ipmi_cipher_suite` 的情况下,配置参数 `[ipmi]/cipher_suite_versions` 可以设置为密码套件列表,Ironic 将尝试从提供的列表中找到可用的值(从后到前)

[ipmi]
cipher_suite_versions = 1,2,3,6,7,8,11,12

要找到此配置的合适值,您可以在运行 `ipmitool` 命令后检查字段 `RMCP+ Cipher Suites`,例如

$ ipmitool -I lanplus -H $HOST -U $USER -v -R 12 -N 5  lan print
# output
Set in Progress         : Set Complete
Auth Type Support       : NONE MD2 MD5 PASSWORD OEM
Auth Type Enable        : Callback : NONE MD2 MD5 PASSWORD OEM
IP Address Source       : Static Address
IP Address              : <IP>
Subnet Mask             : <Subnet>
MAC Address             : <MAC>
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,11,12

警告

仅密码套件 3 和 17 被现代标准认为是安全的。密码套件 0 意味着“完全没有安全”。

使用不同的权限级别

默认情况下,Ironic 请求所有命令的 `ADMINISTRATOR` 权限级别。这是最简单的选项,但如果不可用,您可以将其更改为 `CALLBACK`、`OPERATOR` 或 `USER` 如下所示

baremetal node set <UUID or name> --driver-info ipmi_priv_level=OPERATOR

您必须确保用户仍然可以更改电源状态和启动设备。

静态启动顺序配置

请参阅 静态启动顺序配置

厂商差异

虽然智能平台管理接口 (IPMI) 接口基于定义的标准,但 Ironic 社区意识到至少有一个厂商使用非标准的启动设备选择器。本质上,这可能就像对标准的简单解释不同。

截至 2020 年 10 月,已知差异在于 Supermicro 硬件,其中表示标准中 *REMOTE* 启动设备的 `0x24` 选择器必须在 **UEFI 模式**下使用时用于从本地磁盘子系统请求启动操作。这与 BMC 期望相同选择器值为 `0x08` 的 BIOS 模式相反。

由于 BMC 不会以任何错误形式响应,而且我们不希望通过在每次操作之前显式查询所有 BMC 可能是哪个厂商来冒 BMC 连接问题的风险,因此可以自动将厂商记录在 `properties` 字段 `vendor` 中。当将其设置为值 `supermicro` 时,Ironic 将导航 UEFI 行为差异,从而启用 UEFI 请求磁盘启动。

示例

baremetal node set <UUID or name> \
    --properties vendor="supermicro"

幸运的是,Ironic 将尝试在电源同步过程中执行此检测,并在尚未设置时记录此值。

虽然在其他厂商的 BMC 中设置启动模式和目标启动设备时可能存在类似的问题,但我们目前尚不清楚。如果您遇到此类问题,请随时通过 Launchpad 报告,并确保包含来自 BMC 的 `chassis bootparam get 5` 输出值以及 `mc info` 输出。

示例

ipmitool -I lanplus -H <BMC ADDRESS> -U <Username> -P <Password> \
    mc info
ipmitool -I lanplus -H <BMC ADDRESS> -U <Username> -P <Password> \
    chassis bootparam get 5

send_raw clean/deploy 步骤

`send_raw` 厂商直通方法可用于作为清理或部署步骤,如果需要将原始字节传输到远程 BMC 以促进某种操作或特定状态,则可以调用它。在这种情况下,要设置的原始字节通过请求的清理或部署步骤中的 `raw_bytes` 参数传递。

示例

{
  "interface": "vendor",
  "step": "send_raw",
  "args": {
    "raw_bytes": "0x00 0x00 0x00 0x00"
  }
}