机内检查的启动和网络管理¶
https://storyboard.openstack.org/#!/story/1584830 https://storyboard.openstack.org/#!/story/1528920
此规范建议使 Ironic Inspector 更好地与租户网络隔离和非 PXE 启动接口配合使用。
问题描述¶
使用 neutron 网络接口后,节点不再持续连接到配置网络。我们需要在机内检查之前手动连接它们,这既不方便又容易出错。
此更改涵盖了启动和网络接口的集成。
提议的变更¶
建议的流程如下
通过 API 启动使用
inspectorinspect 接口的检查。inspectorinspect 接口调用
task.driver.network.validate_inspection。如果引发
UnsupportedDriverExtension,则回退到代码路径。调用
task.driver.boot.validate_inspection。如果引发
UnsupportedDriverExtension,则回退到代码路径。调用
task.driver.network.add_inspection_network。它在inspection_network上创建一个端口。调用
task.driver.boot.prepare_ramdisk,提供来自选项[inspector]extra_kernel_params的内核参数。使用
manage_boot=False调用 ironic-inspector 内省 API。通过
task.driver.power启动机器。
现在检查将如先前一样进行。
启动和网络接口¶
添加一个新的调用
validate_inspection。它将以与validate_rescue相同的方式实现,但不是在缺少参数时引发MissingParameterValue,而是在缺少参数时引发UnsupportedDriverExtension,以指示回退到旧方法。为 PXE 和 iPXE 启动接口实现
validate_inspection。
添加一个新的
driver_info参数driver_info[inspection_network]和一个新的配置选项[neutron]inspection_network。扩展
NetworkInterface以提供add_inspection_network、remove_inspection_network和validate_inspection,类似于救援网络。但是,validate_inspection如果未指定检查网络,将引发UnsupportedDriverExtension。
Inspector inspect 接口¶
修改 Inspector inspect 接口以遵循上述流程。
在内省过程的开始时调用
boot.validate_inspection和network.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)
工作项¶
向网络和启动接口添加新方法。
更新
inspectorinspect 接口以使用它们。
依赖项¶
无
测试¶
单元测试覆盖。
升级和向后兼容性¶
默认行为不会改变,因为 inspection_network 最初将保持未填充状态。在填充后,具有端口的节点将遵循新的内省流程。可以通过在节点上设置 inspection_network,而不是全局设置来启用此功能。
此工作不会以任何方式影响使用 ironic-inspector 自己的 CLI 或 API 启动的内省。
文档影响¶
应更新 Ironic 文档,以说明使用网络隔离进行机内检查。