机内检查的启动和网络管理

https://storyboard.openstack.org/#!/story/1584830 https://storyboard.openstack.org/#!/story/1528920

此规范建议使 Ironic Inspector 更好地与租户网络隔离和非 PXE 启动接口配合使用。

问题描述

使用 neutron 网络接口后,节点不再持续连接到配置网络。我们需要在机内检查之前手动连接它们,这既不方便又容易出错。

此更改涵盖了启动和网络接口的集成。

提议的变更

建议的流程如下

  1. 通过 API 启动使用 inspector inspect 接口的检查。

  2. inspector inspect 接口

    1. 调用 task.driver.network.validate_inspection

      如果引发 UnsupportedDriverExtension,则回退到代码路径。

    2. 调用 task.driver.boot.validate_inspection

      如果引发 UnsupportedDriverExtension,则回退到代码路径。

    3. 调用 task.driver.network.add_inspection_network。它在 inspection_network 上创建一个端口。

    4. 调用 task.driver.boot.prepare_ramdisk,提供来自选项 [inspector]extra_kernel_params 的内核参数。

    5. 使用 manage_boot=False 调用 ironic-inspector 内省 API。

    6. 通过 task.driver.power 启动机器。

  3. 现在检查将如先前一样进行。

启动和网络接口

  • 添加一个新的调用 validate_inspection。它将以与 validate_rescue 相同的方式实现,但不是在缺少参数时引发 MissingParameterValue,而是在缺少参数时引发 UnsupportedDriverExtension,以指示回退到旧方法。

    • 为 PXE 和 iPXE 启动接口实现 validate_inspection

  • 添加一个新的 driver_info 参数 driver_info[inspection_network] 和一个新的配置选项 [neutron]inspection_network

  • 扩展 NetworkInterface 以提供 add_inspection_networkremove_inspection_networkvalidate_inspection,类似于救援网络。但是,validate_inspection 如果未指定检查网络,将引发 UnsupportedDriverExtension

Inspector inspect 接口

修改 Inspector inspect 接口以遵循上述流程。

  • 在内省过程的开始时调用 boot.validate_inspectionnetwork.validate_inspection。如果任何一个引发 UnsupportedDriverExtension,则遵循与之前相同的方式。

  • 在检查之前调用 network.add_inspection_network,并在检查之后调用 network.remove_inspection_network

  • 添加一个新的 driver_info 参数 driver_info[inspector_extra_kernel_params] 和一个新的配置选项 [inspector]extra_kernel_params

  • 在内省之前调用 boot.prepare_ramdisk,将 ironic-inspector URL(从服务目录获取)和 extra_kernel_params 提供给 ramdisk_params 参数。之后调用 boot.cleanup_ramdisk

  • 传递 manage_boot=False 调用 ironic-inspector。

检查端口

目前 Ironic Inspector 不需要存在端口、端口组或本地链路信息来进行检查。但是,为了使用网络翻转,我们需要这些信息,这些信息可以是

  • 由操作员手动输入(如果可能,使用带外检查)或

  • 最初使用手动放置在正确网络上的节点进行检查。

备选方案

  • 不支持网络隔离。

  • 在 Ironic API 中公开网络和启动接口,并让 Inspector 使用它。

数据模型影响

状态机影响

REST API 影响

客户端 (CLI) 影响

“ironic” CLI

“openstack baremetal” CLI

RPC API 影响

驱动程序 API 影响

扩展 NetworkInterface

def validate_inspection(self, task):
    """Validates the network interface for inspection operation.

    :param task: A TaskManager instance.
    :raises: InvalidParameterValue, if the network interface configuration
        is invalid.
    :raises: MissingParameterValue, if some parameters are missing.
    """
    raise exception.UnsupportedDriverExtension(
        driver=task.node.driver, extension='validate_inspection')

def add_inspection_network(self, task):
    """Add the inspection network to a node.

    :param task: A TaskManager instance.
    :raises: NetworkError
    """
    pass

def remove_inspection_network(self, task):
    """Remove the inspection network from a node.

    :param task: A TaskManager instance.
    """
    pass

扩展 BootInterface

def validate_inspection(self, task):
    """Validate that the node has required properties for inspection.

    :param task: A TaskManager instance with the node being checked
    :raises: MissingParameterValue if node is missing one or more required
        parameters
    :raises: UnsupportedDriverExtension
    """
    raise exception.UnsupportedDriverExtension(
        driver=task.node.driver, extension='validate_inspection')

Nova 驱动程序影响

Ramdisk 影响

安全影响

此更改还将允许使用具有租户网络隔离的机内检查,从而提高安全性。

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

新的配置选项

  • [neutron]inspection_network 默认检查网络(无默认值)。

  • [inspector]extra_kernel_params 要传递给内省的默认内核参数(默认情况下为空)。

开发人员影响

实现

负责人

主要负责人

Dmitry Tantsur (lp: divius, irc: dtantsur)

工作项

  1. 向网络和启动接口添加新方法。

  2. 更新 inspector inspect 接口以使用它们。

依赖项

测试

单元测试覆盖。

升级和向后兼容性

默认行为不会改变,因为 inspection_network 最初将保持未填充状态。在填充后,具有端口的节点将遵循新的内省流程。可以通过在节点上设置 inspection_network,而不是全局设置来启用此功能。

此工作不会以任何方式影响使用 ironic-inspector 自己的 CLI 或 API 启动的内省。

文档影响

应更新 Ironic 文档,以说明使用网络隔离进行机内检查。

参考资料