启动具有未分配端口的 VM

https://blueprints.launchpad.net/nova/+spec/boot-vm-with-unaddressed-port

此蓝图旨在允许 VM 启动时附加一个端口,但未分配任何 IP 地址。

问题描述

目前,Neutron 允许用户创建一个与相应的子网和 IP 池关联的端口,但不分配 IP 地址。但是,Nova 仅允许用户创建一个没有 IP 地址的端口,如果地址分配被推迟;这意味着端口预计将拥有 IP 地址,但 Neutron 推迟了 IP 分配,直到将端口绑定到的主机被填充为止。

然而,有些网络应用(例如:服务功能转发、服务功能分类器、CMTS)经常转发并非为其预期的流量。这些应用有一个没有主 L3 地址的接口,该接口可能会接收到针对如此多不同地址的流量,以至于在 Neutron 中配置所有这些地址会带来负担。

用例

一个典型的用例是,当用户希望部署一个接受既不是 IPv4 也不是 IPv6 流量的 VM 时。例如,一个 CMTS(电缆调制解调器终止系统)。

另一个用例可能是接受来自非常广泛地址范围的流量(用于转发或终止)的 VM,并且该端口没有主地址。在这种情况下,该 VM 不是传统的应用 VM。

提议的变更

此规范建议允许启动一个具有手动创建的、未分配 IP 地址的端口的 VM。

当在 Neutron 中使用“--no-fixed-ip”选项创建端口时,端口参数 ip_allocation [1] 将被填充为“none” [2]。 这样,Neutron 标记一个端口不应具有 IP 地址。 Nova 在实例创建期间验证构建选项;特别是提供绑定到此新 VM 的端口。为了能够使用未分配地址的端口,Nova 需要修改测试 IP 分配的逻辑 [3]

备选方案

如用例中评论的那样,有些应用将接受既不是 IPv4 也不是 IPv6 的流量。 在这些端口上拥有 IP 地址无关紧要,但不会影响应用。

在其他情况下,例如在路由应用中,没有替代方案。 在 Neutron 中定义所有可能的 IP 地址是不可能的。

数据模型影响

Neutron 端口在 ip_allocation 参数和 binding:vif_details 中的 connectivity 参数中包含所需的信息。

REST API 影响

安全影响

这些没有分配 IP 地址的端口无法与 Neutron 内置防火墙(iptables 和 OVS Open Flows 基于)一起工作。 这两个防火墙将根据多个参数(包括 IP 地址)过滤入站和出站流量。 为了让流量进入虚拟接口,必须在托管 VM 的计算节点上禁用防火墙。 此强制配置将被记录。

一旦 Nova 功能实现并经过测试,将向 Neutron 提出一个新的功能请求,以便允许这些没有 IP 地址的端口与内置防火墙正确工作。

通知影响

其他最终用户影响

为了能够远程访问创建的 VM,用户需要向 VM 添加一个已分配地址的端口。 此“管理”端口必须具有 IP 地址。

性能影响

其他部署者影响

某些 L2 驱动程序,例如“l2-pop”,在处理这种类型的端口时可能会出现问题,因为它们使用代理 ARP 来响应来自已知 IP 地址的 ARP 请求。

["novnc"] 服务无法与没有 IP 地址的端口一起工作。 这就是为什么建议创建一个至少具有一个分配了 IP 地址的管理端口的 VM。

开发人员影响

升级影响

实现

负责人

主要负责人

stephenfinucane

其他贡献者

Rodolfo Alonso <rodolfo-alonso-hernandez> (ralonsoh@redhat.com)

功能联络人

功能联络人

stephenfinucane

工作项

工作项

  • 更改测试 IP 分配的逻辑 [3]

  • 实现描述的 tempest 测试。

  • 创建一个新的 Neutron 功能请求,以更改内置防火墙,使其能够正确处理这些没有分配 IP 地址的端口。

依赖项

无。中子方面所需的工作已通过两个规格完成。主要的 Neutron 变更允许创建未分配地址的端口并对其进行标记,方法是填充 ip_allocation 参数为 none。这包含在“允许虚拟机在没有 L3 地址(子网)的情况下启动” [5] 规格中。作为“Nova 的端口绑定事件扩展信息” [4] 规格引入的变更意味着 Neutron 现在将提供端口绑定的后端类型,参数 connectivity 现在包含在 binding:vif_details 中。Nova 可以确定给定的驱动后端是否具有“L2”连接,如果是,则知道可以将没有 IP 地址的端口分配给虚拟机。

测试

除了所需的函数和单元测试之外,tempest 测试可以涵盖此功能。 此 tempest 测试将启动三个 VM,每个 VM 都有一个管理端口,以便能够 SSH 到机器。 然后将创建两个流量网络,net1 和 net2。

第一台机器将有一个连接到 net1 的端口,并分配了 IP 地址。 第三台机器将有一个连接到 net2 的端口,并分配了 IP 地址。 最后,第二台机器,位于第一台和第三台机器之间,将通过两个没有 IP 地址的端口连接到 net1 和 net2。 第二台机器将具有必要的 iptables 规则,以 NAT 流量在第一台 VM 和第三台 VM 端口之间。

第一台和第三台机器都需要在 ARP 表中手动条目,以强制流量通过流量端口流出。

文档影响

  • 在“启动实例”用户文档中引用此功能 [6]

参考资料

历史

修订

发布名称

描述

Train

引入

Xena

重新提出