Networking-vpp/L3 routing support
概述
此页面描述了将要添加到 networking-vpp 的 L3 功能。 目前此功能不可用。 它还将描述团队计划在代码、测试、文档以及任何其他交付物方面交付的内容。 此项目将向 networking-vpp 仓库添加代码,以在 OpenStack 安装中使用 networking-vpp 驱动程序与基于 vpp 的虚拟交换机结合使用时启用 L3 支持。 对于这项工作,将提供集中式路由器(非-dvr)方法。 有许多文档描述了 OpenStack Neutron 路由模型,包括
- https://docs.openstack.org/developer/neutron/devref/layer3.html
- https://developer.rackspace.com/blog/neutron-networking-l3-agent/
将要添加的功能
- 支持路由器 API 操作 (https://developer.openstack.org/api-ref/networking/v2/#routers-routers)
- 支持浮动 IP API 操作 (https://developer.openstack.org/api-ref/networking/v2/#floating-ips-floatingips)
- 完全支持基于东西向的租户网络之间的路由(仅通过集中式网络节点)
- 实例的浮动 IP 一对一 NAT 支持 (https://docs.openstack.org/newton/networking-guide/intro-nat.html)
- 集中式网络或控制节点方法(提供图示)
- 托管在 VPP 上的内部网关
- 外部网关 - 路由器上的内部网络的所有流量都 NAT 到路由器的外部 IP
- 支持 IPv4 和 IPV6
- 支持代理和/或 vpp 的重启
- 评估支持外部和内部作用域相同(即,对于 IPv4 不执行 NAT)。
不支持的功能
- HA 或任何基于 VRRP 的解决方案
- 分布式虚拟路由器拓扑 (DVR)
- LISP-GPE(当 GPE 定义得更好时,我们将描述它们如何协同工作)
- 设置“enable_snat = FALSE” API 网络扩展无效。 也就是说,在从外部网络发送/接收数据时,对于 IPv4 始终将使用 NAT。
- 与 Neutron 中可用的动态路由或 BGPVPN 功能的任何关联
- 不支持额外的静态路由(通常通过 API 调用提供给用户)
限制
- 必须与 networking-vpp 机制驱动程序结合使用
- L3 代理应仅在控制或网络节点上运行
- L2 代理应在所有节点上运行。
- 所有测试都将基于 Openstack 的 Newton 版本。
将要交付的内容
- 合并到 networking-vpp 仓库中的代码,以添加上述功能
- 合并到 networking-vpp 仓库中的单元测试,以测试步骤 1 中添加的代码
- 文档,描述提供的功能以及使用/安装要求 - 通过内部 wiki
- 向负责可以继续在初始合并后进行工作的人员进行 TOI 和代码讲解。
测试方法
作为此交付物包含的测试仅限于单元测试和使用安装了 VPP 实例的少量“冒烟测试”。 在代表实际部署的配置的物理服务器上进行完整的函数测试超出了此交付物的范围。
依赖项
这项工作将有一些依赖项才能正确交付功能。 以下是关键项目。
- 可用于安装的基于 17.01 的 vpp 和 vpp python 库 RPM
- 来自 networking-vpp 社区和核心评审人员的及时代码审查和代码合并
- 来自 vpp 虚拟交换机/虚拟路由器的对必要的 L3 功能的支持,包括
- 支持 NAT
- 支持代理 ARP
- 支持路由
- 支持 L2 桥接域上的 SVI/BVI 类型接口。
- fd.io 社区对测试中发现的任何错误或问题的及时响应。
- 一个负责人在初始合并后可以继续工作并指导其进行功能测试的人员。
- 对于客户发布,需要一个全面的功能测试套件和执行。
安装/使用说明
数据包流
东西向路由
计算节点 || || 网络节点 || || 计算节点
VM1_net1 --- vpp ----- fabric -------- GW net1 vpp GW net2 --------- fabric ------ vpp -- VM2_net2
GW net1 = 安装在 vpp 上的 BVI 的 network1 的网关
GW net2 = 安装在 vpp 上的 BVI 的 network2 的网关
浮动 IP(也称为 1-1 NAT)
计算节点 || || 网络节点 ||
VM1_net1 --- vpp ----- fabric -------- GW net1 vpp ext IP --------- 外部网络
GW net1 = 安装在 vpp 上的 BVI 的 network1 的网关
Ext IP = 路由器在外部子网上的 IP 地址,安装为 vpp 上的 L3 子接口
vpp 将配置为将 VM1 发送到分配的浮动 IP 的任何数据包 NAT
使用 neutron router-gateway-set 配置的外部网关(也称为 SNAT)
计算节点 || || 网络节点 ||
VM1_net1 --- vpp ----- fabric -------- GW net1 vpp ext GW IP --------- 外部网络
GW net1 = 安装在 vpp 上的 BVI 的 network1 的网关
Ext GW IP = neutron 分配给连接到公共子网的端口的 IP 地址
vpp 将配置为使用 Ext. GW 地址对目的地为 Internet 的在 BVI 上接收到的所有流量进行 NAT