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_vifs和unplug_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
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
引入 |
Newton |
重新提出。删除了portgroups支持。 |