Neutron BGPaaS 增强¶
https://bugs.launchpad.net/neutron/+bug/1921461
增强 Neutron BGPaaS,以直接支持 Neutron 路由器以及来自这些路由器通过内部和外部 Neutron 网络进行的 bgp 对等互连
问题描述¶
Neutron BGPaaS 中已经存在很好的基础 API,它带来了 BGP 服务功能(参见 [1]),通过 Neutron 动态路由将其引入 Neutron。(参见 [3])
注意
在本规范中,Neutron-BGPaaS、BGPaaS 和 neutron-dynamic-routing/bgp 用作同义词。这些指的是 Neutron 中已有的“使用 BGPaaS 的 Neutron 动态路由”功能。 同样,‘ISP 网络’和‘Neutron 外部网络’用作同义词。
在电信服务提供商环境中,运行 VNF(虚拟网络功能 [4])和 CNF(容器化网络功能),为用户提供简单到相当复杂的服务。这些 VNF 使用许多非 Neutron IP 地址,需要将其暴露给用户。用户通过这些非 Neutron IP 地址访问这些服务,这些地址被称为“服务地址”。它可以属于 IPv4(或)IPv6 地址族。
服务地址完全在 VNF 内部管理,对 Neutron 而言是透明的。但这些服务地址可以通过 VNIC(或端口)持有的 Neutron 管理地址在数据平面上被用户访问。简而言之,VNF VNIC 上的 Neutron 管理主地址充当 VNF 服务地址的下一跳。
为了使这些服务地址从 ISP 网络获得 L3 可达性(或)使服务地址可从另一个 neutron-tenant-network 实体访问,需要将这些服务地址引入 Neutron 路由器的路由表。
VNF 的数量很高,因此要暴露的服务地址的数量也很多。“VNF 与其宿主 Neutron 路由器之间的 BGP”为控制平面驱动的路由学习服务地址提供了一种优雅且可扩展的自动化方法。这使得来自连接到相同 Neutron 路由器的其他 neutron-tenant-network-VNF 的此类服务地址的 L3 可达性成为可能。
这些服务地址还需要通告给 ISP-PE 路由器。这将使 ISP 网络上的用户能够使用 VNF 中应用程序导出的服务。
现有的 Neutron 动态 BGPaaS 在支持上述需求方面略有不足,原因如下
现有的 BGPaaS 缺乏通过 Neutron 内部网络进行 BGP 对等互连的功能(API 和实现)。将服务地址添加到 Neutron 路由器路由表需要 BGP 控制平面通过 BGP 对等互连(参见 [2])从 VNF 通过 Neutron Tenant 网络从 Neutron 路由器传入。它还需要 BGP 扬声器从 BGP 对等体学习路由。当前实现会向对等体通告路由,但不会从对等体学习。
现有的 Neutron BGPaaS 仅支持通过非 Neutron 网络进行 BGP 对等互连。请参阅当前实现和文档,如 [8]。将服务地址通告给 ISP-PE 路由器需要通过 Neutron 外部网络进行 BGP 对等互连。这将使 ISP-PE 路由器能够通过 BGP 控制平面学习服务地址。从而,使 ISP 侧的用户能够利用 VNF(和 CNF)提供的服务。
现有的 BGPaaS 不提供将 BGP 扬声器与路由器关联的 API/实现。它当前支持网络与 BGP 扬声器的“松散关联”。这种“松散关联”的概念是 BGP 扬声器通过 API 推断 Neutron 路由器的路由,而不是由于 BGP 扬声器与 Neutron 路由器的直接连接。将 BGP 扬声器与路由器关联可以访问所有 neutron-router-接口,即内部/外部接口。这将使与 Neutron 路由器关联的单个 bgpspeaker 能够同时与 neutron-tenant-network 上的 VNF 以及 neutron-external-network 上的 ISP-PE 路由器进行对等互连。
它也不支持 BGP 对等组功能。BGP 对等组功能可以实现 Neutron 路由器在 VNF 集群扩展或从 VNF 集群缩减时,自动进行 bgp 对等互连。自动 bgp 对等互连指的是当前 BGP 扬声器将增强为自动接受来自 VNF 的对等请求,如果 VNF 在 Openstack tenant 可以为 BGP 扬声器配置的预配置 ip 地址范围(也称为 listen-range)内。
BGPaaS 功能将在不同的 Neutron 后端中具有不同的实现。因此,在 Neutron BGPaaS API 中包含一些反馈非常重要。它将允许各种 Neutron 后端(包括参考 BGPaaS 后端)在 Openstack Infra 内部驱动 BGP 资源由 Neutron BGPaaS 暴露的实现状态。为此,规范中的建议是添加一种新的资源类型“关联”,它可以与当前的 BGPSpeaker 对象一起工作。更具体地说,计划支持 router_association、peer_association 作为 BGPSpeaker 对象下的资源。
router_association资源将用于创建 BGPSpeaker 与 Neutron 路由器之间的绑定,这将内部地实现在该 Neutron 路由器上的 BGP 控制平面。 同样,peer_association资源将用于创建 BGPSpeaker 与 BGPPeer 之间的绑定,这将内部地实现 BGPSpeaker 和 BGPPeer 资源之间的 BGP 对等互连。
提议的变更¶
为了使服务地址从 ISP 网络或从另一个 neutron-tenant-network 实体获得 L3 可达性,引入了以下用例
启用 直接 BGP 对等互连 (参见 [2]_) 从 Neutron 路由器到 VNF (或 CNF) 在其 连接的网络上。这为托管在这些 VNF 上的服务地址提供了 L3 可达性,因为这些地址将通过 BGPaaS 控制平面安装到 Neutron 路由器的路由表中。该建议是提供将 BGP 扬声器直接与 neutron-router 关联的设施,这将反过来使路由器能够从 VNF 学习 BGP 控制平面路由。单个路由器可以与 BGP 扬声器关联,扬声器将在 L3 路由器命名空间内运行。启用 通过 Neutron 外部网络从 Neutron 路由器到 ISP-PE 路由器进行 BGP 对等互连。这允许 ISP-PE 路由器通过 BGP 控制平面从 Neutron 路由器学习服务地址。从而,使 ISP 侧的用户能够利用 VNF(和 CNF)提供的服务。支持 BGP 对等组功能这将允许在 VNF 集群扩展或缩减时,透明地扩展 bgp 对等互连到许多 VNF。它支持对一组配置了 IP 地址范围的远程邻居进行 BGP 对等互连。这也可以用于 k8s over openstack 部署中,其中 CNF 扩展/缩减是纯 k8s 操作。在这种情况下,调用 neutron API 将是不希望的。
将添加新的资源(网络关联、路由器关联、对等关联)作为本规范的一部分。关联资源提供以下好处
启用 BGP-Speaker-to-BGP-Peer 绑定以及 BGP-Speaker-to-Router 绑定特定的某些 BGP 控制平面参数的配置。例如:某些属性(状态、advertise-extra-routes 等)在链接到关联资源而不是直接链接到父资源(扬声器、对等体)时很有用。BGP 对等体可以与不同的 BGP 扬声器关联,因此在 bgp-peer 中拥有状态字段没有好处。它只有在与对等关联资源关联时才有用。
使 Neutron BGPaaS API 能够向 Openstack Tenant 提供 BGP 控制平面实现状态的反馈。例如:在本规范中,计划引入一个新的状态字段。这将允许 Neutron-BGPaaS 后端驱动程序在 Openstack Infra 内部提供不同 BGP 资源的实现状态。
+-----------------------------------------------+
| |
| ISP- PE Router |---------|
| | |
+-----------------------------------------------+ EBGP
| |
| |
+-----------------------------------------------+ |
| |---------|
| Neutron Router |
| |---------|
+-----------------------------------------------+ |
| |
| EBGP
+-----------------------------------------------+ |
| VNF Cluster | |
| +-----------------+ +-----------------+ |---------|
| | VM1 | | VM2 | |
| +-----------------+ +-----------------+ |
+-----------------------------------------------+
为了将 VNF 托管的多个服务地址通告给 ISP-PE 路由器,创建了 2 个 BGP 会话。一个 BGP 会话直接从托管 VNF neutron-tenant-networks 的 Neutron 路由器创建到 VNF。下一个 BGP 对等互连直接通过 Neutron 外部网络从 Neutron 路由器到 ISP-PE 路由器。
建议增强现有的 BGPaas(参见 [6]),允许将 neutron 路由器与 BGP 扬声器关联,并允许 BGP 扬声器与该 Neutron 路由器上存在的内部网络和外部网络进行对等互连。这将通过对 neutron-service 和 neutron-dynamic-routing 的增强来实现。
实现方法¶
选项 1¶
当将 neutron-router 与 BGP 扬声器关联时,BGP 扬声器将在路由器命名空间内生成。BGP 扬声器将在 L3 路由器命名空间内运行,从而可以访问所有 neutron-router-接口,即内部/外部接口。将重用 OS-Ken 提供的 BGP 功能,以仅在 neutron 路由器命名空间内运行 BGP 扬声器功能。
BGP 服务 插件 将被增强为接受将 BGP 扬声器与路由器关联的请求。BGP L3 代理 扩展 将实现 BGP 增强的 L3 代理端。它将负责在路由器命名空间内实现 bgpspeaker,现在 bgpspeaker 可以根据配置从路由器命名空间内与邻居进行对等互连。
+---------------+ +-----------------------------------+
|DHCP namespace | |Router namespace |
| qdhcp | | qrouter |
| +------+ | | +---+ +---+ +-----------+ |
| | tap | | | | qr| | qg| |BGP Speaker| |
| +------+ | | +---+ +---+ +-----------+ |
| | | | | | |
+---------------+ +-----------------------------------+
| | |
+--------------------------------------------------------------+
| | | | |
| +--------+ +-------+ +-------+ |
| |Port tap| |Port qr| |Port qg| |
| +--------+ +-------+ +-------+ |
| br-int |
+--------------------------------------------------------------+
选项 2¶
在选项 1 中,由于 BGP 扬声器生成在路由器命名空间内,扬声器与该路由器命名空间紧密耦合。对于位于托管原始路由器的相同网络节点上的不同路由器上的不同 BGP 扬声器,需要一个新的 BGP 扬声器实例化。这可能会给选项 1 带来可扩展性和性能问题。
在选项 2 中,建议创建和使用 VRF 进行 BGP 对等互连。VRF 设备(参见 [9])可以用作 BGP 对等互连的替代方案,而不是命名空间。VRF 是一个具有自己的关联路由表的第 3 层主网络设备。它还提供了 VRF any 套接字,该套接字允许单个进程实例有效地为所有 VRF 提供服务。因此,对于 N 个关联的 BGP 扬声器的路由器,将创建 N 个 vrf,但单个 BGP 扬声器将服务于所有这些 vrf。
+---------------+ +-----------------+ +-----------------+
|DHCP namespace | |Router namespace | | VRF device | +-------+
| qdhcp | | qrouter | | | | BGP |
| +------+ | | +---+ +---+ | | +---+ +---+ |N---1|speaker|
| | tap | | | | qr| | qg| | | | vr| | vg| | +-------+
| +------+ | | +---+ +---+ | | +---+ +---+ |
| | | | | | | | | | |
+-------------- + +-----------------+ +-----------------+
| | | | | |
+-----------------------------------------------------------------+
| | | | | | |
| +--------+ +-------+ +-------+ +-------+ +-------+ |
| |Port tap| |Port qr| |Port qg| |Port vr| |Port vg| |
| +--------+ +-------+ +-------+ +-------+ +-------+ |
| |
| br-int |
+-----------------------------------------------------------------+
当前的 L3Plugin 和 L3Agent 将继续提供 Neutron-Router 功能。BGP-Dr-Agent 将实现 VRF,并在将 neutron-router 与 BGP 扬声器关联时创建新的 VRF。VRF 将仅用于 BGP 对等互连,并且学习到的路由将安装在路由器命名空间内。
必须从内部和外部子网池分配额外的 IP 地址给 vr、vg 接口。这些 IP 地址将用于 BGP 对等互连,并且可以考虑分配新的 IP 地址作为此选项的缺点。
选项 3¶
VRF 设备可以提供路由器命名空间提供的大多数 L3 功能。在此选项中,想法是用 VRF 设备完全替换命名空间。当创建 neutron-router 时,将创建一个新的 VRF。
L3 路由和 BGP 都可以通过 VRF 实现。Linux-VRF 将提供 neutron 路由器功能,包括东西向、南北向和 NAT 的数据平面 L3 转发。
这提供了与选项 2 相同的优点,并消除了其缺点。但此方法的主要问题是它将与现有的 L3 实现产生很大的偏差,这将需要大量的努力和时间。这还需要更改升级机制。
注意
当前计划是实现选项 1,它更简单,并且不会偏离现有实现太多。如果将使用实施选项 3,它将只是一个逐步替换(从命名空间到 vrf),并具有适当的升级路径。
具有 BGPaaS 的 HA 兼容 Neutron 路由器¶
当具备 HA 功能的 Neutron 路由器与 BGPSpeaker 关联时,将运行两个 BGPSpeaker 实例,一个在活动路由器命名空间中,另一个在待机路由器命名空间中。每当从活动命名空间故障转移到待机命名空间时,待机 BGPSpeaker 将能够与 BGP 对等体建立连接,并成为管理路由器的活动 BGP 对等体。
此规范中计划的实现仅支持集中式 Neutron 路由器(HA 和非 HA),而不支持分布式路由器。
REST API 与 Neutron 客户端命令影响¶
用例 a)
将 Neutron 路由器关联到 BGP Speaker API¶
POST /v2.0/bgp-speakers/<bgp-speaker-id>/router_associations
{
"router_association":
{
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"advertise_extra_routes": True
}
}
router_id表示要关联 BGP speaker 的 Neutron 路由器的 UUID。advertise_extra_routes决定 Neutron 路由器上的额外路由是否会被 bgpspeaker 重分发到 bgp 对等体。默认值为True,因此所有 Neutron 额外路由都将被重分发到绑定到 BGP Speaker 的每个 bgp 对等体。关闭 advertise_extra_routes 将禁用 bgpspeaker 对 neutron 路由器额外路由的广播。
注意
该增强功能将支持将路由器关联到单个 BGP speaker。将路由器与 speaker 以及网络与 speaker 的关联将是互斥操作。
新的 Neutron 客户端命令
openstack bgp speaker router association create
[--advertise-extra-routes]
[--no-advertise-extra-routes]
<bgpspeaker>
<router>
将 Neutron 路由器从 BGP Speaker API 中分离¶
DELETE /v2.0/bgp-speakers/<bgp-speaker-id>/router_associations/<router
-association-uuid>
新的 Neutron 客户端命令
openstack bgp speaker router association delete
<bgpspeaker>
<router>
注意
如果 speaker 已经具有多个关联(例如对等体关联和路由器关联),则不允许删除 BGP Speaker。 同样,也不允许删除与 BGP speaker 关联的路由器。
更新 BGP Speaker 路由器关联¶
PUT /v2.0/bgp-speakers/<bgp-speaker-id>/router_associations/<router
-association-uuid>
{
"router_association":
{
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"advertise_extra_routes": True
}
}
advertise_extra_routes字段在更新路由器关联时可以设置为 True 或 False。
新的 Neutron 客户端命令
openstack bgp speaker router association update
[--advertise-extra-routes]
[--no-advertise-extra-routes]
<bgpspeaker>
<router>
列出给定 BGP speaker 的路由器关联¶
GET /v2.0/bgp-speakers/<bgp-speaker-id>/router_associations
{
"router_associations": [
{
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"advertise_extra_routes": True
"status": 'ACTIVE'
},
{
"router_id": "a330d7f6-ceb7-40a0-8b81-a425dd994bbe",
"advertise_extra_routes": True
"status": 'ACTIVE'
}
]
}
status属性有助于了解 Neutron-BGPaaS 后端软件是否已在 openstack 基础设施上成功实现路由器关联。状态字段可以是DOWN或ACTIVE。
显示 BGP speaker 路由器关联的详细信息¶
GET /v2.0/bgp-speakers/<bgp-speaker-id>/router_associations/<router
-association-id>
{
"router_association":
{
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"advertise_extra_routes": True
"status": 'ACTIVE'
}
}
创建 BGP speaker 对等体关联¶
POST /v2.0/bgp-speakers/<bgp-speaker-id>/peer_associations
{
"peer_association":
{
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf",
}
}
peer_id表示要关联 BGP speaker 的 BGP 对等体的 UUID。
新的 Neutron 客户端命令
openstack bgp speaker peer association create
<bgpspeaker>
<peer>
删除 BGP speaker 对等体关联¶
DELETE /v2.0/bgp-speakers/<bgp-speaker-id>/peer_associations/<peer
-association-uuid>
注意
不允许删除具有对等体关联的 BGP speaker。
新的 Neutron 客户端命令
openstack bgp speaker peer association delete
<bgpspeaker>
<peer>
列出给定 BGP speaker 的对等体关联¶
GET /v2.0/bgp-speakers/<bgp-speaker-id>/peer_associations
{
"peer_associations": [
{
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"status": 'ACTIVE'
},
{
"peer_id": "a640d7f6-ceb7-40a0-8b81-a425dd994dde",
"status": 'ACTIVE'
}
]
}
status属性有助于了解 Neutron-BGPaaS 后端软件是否已在 openstack 基础设施上成功实现对等体关联。状态字段可以是DOWN或ACTIVE。
显示 BGP speaker 对等体关联的详细信息¶
GET /v2.0/bgp-speakers/<bgp-speaker-id>/peer_associations/<peer
-association-id>
{
"peer_association":
{
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"status": 'ACTIVE'
}
}
显示由 BGP Speaker API 管理的路由¶
GET /v2.0/bgp-speakers/<bgp-speaker-id>/get_routes
{
"routes": [
{
"cidr": "192.168.10.0/24",
"nexthop": ["10.0.0.1"],
"route-type": "local"
},
{
"cidr": "192.168.11.0/24",
"nexthop": ["10.0.0.5", "10.0.0.6"],
"route-type": "peer"
}
]
}
nexthop是一个列表,其中包含用于到达特定目标 cidr 的 IP 地址。cidr表示 CIDR 前缀。route-type可以是 local 或 peer,具体取决于路由是 local 还是从对等体处学习的。
可以从后端获取路由。例如,在 os_ken 后端的情况下,可以使用 rib_get 方法(参见 [10])来获取路由。
新的 Neutron 客户端命令
openstack bgp speaker list routes <bgpspeaker>
用例 b)
创建 BGP 对等体组 API¶
POST /v2.0/bgp-peer-groups/
{
"bgp_peer_groups":{
"name":"bgppeergroup1",
"project_id":"",
"remote_asn":"4566",
"next_hop_self" : True,
"update_source_ip": "10.20.1.5"
"auth_type": "md5",
"password": "<passwd>"
}
}
remote_asn表示 BGP 对等体组的远程 AS 号码next_hop_self决定是否在 BGP 广播期间修改 nexthop 属性为自身。update_source_ip强制 BGP 在与 BGP 邻居通信时使用指定的 IP 地址。auth_type确定身份验证算法。支持的算法是 none 和 md5,默认值为 none。password表示指定身份验证类型的身份验证密码。
新的 Neutron 客户端命令
openstack bgp peer group create
[--next-hop-self]
[--no-next-hop-self]
[--auth-type <auth-type>]
[--password <password>]
[--update_source-ip <ip-address>]
--remote-asn <asn-number>
<bgp-peer-group-name>
删除 BGP 对等体组 API¶
DELETE /v2.0/bgp-peer-groups/<bgp-peer-group-id>
只有当没有 BGP 对等体引用此对等体组时,才能成功删除对等体组。
新的 Neutron 客户端命令
openstack bgp peer group delete <bgp-peer-group-id>
使用预先创建的对等体组 API 创建 bgp 对等体¶
POST /v2.0/bgp-peers/
{
"bgp_peer":{
"peer_group_id":"a930d7f6-ceb7-40a0-8b81-a425dd994ccf",
"name":"bgppeer1",
"listen_range": "10.2.1.0/24"
"listen_limit": 10
"auth_type": "md5",
"password": "<passwd>"
}
}
peer_group_id表示 BGP 对等体组的 UUIDlisten_range定义与对等体组关联的前缀范围。listen_limit定义可以自动创建的最大 BGP 对等体数量。
这些是 BGP 对等体 API 的新字段,是可选参数。多个 BGP 对等体可以重用一个 BGP 对等体组。
更改 Neutron 客户端命令(参见 [7])
openstack bgp peer create
[--listen-range <listen-network-range>]
[--listen-limit <number>]
[--auth-type <auth-type>]
[--password <password>]
[--peer-group <peer-group-id>]
<bgp-peer>
openstack bgp speaker add peer mybgpspeaker bgpppeer1
peer-group 属性引入到现有的 bgp peer neutron 客户端命令中。它指定 BGP 对等体必须使用的 BGP 对等体组的名称/UUID。
使用 update-source 和 next-hop-self 参数创建 BGP 对等体 API¶
作为增强功能的一部分,为 BGP 对等体模型引入了新的属性。这些是 next_hop_self 和 update_source_ip。next_hop_self 决定是否在 BGP 广播期间修改 nexthop 属性为自身。而 update_source_ip 强制 BGP 在与 BGP 邻居通信时使用指定的 IP 地址。
POST /v2.0/bgp-peers/
{
"bgp_peer":{
"auth_type":"none",
"remote_as":"1001",
"name":"bgppeer1",
"peer_ip":"10.0.0.3",
"next_hop_self":True,
"update_source_ip": "10.2.0.15"
}
}
更改 Neutron 客户端命令
openstack bgp peer create
[--peer-ip <peer-ip>]
[--next-hop-self True]
[--auth-type <auth-type>]
[--update-source-ip <ip>]
--remote-as <as>
<bgppeer>
update-source-ip 和 next-hop-self 引入到现有的 bgp peer neutron 客户端命令中。
参考实现后端¶
可以使用 os-ken 来处理 BGP(参见 [5])。os-ken 能够使用 BGPSpeaker 类启动 bgp speaker,并且可以接收事件通知 (BGP_BEST_PATH_CHANGED),然后可以使用这些通知在命名空间内填充路由。
数据模型影响¶
bgp_peers 表将被更新以包含新的字段。
字段 |
类型 |
描述 |
|---|---|---|
update_source_ip next_hop_self |
字符串 布尔值 |
强制 BGP 在与 BGP 邻居通信时使用指定的 IP 地址。设置为 True 会使所有发布的路由通过 BGP 控制平面向此 BGP 对等体携带 BGPSpeaker IP 地址。 |
将创建新的表 bgp_speaker_router_bindings 来管理 speaker 到路由器的关联。
字段 |
类型 |
描述 |
|---|---|---|
id bgp_speaker_id router_id advertise_extra_routes status |
uuid-str uuid-str uuid-str 布尔值 字符串 |
BGP speaker 路由器关联的 UUID BGP speaker 的 UUID 路由器 UUID,BGP speaker 要与之关联的路由器 UUID 决定 Neutron 路由器上的额外路由是否会被广播到 bgp 对等体。显示 Neutron-BGPaaS 后端软件是否已在 openstack 基础设施上成功实现路由器关联。状态字段可以是 DOWN 或 ACTIVE。 |
同样,id 和 status 字段将引入到现有的 bgp_speaker_peer_bindings 表中。
将创建新的表 bgp_peer_group 来管理 bgp 对等体组。
字段 |
类型 |
描述 |
|---|---|---|
id name project_id remote_asn update_source_ip next_hop_self |
uuid-str String String Integer String 布尔值 |
BGP 对等体组的 UUID BGP 对等体组的人性化名称 BGP 对等体组的所有者 BGP 对等体组的远程 AS 号码 强制 BGP 在与 BGP 邻居通信时使用指定的 IP 地址 决定是否在 BGP 广播期间修改 nexthop 属性为自身 |
安全影响¶
引入支持自动对等请求的对等体组可能会带来安全影响,尤其是在我们支持外部网络时,这尤其令人担忧。
可以使用将在对等体组中支持的身份验证来解决此问题。
性能影响¶
性能影响将取决于所选的实现方法。
但是,需要准确的测试来了解开销。
实现¶
负责人¶
主要负责人
Manu B <manubk2020@gmail.com> (IRC: manubk)
工作项¶
REST API 更新。
BGP 插件,L3 代理扩展以处理 BGP
将路由器关联到 bgp speaker
将路由器从 bgp speaker 中分离。
BGP speaker 的 HA 支持
支持新的对等体组 API
BGP 对等体 API 的新属性
CLI 更新。
文档。
测试和 CI 相关更改。
测试¶
单元测试
功能测试
API 测试 也许可以通过端到端全栈测试轻松测试此项。需要进一步调查。
文档影响¶
用户文档¶
新的 API 和对 legacy API(例如 neutron-router 和 neutron-bgpaas)的更改必须记录在案。