BGP 即服务
BGP 即服务 (BGPaaS) 功能允许来宾虚拟机 (VM) 使用 BGP 将路由放置在自己的虚拟路由和转发 (VRF) 实例中。
Contrail BGPaaS 功能
将 BGPaaS 与 Contrail 结合使用需要客户机虚拟机连接到控制节点,并能够将路由通告到 VRF 实例中。
借助 BGPaaS 功能:
虚拟路由器代理能够接受来自虚拟机的 BGP 连接,并将其代理到控制节点。
vRouter 代理始终选择一个用作 XMPP 服务器的控制节点。
从 Contrail 3.0 版开始,BGPaaS 中添加了以下功能:
所有 BGPaaS 会话均配置为具有双向路由交换。
如果要将 inet6 路由播发到租户 VM,则会使用 IPv6 子网的默认网关地址作为 BGP 下一跃点播发这些路由。
如果同一虚拟网络中的多个租户虚拟机具有 BGPaaS 会话,并且它们使用 eBGP,则标准环路防护规则会阻止将一个租户虚拟机播发的路由播发到其他租户虚拟机
还可以使用 Contrail 配置中的另外一个 BGP 路由器对象和与 DNS IP 地址(由 Contrail 保留)的对等会话(从 VNF 的角度)来适当配置第二个高可用性 BGP 会话。
以下是注意事项:
BGP 会话必须使用 IPv4 传输。
VNF 必须支持 RFC 2545( 使用 BGP-4 多协议扩展进行 IPv6 域间路由),才能通过 IPv4 对等方传输 IPv6 路由。
仅支持 IPv4 (inet) 和 IPv6 (inet6) 地址族。
Contrail 版本 3.0 中支持的 BGPaaS 版本 1 的初始实现允许租户虚拟机与虚拟机子网中的默认网关和 DNS 服务器建立 BGP 会话。此实现的一个限制是,租户 VM 可以将路由播发到该 VM 所属的虚拟网络中,但是,VM 无法接收任何路由。租户 VM 需要使用静态默认路由,子网的默认网关作为下一跃点。
Contrail 3.1 版消除了以前的限制,并为 BGPaaS 会话提供了路由导出功能。播发到租户 VM 的所有路由的下一跃点设置为租户 VM 子网的默认网关地址。这使得租户 BGP 实现相对简单,因为不需要支持 BGP 下一跃点的递归解析。
BGPaaS 对象与虚拟机接口 (VMI) 相关联,而不仅仅是虚拟机 (VM),这使租户虚拟机能够在多个虚拟网络中具有 BGP 会话(如果需要)。
从 Contrail 3.1 版开始,BGPaaS 中添加了以下功能和属性:
默认情况下,所有 BGPaaS 会话都配置为具有双向路由交换。布尔属性
bgpaas-suppress-route-advertisement
可确保不会将路由播发到租户 VM。如果要将 inet6 路由播发到租户 VM,则会使用 IPv6 子网的默认网关地址作为 BGP 下一跃点播发这些路由。布尔属性 会导致
bgpaas-ipv4-mapped-ipv6-nexthop
将 IPv4 子网的默认网关(采用 IPv4 映射的 IPv6 格式)用作下一跃点。如果同一虚拟网络中的多个租户虚拟机具有 BGPaaS 会话,并且它们使用 eBGP,则标准 BGP AS 路径环路防护规则可防止将一个租户虚拟机播发的路由播发到其他租户虚拟机。
as-override
当从租户虚拟机获知的路由播发到同一虚拟网络中的另一个租户虚拟机时,添加到 BGPaaS 对象中的现有BgpSessionAttributes
字段会导致控制节点将租户虚拟机的 AS 编号替换为其自己的 AS 编号。租户 VM 无需实现任何新功能。
BGPaaS 客户用例
本节提供使用 Contrail 实现 BGPaaS 的示例方案。
租户叠加网络中的动态隧道插入
各种应用程序需要在虚拟网络中插入动态隧道。虚拟网络功能 (VNF) 提供隧道终止功能。隧道终止类型因应用程序类型而异,例如商业 VPN、移动小型站点回传、VPC 等。关键要求是隧道需要在虚拟网络中插入动态的新网络可访问性信息。隧道网络可达性插入的主要方法是使用 BGP。
BGPaaS 允许将棕地 VNF 迁移到 Contrail,从而保留应用程序行为和 BGP 要求,而无需重写应用程序。
下图是一个通用示例,显示了将动态隧道插入虚拟网络的必要性。
应用程序的动态网络可访问性
域名系统 (DNS) 是一种广泛使用的应用程序,它使用 BGP 作为机制,根据负载、维护、可用性等指标调整其服务的可访问性。当 DNS 服务迁移到使用叠加的环境时,需要一种机制来保留现有的应用程序行为和要求,包括宣布和撤销对可用应用程序的可访问性的能力。
此要求不仅限于 DNS。其他应用程序(如虚拟化演进数据包核心 (vEPC) 等)使用 BGP 作为基于可用性和负载的网络可访问性机制。
用于高可用性的活体检测
网络组件(如 BGP、OSPF、PING、VRRP、BFD 或特定于应用程序的机制)提供了各种租户可访问性的激活机制。借助 vRouter 代理上的 BGP,BGP 可用于在本地计算节点上的租户与特定租户 VM 提供的服务之间提供活动检测机制。
配置 BGPaaS
以下是配置 BGPaaS 的方法:
使用 VNC API 配置 BGPaaS
要使用 VNC API 配置 BGPaaS,请执行以下操作:
访问默认项目。
default_project = self._vnc_lib.project_read(fq_name=[u'default-domain', ‘bgpaas-tenant’])
创建 BGPaaS 对象。
bgpaas_obj = BgpAsAService(name=‘bgpaas_1’, parent_obj=default_project)
将 BGP 对象附加到预先创建的 VMI。
bgpaas_obj.add_virtual_machine_interface(vmi)
设置 ASN。它必须是 eBGP 会话。
bgpaas_obj.set_autonomous_system('65000')
如果未设置 ASN,则将选择主实例 IP。
bgpaas_obj.set_bgpaas_ip_address(u’10.1.1.5’)
设置会话属性。
bgp_addr_fams = AddressFamilies(['inet’, ‘inet6’]) bgp_sess_attrs = BgpSessionAttributes(address_families=bgp_addr_fams,hold_time=60) bgpaas_obj.set_bgpaas_session_attributes(bgp_sess_attrs) self._vnc_lib.bgp_as_a_service_create(bgpaas_obj)
删除 BGPaaS 对象
要删除 BGPaaS 对象,请执行以下操作:
fq_name=[u'default-domain', ‘bgpaas-tenant’, ‘bgpaas_1’] bgpaas_obj = self._vnc_lib.bgp_as_a_service_read(fq_name=fq_name) bgpaas_obj.del_virtual_machine_interface(vmi) self._vnc_lib.bgp_as_a_service_update(bgpaas_obj) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas_obj.get_uuid())
使用 Contrail 用户界面配置 BGPaaS
要在租户中配置 BGPaaS,请执行以下操作:
在 Contrail 的租户中,导航到将 >服务配置为 BGP 即服务>。选择 + 图标以访问 “创建 BGP 即服务”窗口。
在 创建 BGP 即服务 窗口中输入相关信息,包括 ASN、地址族和 VMI 标识。
单击 保存 以创建 BGP 对象。