Get Me A Network¶
https://blueprints.launchpad.net/neutron/+spec/get-me-a-network
在一些使用 Neutron 的云部署中,每个租户需要在启动虚拟机之前配置资源,例如网络、子网和路由器。这对于不了解网络或不想了解网络的人来说可能是一个难题——他们只想运行一个虚拟机。 在本文档中,我们将描述管理员如何配置其云网络,以便租户不必承担通常所需的繁重工作。
问题描述¶
租户如何在不自行创建 Neutron 网络的情况下启动虚拟机?
有多种选择。
云管理员可以创建一个共享私有网络
共享私有网络是一种所有租户都可以看到和使用的资源,例如,它将出现在 ‘neutron net-list’ 的输出中。 如果它是租户可见的唯一网络,那么默认情况下,‘nova boot’ 将使用它作为虚拟机的网络。
管理员可以使用几个命令创建此网络,例如
$ neutron net-create --shared private-shared-network
$ neutron subnet-create --name private-shared-subnet private-shared-network 10.0.0.0/24
$ neutron router-create private-shared-router
$ neutron router-interface-add private-shared-router private-shared-subnet
$ neutron router-gateway-set private-shared-router public-network
此外,管理员还可以向网络添加一个 IPv6 子网,从而自动为所有虚拟机提供 IPv6 地址
优点
易于配置,无需租户交互。
缺点
由于此网络由多个租户共享,它们也共享相同的广播域,因此可能被认为安全性较低,因为虚拟机之间的通信是可能的。 因此,建议默认启用安全组。
另一个缺点是,如果地址范围太小或虚拟机数量太多,此共享网络可能会“满”。 因此,应该创建一个合理大小的默认子网。
云管理员可以为每个租户配置一个提供商网络
与共享私有网络类似,提供商网络可以是一个所有租户都可以共享的资源。 不同之处在于,它不需要 Neutron 路由器,该功能由基础设施提供。
管理员可以使用几个命令创建此网络,例如
$ neutron net-create provider-shared-network --provider:network_type flat --provider:physical_network eth0
$ neutron subnet-create --name private-shared-subnet private-shared-network 10.0.0.0/24
优点
易于配置,无需租户交互。
缺点
与共享私有网络类似。
云管理员可以为每个租户配置一个 Neutron 网络
作为租户创建的一部分,例如,在调用 Keystone 创建租户之后,管理员可以自动配置 Neutron 资源——网络、子网和路由器。 这可能是部署特定的大型后期创建步骤的一部分。
优点
每个租户都为其虚拟机提供一个私有网络。
缺点
资源使用量增加,因为每个租户将拥有自己的路由器和 DHCP 服务器配置。
注意:此方法将不会作为本规范的一部分实现。
更改 Neutron 以自动分配资源
Neutron 可以更改为在 Nova 调用它启动虚拟机时自动分配网络、子网和路由器。 今天此代码不存在,但鉴于这是本规范的主要原因,将在着陆此功能时作为 devref 文档的一部分提出。
优点
每个租户都为其虚拟机提供一个私有网络。
缺点
更复杂。 仍然需要管理员定义默认值或用于分配网络的资源。 如果同时进行许多调用,则可能存在竞争条件。
提议的变更¶
记录部署者如何创建共享私有网络并将其连接到物理网络。 上面的示例中大部分内容都在这里。 我们还将记录如何创建提供商网络。 这将涵盖上述选项 1 和 2。
对于选项 4,详细的实现将作为更改的一部分在树中的 devref 文档中完成。
未来工作¶
未来的增强功能可以是使用新的字段更新 Neutron 网络模型,以标识这些“默认”共享网络。 这将允许 Nova 或 Neutron 代码在存在多个网络时过滤它们,从而避免令人头疼的
错误 (BadRequest): 找到多个可能的网络,使用网络 ID 以更具体地说明。 (HTTP 400) (Request-ID: req-b429d44c-d6e8-4e29-9425-928c2dc22411
在启动时可用多个网络时可能发生的情况。
这可以作为新的标志或新的首选项值来实现,该值可用于按优先级过滤网络。 这将对 API 和 CLI 产生影响,并影响 Nova 和 Neutron 代码。 这项工作需要在另一份文档中指定。
Gerrit Topic¶
为了使审查者能够找到提供实现一致工作的补丁,将使用 gerrit 主题 get-me-a-network。
参考资料¶
Neutron 内部尝试进行编排类型魔术的例子有很多,结果使得外部编排工具[1]难以使用,增加了竞争条件,并导致了资源所有权的争议[2]。 我们希望避免这项工作中的相同问题。 因此,我们需要能够区分处于 VPC(即具有高级网络)中的实例和不处于 VPC 中的实例。 例如,AWS 今天就这样做。
[1] http://lists.openstack.org/pipermail/openstack-dev/2014-April/032098.html [2] https://bugs.launchpad.net/nova/+bug/1158684
Liberty 峰会上的 Etherpad
https://etherpad.openstack.org/p/YVR-neutron-get-me-a-network