BGP 扬声器

BGP 扬声器充当使用 BGP 路由协议的路由服务器。它将路由通告给添加到 BGP 扬声器的 BGP 对等体。现在有一个框架,允许不同的 BGP 驱动程序 插入到 动态路由代理 中。

目前,BGP 扬声器仅通告与关联的网络相关的路由。BGP 扬声器需要与“网关”网络关联,以确定符合条件的路由。在 Neutron 中,“网关”网络将 Neutron 路由器连接到上游路由器。外部网络最适合用作网关网络。关联会构建一个列表,其中包含提供商和自助服务网络中具有相同地址范围的虚拟路由器。因此,BGP 扬声器会通告自助服务网络前缀,并将相应的路由器作为下一跳 IP 地址。有关详细信息,请参阅 路由通告

地址范围

地址范围 提供灵活的控制以及将地址重叠从租户中解耦,因此这种控制可以提供可路由的域,该域本身具有路由且没有重叠地址,这意味着地址范围定义了“L3 路由域”。

BGP 扬声器将关联外部网络并通告租户的网络路由。这些网络应位于相同的地址范围内。Neutron 可以直接路由租户网络,而无需 NAT。然后 Neutron 可以托管全球可路由的 IPv4 和 IPv6 租户网络。为了确定应通告哪些租户网络前缀,Neutron 将识别所有具有绑定到 BGP 扬声器的网络的网关端口的路由器,检查所有连接网络子网的地址范围,然后开始通告租户网络到绑定网络上的路由器的下一跳。

BGP 对等体

Neutron 中定义的 BGP 对等体代表真实的 BGP 基础设施,例如路由器、路由反射器和路由服务器。当定义 BGP 对等体并将其与 BGP 扬声器关联时,Neutron 将尝试与所述远程对等体建立 BGP 对等会话。正是通过此会话,Neutron 宣布其路由。

如何配置远程对等体

远程对等体可以是真实的或虚拟的,例如 vRouters 或真实的路由器。应配置远程对等体以处理与 Neutron 的对等连接,处于被动模式。对等体需要等待 Neutron 动态路由代理启动对等会话。此外,远程对等体可以配置为处于活动模式,但它仍然可以讲 BGP,直到在 Neutron 动态路由代理上完成 BGP 扬声器的初始化。

配置 BGP 扬声器:需要确保以下几点来设置 BGP 连接。

  • 运行 Neutron 动态代理的主机必须连接到外部路由器。

  • 路由器上的 BGP 配置应该是正确的。

    bgp router-id XX.XX.XX.XX

    这必须是一个 IP 地址,实际上是 BGP 路由器的唯一标识符,也可以是虚拟的。如果未配置路由器 ID,它将自动选择为配置的本地接口的最高 IP 地址。仅供参考,请确保它与您在 Neutron 中配置的 peer_ip 相同,以便于区分。

local_as

自治系统编号可以与外部 BGP 路由器的 AS_id 相同或不同。AS_id 对于 iBGP 相同,对于 eBGP 会话则不同。

设置 BGP 对等体

neighbor A.B.C.D remote-as AS_ID
A.B.C.D is the host IP which run Neutron dynamic routing agent.

一个示例 Quagga 路由器配置文件,用于与 Neutron 形成 BGP 对等连接

!
password zebra
log file /var/log/quagga/bgpd.log
!
debug bgp events
debug bgp keepalives
debug bgp updates
debug bgp fsm
debug bgp filters
!
bgp multiple-instance
!
router bgp <BgpPeer remote_as> view test-as
 bgp router-id <quagga router IP address>
 neighbor <dr_agent IP address> remote-as <BgpSpeaker local_as>
 neighbor <dr_agent IP address> passive
!
line vty
!

BGP 扬声器架构

动态路由项目根据定义的 数据模型 保存 BGP 扬声器配置,并将配置请求传递给动态路由代理以进行进一步处理。BGP 扬声器的实现是特定于驱动程序的。在驱动程序接口初始化过程中,将从配置文件中读取所需的配置,并创建 BGP 扬声器对象实例。有关详细信息,请参阅 BGP 驱动程序

BGP 扬声器生命周期

现在我们支持 OsKenBgpDriver,BGP 扬声器将由 Dragent 处理。当将 BGP 扬声器与活动的 Dragent 关联时,插件将发送 RPC 消息到代理,以调用驱动程序以创建 BGP 扬声器实例。

在 OsKenBgpDriver 中,创建的实例 BGP Speaker 将由 router-id 和 ASN 设置,然后 os-ken 将使用扬声器配置和监视相关对等体是否存活的侦听器设置新的上下文。

然后可以执行以下操作。

  • 将对等体添加到 BGP 扬声器 当 BGP 扬声器未与活动的 Dragent 关联时,没有真实的扬声器实例,因此它仍然是数据库操作,直到扬声器与 dragent 关联,并且之前的所有对等体连接都将由 BGP Speaker 创建设置。如果将对等体添加到正在运行的扬声器中,Dragent 将调用驱动程序以动态添加对等体。对于 OsKenBgpDriver,它将根据您的对等体配置注册新的邻居,并尝试与对等体建立会话。

  • 从 BGP 扬声器删除对等体 逻辑与下面相同,但它是相反的。

如果您不再想使用特定的 BGP 扬声器,可以使用 CLI:neutron bgp-speaker-delete <SPEAKER NAME/ID>

BGP 插件将找到所有关联的 Dragent 并发送 RPC bgp_speaker_remove_end 以使 Dragents 清理 BGP Speaker 实例。这与 CLI 相同:neutron bgp-dragent-speaker-remove <DRAGENT ID> <SPEAKER NAME/ID> BGP 插件只是将 rpc bgp_speaker_remove_end 发送到特定的 Dragent。

如何工作

有关详细信息,请参阅 测试