启动具有未分配端口的 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。
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
sbauza
- 其他贡献者
Rodolfo Alonso <rodolfo-alonso-hernandez> (ralonsoh@redhat.com)
功能联络人¶
- 功能联络人
无
工作项¶
工作项
更改测试 IP 分配的逻辑 [3]。
实现描述的 tempest 测试。
创建一个新的 Neutron 功能请求,以更改内置防火墙,使其能够正确处理这些没有分配 IP 地址的端口。
依赖项¶
没有。 Neutron 中所需的工作已经通过两个规范完成。 主要的 Neutron 更改是允许创建未分配地址的端口并标记它,方法是使用 ip_allocation 参数填充 none。 这涵盖在“允许 VM 在没有 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 |
重新提出 |
瑜伽 |
重新提出 |