Neutron 动态路由¶
OpenStack 支持动态路由,特别是 BGP。BGP 是许多电信公司和其他拥有复杂网络的组织的重要路由基础设施组成部分。我们的 charms 需要扩展对动态路由的支持。
问题描述¶
在典型的 Neutron Gateway 设置中,基础设施路由器不了解分配给 OpenStack 租户的私有网络。因此,OpenStack 外部的服务不知道如何将流量路由到 OpenStack 实例。由于 OpenStack 网络是弹性的,因此可以以多种方式演进,因此需要一种在 OpenStack 和外部路由器之间通信更改的方式。
由于 OpenStack 中的网络是自助式的,因此 OpenStack 网络的任何添加或删除都不应依赖于网络管理员的操作。网络限制应预先设置。OpenStack 中子网池的使用进一步促进了这一点。
其他影响包括将子网从第二层解耦,允许为浮动 IP 使用不同的下一跳。
提议的变更¶
Neutron 动态路由通过引入一个 BGP 扬声器来解决此问题,然后与现有的基础设施路由器建立对等关系,并通告 OpenStack 拥有的网络的下一跳虚拟路由器。这允许基于 OpenStack 网络的变化,将动态路由更改传达给物理基础设施。由于 OpenStack 网络由用户管理,因此需要实施地址范围限制。
建议创建一个名为 neutron-dynamic-routing 的新 charm,它将配置和部署 neutron-bgp-dragent(Neutron BGP 动态路由代理)。neutron-bgp-dragent 是一个 BGP 扬声器,可以与 BGP 基础设施中的现有路由器建立对等关系。此 charm 需要 AMQP 接口,以及可能需要的 neutron-api-plugin 接口(待定)。为了测试目的,它还将使用 bgp 接口与 quagga charm 建立对等关系,两者均由 Frode Nordahl 编写(参见下面的测试)。
需求¶
该 charm 需要选择提供商网络上的一个接口,用于与 OpenStack 通信。它可能还需要选择一个接口,用于与基础设施中的 BGP 路由器通信。
高可用性是通过部署 N 个 neutron-dynamic-routing 单位来实现的,并注意将其放置在不同的物理主机上。这将引入多个 neutron-bgp-dragent。BGP 基础设施路由器需要手动告知每个 neutron-bgp-dragent。
IPv4 和 IPv6 支持通过为每个协议定义单独的 bgp-speaker 来处理。
该 charm 需要支持 DVR 和集中式 OpenStack 路由。
超出范围¶
重要的是要了解 OpenStack 动态路由实现不做什么,以及超出此规范范围的内容。
它不提供进入 OpenStack 的 BGP,它纯粹是 OpenStack 拥有的网络的出站通告。
它不会自动通告所有 OpenStack 网络或整个子网池。仍然需要大量的管理员配置,包括将 OpenStack 网络与 bgp-speaker 关联。请参阅 测试文档,以了解所需的管理开销。
它不提供注入任意 BGP 路由的机制(例如,对于 /32 FIP)。它只是通告与 bgp speaker 关联的 OpenStack 网络。
备选方案¶
浮动 IP 和 NAT 总体上是解决此问题的一种方法,但存在一些缺点。首先,随着连接数的增加,NAT 会带来性能损失。在云环境中,许多 VM 可以建立与各种外部对等的连接,这可能需要大量的内存和 CPU 资源。Neutron gateway 在没有手动干预的情况下无法真正扩展。此外,如果仅使用 NAT,对等方实际上无法知道哪个实例建立了连接,它们只知道连接来自“云”。DVR 也同样适用。
物理网关上的静态路由是最接近 BGP 解决方案的方法。唯一的缺点是操作上的;如果 Neutron 中的地址范围发生变化,这些变化也需要实施到物理路由器上。
实现¶
负责人¶
- 主要负责人
thedac
- 额外工作
fnordahl
Gerrit Topic¶
对于与此规范相关的所有补丁,请使用 Gerrit 主题“<topic_name>”。
git-review -t dragent
工作项¶
新的 charm neutron-dynamic-routing
将开发一个新的 reactive charm 来配置和部署 neutron-bgp-dragent。
更新 neutron-api charm
neutron-api charm 需要加载 service_plugin neutron_dynamic_routing.services.bgp.bgp_plugin.BgpPlugin,然后运行 db migrate。
可能需要新的 neutron-api-plugin 接口
目前尚不清楚是否需要与 neutron-api 的关系。如果需要,尚未存在 neutron-api-plugin 的分层接口,并且需要创建它。
新的 charm quagga
为了测试目的,新的 quagga charm 将作为 BGP 对等方,以验证和测试 neutron-dynamic-routing。Frode Nordahl 已经开始从事这个项目:https://github.com/openstack-charmers/charm-quagga
新的接口 bgp
为了测试目的,新的 bgp 接口将定义 neutron-dynamic-routing 和 quagga charm 之间的对等关系。Frode Nordahl 已经开始从事这个项目:https://github.com/openstack-charmers/interface-bgp
仓库¶
需要一个新的仓库来存放 neutron-dynamic-routing charm。
https://git.openstack.org/openstack/charm-neutron-dynamic-routing
需要一个新的仓库来存放 quagga charm。
https://git.openstack.org/openstack-charmers/charm-quagga
需要一个新的仓库来存放 bgp 接口。
https://git.openstack.org/openstack-charmers/interface-bgp
文档¶
需要更新 charm 部署指南。
上游文档位于以下位置:https://docs.openstack.org/neutron-dynamic-routing/latest/
安全性¶
neutron-dynamic-routing charm 依赖于 OpenStack 的 BGP 实现。它使用一个简单的字符串作为密码。
测试¶
neutron-dynamic-routing charm 需要使用 BGP 对等方进行测试。Frode Nordahl 已经开始从事 quagga charm 的工作,它将作为基础设施 BGP 路由器,允许进行测试和验证。
mojo spec 或其他合适的自动化测试是此功能实现的要求。
依赖项¶
无