Ironic驱动的租户网络支持¶
https://blueprints.launchpad.net/nova/+spec/ironic-networks-support
目前,Ironic仅支持控制平面和租户之间共享的扁平网络。正在进行一项工作,以允许将任意网络连接到Ironic节点,采用各种配置。[0][1] 为了支持这项工作,Nova需要进行一些更改。
问题描述¶
Ironic当前支持控制平面和租户之间共享的单个扁平网络。这导致Ironic无法在多租户环境中或由希望拥有隔离网络的的用户中使用。
多租户部署
希望保护控制平面免受租户影响的部署
希望使用“高级”网络配置(如LAG、MLAG、bonding、VLAN/VXLAN)的部署
用例¶
希望部署多租户环境的部署者。
希望将控制平面与租户隔离的部署者。
希望使用“高级”网络配置(如LAG、MLAG、bonding、VLAN/VXLAN)部署裸机主机的部署者。
希望使用Ironic实例的隔离网络的的用户。
提议的变更¶
在Neutron网络驱动程序中实例启动期间,对Neutron的port-create调用需要使用空binding:host_id进行。这向Neutron发出信号,表明它现在不应绑定端口。为了使配置过程远离租户网络,我们需要在绑定端口之前等待部署完成,而只有Ironic才能控制。作为部署过程的一部分,Ironic将使用port-update调用,其中包含:1) binding: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传递给端口组和未分组的端口对象,而不是所有端口。
Ironic现在具有“端口组”的概念[1],这是一个由多个物理NIC组成的单个逻辑连接;用于LAG和MLAG配置。这些是API中的一等公民。macs_for_instance方法需要在Ironic驱动程序中更改,以报告端口组和未分组端口的MAC地址。例如
# the old method [port.address for port in get_ports_for_node()] # the new method ([port.address for port in get_ungrouped_ports_for_node()] + [portgroup.address for portgroup in get_portgroups_for_node()])
将向网络模型添加一个BAREMETAL vnic类型,以支持先前在Neutron中添加的BAREMETAL vnic类型。[3]
这将支持我们正在Ironic中构建的基本租户网络支持。在未来,我们希望通过VLAN或VXLAN在成对的绑定NIC上支持多个网络(目前Nova强制执行NIC到网络的1:1映射,就像在虚拟世界中可以动态创建NIC一样),但这些项目超出了本规范的范围。
备选方案¶
一种替代方案是子类化NeutronAPI,使其执行我们想要的操作。这可能会帮助简化上述未来的工作。但是,由于它在API和conductor层使用,这样做可能会破坏多hypervisor部署。
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
这使用户和部署者能够提高控制平面和Ironic实例的网络安全性。
通知影响¶
无。
其他最终用户影响¶
用户将能够使用Ironic实例的任意网络。在未来,我们应该研究如何允许用户指定哪个物理连接连接到哪个网络;但是,这超出了本规范的范围。
性能影响¶
无。
其他部署者影响¶
没有。使用此功能或不使用的标志是Ironic节点对象上的一个属性。Nova侧无需进行额外的配置即可使用此功能。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
jroll
- 其他贡献者
Sukhdev lazy_prince
工作项¶
导致port-create调用发送空binding:host_id。
添加BAREMETAL vnic类型。
修改Ironic驱动程序以处理Ironic“端口组”以及Ironic“端口”。
依赖项¶
这在很大程度上依赖于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 |
引入 |