使用 Azure 路由服务器实现任意播路由

你可以将应用程序分散部署到单个 Azure 区域中的各个可用性区域,以提高可用性,但有时需要在多个区域部署应用程序以实现更高的复原能力,为全球用户提供更好的性能,或者更好的业务连续性。 可以采用不同的方法将用户定向到部署多区域应用程序的位置之一:基于 DNS 的方法(例如 Azure 流量管理器)。

建议使用之前的 Azure 服务,让用户使用公共 IP 地址通过公共 Internet 访问最佳应用程序位置,但它们不支持专用网络和 IP 地址。 本文探讨了使用基于路由的方法(IP 任意播)提供多区域、专用网络的应用程序部署。

IP 任意播实质上包括从多个位置播发完全相同的 IP 地址,以便将来自应用程序用户的数据包路由到最近的区域(路由层面)。 相比基于 DNS 的方法,通过任意播提供多区域可访问性具有一些优势,例如,无需依赖客户端,无需缓存其 DNS 答案,也不需要修改应用程序的 DNS 设计。

拓扑

在此方案设计中,同一个 IP 地址会从不同 Azure 区域中的虚拟网络播发,而网络虚拟设备 (NVA) 会在其中通过 Azure 路由服务器播发应用程序的 IP 地址。 下图描绘了两个简单的中心和分支拓扑,每个拓扑在不同的 Azure 区域。 每个区域中的 NVA 会将相同的路由(本示例中的 a.b.c.d/32)播发到其本地 Azure 路由服务器(路由前缀不得与 Azure 和本地网络重叠)。 路由会通过 ExpressRoute 进一步传播到本地网络。 当应用程序用户想要从本地访问应用程序时,DNS 基础结构(不在本文档中讨论)将应用程序的 DNS 名称解析为任意播 IP 地址 (a.b.c.d),本地网络设备会将其路由到两个区域之一。

Diagram shows an example of using IP anycast with Azure Route Server.

选择哪个可用区域完全取决于路由属性。 如果两个区域的路由相同,则本地网络通常使用等价多路径 (ECMP) 路由将每个应用程序流发送到每个区域。 也可以修改 Azure 中每个 NVA 生成的播发,使其中一个地区成为首选。 例如,使用 BGP AS 路径预置来建立从本地到 Azure 工作负载的确定性路径。

重要

播发路由的 NVA 应包含一些运行状况检查机制,在应用程序在其相应区域不可用时停止播发路由,以避免流量黑洞。

返回流量

当来自本地客户端的应用程序流量到达 Azure 的其中一个 NVA 时,NVA 将反向代理连接或执行目标网络地址转换 (DNAT)。 然后,它将数据包发送到实际应用程序,该应用程序通常驻留在与部署 NVA 的中心虚拟网络对等互连的分支虚拟网络中。 从应用程序返回的流量通过 NVA 返回,如果 NVA 对连接进行反向代理(或者对目标 NAT 执行源 NAT),那么此操作会很自然地发生。

否则,到达应用程序的流量仍将源自原始本地客户端的 IP 地址。 在这种情况下,可以使用用户定义的路由 (UDR) 将数据包路由回 NVA。 如果每个区域都有多个 NVA 实例,则必须特别注意,因为流量可能是非对称的(入站和出站流量通过不同的 NVA 实例传输)。 如果 NVA 是无状态的,则非对称流量通常不是问题;但如果 NVA 跟踪连接状态(如防火墙),则会导致错误。