支持来自同一虚拟机连接到相同网络的多个接口

https://blueprints.launchpad.net/nova/+spec/multiple-if-1-net

允许虚拟机将多个接口连接到同一个网络,以便于使用常见的 NFV 网络功能虚拟机,这些虚拟机需要这种连接方式。

问题描述

目前,Nova 仅允许每个虚拟机的一个 VIF 连接到给定的 Neutron 网络。 如果您尝试将多个 VIF 连接到同一个网络,将会出现错误,这意味着在第一个网络未被使用后,从剩余的网络列表中找不到第二个网络。

NFV 功能有时需要将多个接口连接到同一虚拟机上的单个网络,原因如下文 ‘用例’ 部分所述。 当需要这样做时,VNF 通常无法在 Openstack 下使用。

VNFs 通常是大型、复杂的代码,并且可能由第三方提供。 由于各种原因,将流量从一个接口导入到另一个接口(当 VNF 实现多个功能且这些功能无法在内部链式连接时)或将流量从例如互联网导入到多个接口以在内部通过单独的处理功能运行,这并不罕见。

可以将此限制视为 VNF 的一个问题。 显然,可以更改 VNF 以将多个地址或功能放在单个端口上(以解决传入流量问题)或在内部连接功能(以解决直通问题)。

此解决方案的问题是,获得此类修复的时间表通常是难以接受的。 VNFs 是大型、复杂的代码,并且通常 VNF 的供应商与尝试在 Openstack 中使用 VNF 的组织不是同一个组织,因此需要进行功能变更请求,而这可能在合理的时间范围内无法实现。

我们建议更改 Nova 中的代码以消除此限制。

提议的变更

我们建议删除此限制,该限制存在于 Nova 中(Neutron 没有此限制),允许将任意数量的 VIF 连接到同一个网络。

在 nova ‘boot’ 命令或 POST 中应尊重顺序,因此如果在同一个网络上使用多个接口,则它们将按照提供的顺序连接到虚拟机,就像其他 NIC 一样。

API 变更

当尝试将多个接口连接到单个网络时,Nova 将不会返回错误,而是将多个接口连接到同一个网络,并向 ‘nova boot’ 尝试返回正常的成功代码。

(‘nova interface-attach’ 已经允许第二次连接到同一个网络,无需更改。)

备选方案

可以通过使用同一个网络上的多个端口并将虚拟机连接到这些端口来规避此限制,而不是两次连接到同一个网络。 这尚未经过测试。 另一方面,这表明该限制是人为的,无论如何都应该删除。(无论如何,我们应该在更改后确认这一点,如果不行则修复它。)

可以使用 ‘nova interface-attach’ 启动虚拟机并获取同一个网络上的多个接口,但这需要虚拟机支持 PCI 热插拔。

数据模型影响

无。

REST API 影响

当尝试将多个接口连接到单个网络时,Nova 将不会返回错误,而是将所有接口连接到同一个网络,并向 ‘nova boot’ 尝试返回正常的成功代码。

安全影响

现在可以在虚拟机内桥接多个接口并导致广播风暴。 始终可以从虚拟机泛洪 Neutron 网络;这使得它更容易。 这本身并不构成安全问题,但它肯定使触发可能已经存在的安全问题变得更加简单。

通知影响

无。

其他最终用户影响

无。 使用当前成功的 API 调用最终用户将不会看到这些 API 中的行为发生变化。 这只会更改当前 API 失败的情况。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

实现

负责人

主要负责人

ijw-ubuntu

工作项

  • 更改 Nova 代码,参考现有的废弃补丁 https://review.openstack.org/#/c/26370 - 这需要将代码从问题所在处移植到当前 trunk。

  • 添加单元测试,这些单元测试缺失于废弃补丁中。

依赖项

无。

测试

独立于此规范,应在 Tempest 中添加测试

  • 至少,以确保可以在以这种方式创建的 VM 上的两个接口之间传递流量

  • 可选地,应测试来自另一个 VM 或外部数据包提供方的流量到任一接口。

应使用 nova boot 和 nova interface-attach 方法进行测试。

文档影响

应记录此更改。 当前行为没有文档。 nova-network multinic 的文档表明 VIF 附加到单独的网络,但这仅适用于 nova-network。

参考资料