Ironic驱动的租户网络支持

https://blueprints.launchpad.net/nova/+spec/ironic-networks-support

目前,Ironic仅支持控制平面和租户之间共享的扁平网络。目前正在进行一项工作,以允许将任意网络连接到Ironic节点,采用各种配置。[0][1] 为了支持这项工作,Nova需要进行一些更改。

问题描述

Ironic当前支持控制平面和租户之间共享的单个扁平网络。这导致Ironic无法在多租户环境中或由希望拥有隔离网络的的用户中使用。

  • 多租户部署

  • 希望保护控制平面免受租户影响的部署

用例

  • 希望部署多租户环境的部署者。

  • 希望将控制平面与租户隔离的部署者。

  • 希望使用隔离网络与Ironic实例的用户。

提议的变更

  • 在Neutron网络驱动程序中实例生成期间,对Neutron的port-create调用需要使用空绑定:host_id进行。这向Neutron发出信号,表明它现在不应该绑定端口。为了使配置过程远离租户网络,我们需要在绑定端口之前等待部署完成,而只有Ironic才能控制。作为部署过程的一部分,Ironic将使用以下内容进行port-update调用:1) 绑定:host_id值为“baremetal:$node_uuid”,以及2) 连接端口所需的物理交换机端口信息。这将在virt驱动程序等待Ironic节点达到“active”状态时发生。

    为了实现这一点,我们需要允许virt驱动程序定义binding:host_id字段。因此,我们需要在基础virt驱动程序类中添加一种方法,默认使用当前值(instance.host),并在ironic驱动程序中覆盖该方法,如果节点使用新的网络模型(这将在Ironic节点的network_provider属性中可用)。

    plug_vifsunplug_vifs方法也需要进行类似修改,以将VIF UUID传递给端口组和未分组的端口对象,而不是所有端口。

    (Mitaka中已完成,但字符串更改需要进行小更新。此代码还依赖于ironicclient发布才能生效)

  • 将向网络模型添加一个BAREMETAL vnic类型,以支持先前在Neutron中添加的BAREMETAL vnic类型。[3]

    (Mitaka中已完成)

这将支持我们在Ironic中构建的基本租户网络支持。在未来,我们希望支持LAG/MLAG/bond,以及通过VLAN或VXLAN在成对的绑定NIC上实现多个网络(目前Nova强制执行NIC到网络的1:1映射,就像在虚拟世界中可以动态创建NIC一样),但这些项目超出了本规范的范围。

备选方案

一种替代方案是子类化NeutronAPI,使其执行我们想要的操作。这可能会帮助简化上述未来工作。但是,由于它在API和conductor层使用,这样做可能会破坏多hypervisor部署。

数据模型影响

无。

REST API 影响

无。

安全影响

这使用户和部署者能够提高控制平面和Ironic实例的网络安全性。

通知影响

无。

其他最终用户影响

用户将能够使用任意网络与Ironic实例。在未来,我们应该研究如何允许用户指定哪个物理连接连接到哪个网络;但是,这超出了本规范的范围。

性能影响

无。

其他部署者影响

没有。使用此功能或不使用的标志是Ironic节点对象上的一个属性。在Nova端使用此功能无需进行额外的配置。

开发人员影响

无。

实现

负责人

主要负责人

jroll

其他贡献者

Sukhdev lazy_prince

工作项

  • 导致port-create调用发送空绑定:host_id。

  • 添加BAREMETAL vnic类型。

依赖项

这在很大程度上依赖于Ironic中正在进行的工作。[0][1]

请注意,虽然这项工作在撰写本文时尚未完成,但它已经取得了良好的进展,预计将在Mitaka周期结束前完成。

测试

正在创建用于测试此代码的CI作业作为Ironic工作的一部分;我们还应该让这些作业针对Nova运行。

文档影响

Ironic侧需要进行大量的文档工作,但是Nova侧不需要进行任何工作。

参考资料

[0] https://blueprints.launchpad.net/ironic/+spec/network-provider

[1] https://blueprints.launchpad.net/ironic/+spec/ironic-ml2-integration

[2] https://blueprints.launchpad.net/neutron/+spec/neutron-ironic-integration

[3] https://review.openstack.org/#/c/197774/

历史

修订版

发布名称

描述

Mitaka

引入

Newton

重新提出。删除了portgroups支持。