在 TripleO 中启用 Neutron DVR

https://blueprints.launchpad.net/tripleo/+spec/support-neutron-dvr

Neutron 分布式虚拟路由应该能够在 TripleO 中配置。

问题描述

为了能够在 Neutron 中启用分布式虚拟路由,当前 TripleO 超云部署需要进行一些更改。超云计算节点使用 neutron-openvswitch-agent 镜像元素构建,该元素在计算节点上提供 neutron-openvswitch-agent。为了支持分布式虚拟路由,计算节点还必须安装 neutron-metadata-agentneutron-l3-agentneutron-l3-agentneutron-dhcp-agent 的安装也需要解耦。

此外,为了启用分布式虚拟路由,neutron.confl3_agent.iniml2_conf.ini 都需要具有额外的设置。

提议的变更

概述

在 tripleo-image-elements 中,将当前的 neutron-network-node 元素移动到一个名为 neutron-router 的元素,该元素将负责执行安装和配置工作,以安装 neutron-l3-agentneutron-metadata-agent。此 neutron-router 元素将在其 element-deps 中列出 neutron-openvswitch-agentneutron-network -node 元素然后将成为一个简单的“包装器”,其唯一目的是列出网络节点所需的依赖项(neutron、neutron-dhcp-agentneutron-router、os-refresh-config)。

此外,在 tripleo-image-elements/neutron 元素中,将修改 neutron.confl3_agent.iniplugins/ml2/ml2_conf.ini 以添加每个文件中支持分布式虚拟路由所需的配置变量(所需的配置变量列在 https://wiki.openstack.org/wiki/Neutron/DVR/HowTo#Configuration 中)。

在 tripleo-heat-templates 中,将修改 nova-compute-config.yaml nova-compute-instance.yamlovercloud-source.yaml 文件,以提供新的分布式虚拟路由变量的正确设置。 分布式虚拟路由的启用将由一个“NeutronDVR”变量确定,该变量默认情况下为“False”(未启用分布式虚拟路由),以保持向后兼容性,但如果需要分布式虚拟路由,则可以设置为“True”。

最后,tripleo-incubator 脚本 devtest_overcloud.sh 将被修改为:a) 使用 neutron-router 而不是 neutron-openvswitch-agent 构建 overcloud-compute 磁盘镜像,以及 b) 配置要传递到 overcloud heat 堆栈创建中的适当参数值,以便启用或禁用分布式路由。

替代方案

我们可以选择不对 neutron-router 镜像元素进行任何更改,并且它可以包含在计算节点磁盘镜像构建的元素参数列表中。 这会产生一个不希望的效果,即还在每个计算节点上包含/配置和启动 neutron-dhcp-agent。 或者,可以保持 neutron-network-node 元素不变,并创建一个 neutron-router 元素,该元素是 neutron-network-node 元素的大部分内容的副本,但没有对 neutron-dhcp-agent 元素的依赖。 这种方法会引入大量的代码重复。

安全影响

虽然 TripleO 安装不使用 FWaaS,但启用 DVR 目前已知会破坏 FWaaS。 请参阅 https://blueprints.launchpad.net/neutron/+spec/neutron-dvr-fwaas

其他最终用户影响

用户将能够在安装期间设置环境变量,以确定是否启用分布式虚拟路由。

性能影响

未发现

其他部署者影响

将添加在安装时启用或禁用分布式虚拟路由的选项。 默认情况下,分布式虚拟路由将被禁用。

开发人员影响

未发现

实现

负责人

主要负责人

Erik Colnick (erikcolnick 在 Launchpad 上)

其他贡献者

工作项

  • 在 tripleo-image-elements 中创建 neutron-router 元素,并将相关内容从 neutron-network-node 元素移动到该元素。 从 neutron-router 元素的 element-deps 中删除 neutron-dhcp-agent 依赖项。

  • neutron-router 元素作为依赖项添加到 neutron-network-node element-deps 文件中。 element-deps 文件将成为 neutron-network-node 元素的唯一内容。

  • https://wiki.openstack.org/wiki/Neutron/DVR/HowTo#Configuration 中指示的配置值添加到 neutron.confl3_agent.iniml2_conf.ini 文件中,这些文件位于 neutron 镜像元素中。

  • 将必要的引用变量添加到 nova-compute-config.yamlnova-compute-instance.yaml tripleo-heat-templates 文件中,以便能够设置上述文件中的新变量。 在 overcloud-source.yaml 中添加定义和默认值。

  • 修改 tripleo-incubator devtest_overcloud.sh 脚本,以设置适当的环境变量,这些变量将驱动超云上 neutron 的配置,以启用分布式虚拟路由器或禁用分布式虚拟路由器(默认情况下禁用)。

依赖项

测试

现有的 TripleO CI 将有助于确保在实施过程中,当前功能集不受影响,并且默认行为(禁用分布式虚拟路由器)得以保持。

应添加额外的 CI 测试,以测试使用分布式虚拟路由的安装,因为此实施完成。

文档影响

需要对新的配置选项进行文档记录。

参考资料