重构节点组和集群中浮动 IP 的逻辑

https://blueprints.launchpad.net/sahara/+spec/refactor-use-floating-ip

当前,配置文件中有一个名为use_floating_ips的布尔值,它混淆了实例存在浮动 IP 和 Sahara 使用浮动 IP 进行管理这两个逻辑。应该重构此逻辑。

问题描述

use_floating_ips设置为 True 时,含义如下:

  • 除了使用代理节点的情况外,所有实例都必须具有一个浮动 IP。

  • 因此,在使用 neutron 时,每个节点组都必须提供浮动 IP 池值,并且在使用 nova 网络时,必须配置 nova 以自动分配浮动 IP。

  • Sahara 必须使用浮动 IP 进行管理。

  • 这些要求对每个用户、每个节点组和每个集群中的所有应用程序都有效。

use_floating_ips为 False 且使用 neutron 时:

  • 任何设置了浮动 IP 池值的节点组模板都无法使用,并且将无法启动。同样,在使用代理节点时也有例外。

  • 因此,仅仅修改 Sahara 配置文件中的use_floating_ips值就会使整个现有且可用的模板失效。

随着我们向虚拟和裸机集群共存的世界发展,我们需要修改浮动 IP 周围的逻辑,以提供更大的灵活性。例如,使用没有浮动 IP 的扁平物理网络的裸机集群应该能够在 Sahara 中与使用浮动 IP 的虚拟网络的 VM 集群共存(目前这是不可能的)。

随着 nova、neutron 和 ironic 在混合网络和实例场景方面取得进一步进展,Sahara 需要灵活性来适应新功能。当前混淆的逻辑是这种灵活性的障碍。

提议的变更

从逻辑上讲,这个改变很简单,但实现需要仔细的分析和测试,因为关于浮动 IP 以及 nova 与 neutron 网络使用的知识分布在整个代码库中。这在 SSH 连接和代理网关以及配额逻辑方面变得尤其复杂。

拟议的逻辑改变如下:

  • use_floating_ips的语义将被更改为“如果实例分配了浮动 IP,Sahara 将使用该浮动 IP 进行管理,否则将使用内部 IP”。此标志不应施加任何其他要求,也不应与它关联任何其他期望。

  • 在 neutron 网络的情况下,如果节点组指定了浮动 IP 池,则该节点组中的实例将具有浮动 IP。如果节点组未指定浮动 IP 池,则不会报错,但实例将没有浮动 IP。

  • 在 nova 网络的情况下,如果配置 nova 以自动将浮动 IP 分配给实例,则实例将具有浮动 IP。如果 nova 不分配浮动 IP,则实例将没有浮动 IP。

  • 在 neutron 网络的情况下,use_namespaces设置为 True 将继续意味着“使用 IP 网络命名空间连接到没有浮动 IP 的机器”,但必须单独检查每个实例,以确定是否为其分配了浮动 IP。测试CONF.use_namespases and not CONF.use_floating_ips将不再有效。

替代方案

没有。自从 nova 网络独占使用并且事情更简单以来,这个逻辑一直存在于 Sahara 中;现在是重构的时候了。

数据模型影响

REST API 影响

没有,尽管验证代码需要进行更改。API 本身没有改变,但语义上允许的内容发生了变化(例如,节点组必须具有浮动 IP 池值)。

其他最终用户影响

需要教育用户了解设置use_floating_ips的含义变化以及在配置节点组时他们所做的选择。

部署者影响

此更改应该对现有的 Sahara 实例是透明的。可用的模板应该继续可用,并且正在运行的集群不应受到影响。改变将是控制新集群中浮动 IP 使用的能力。

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

不确定。过去,Sahara 仪表板的配置设置会涉及到浮动 IP 的使用。应审查当前的配置参数,以查看这是否对 horizon 有任何影响。

实现

负责人

Trevor McKay 已经为此制作了一个补丁,该补丁应该相当完整,但他无法完成它。他处于测试阶段时,这项工作停止了,并且有相当大的信心该解决方案适用于 neutron(但需要在 nova 网络环境中进行更多测试)。

主要负责人:tellesnobrega

其他贡献者:tmckay

工作项

  • 重构浮动 IP 使用

  • 实现测试

依赖项

测试

单元测试足以覆盖模板验证例程的更改和 Sahara 中的逻辑流程(Sahara 是否正在尝试使用浮动 IP 或不使用?)。

应为use_floating_ips的两个值、neutron 和 nova 网络配置以及具有和不具有浮动 IP 池值的节点组构建场景测试。

文档影响

use_floating_ips的新含义应在配置值和 nova 网络情况下的 nova 设置文档中涵盖。

还应在节点组模板的讨论中指出,浮动 IP 池值不再需要或禁止,具体取决于use_floating_ips的值。

如上所述,尚不清楚 Sahara 仪表板配置值是否需要更改。如果发生更改,则应相应地更改 horizon 文档。

参考资料