利用 Azure 路由服务器实现多区域联网
对高可用性或灾难恢复需求高的应用通常需要部署在多个 Azure 区域。 这种情况下,不同区域内的分支虚拟网络 (VNets) 需要互相通信。 实现这种通信的一种方法是让所有所需的分支虚拟网络彼此间实现对等互连。 不过,这种方法会绕过任何中央网络虚拟设备 (NVA),例如中心中的防火墙。 另一种方法是在部署了中心网络虚拟设备的子网中使用用户定义的路由 (UDR),不过维护这些 UDR 是一大难题。 Azure 路由服务器提供一种动态的替代方法,可自动适应网络拓扑更改,无需手动干预。
拓扑
下图显示了一个双区域体系结构,其中每个区域中都存在一个中心和分支拓扑结构,中心 VNet 通过 VNet 全局进行对等互连:
每个区域内的 NVA 通过 Azure 路由服务器学习本地中心和分支 VNet 的前缀,并使用 BGP 与其他区域内的 NVA 共享这些前缀。 为避免出现路由循环,必须使用 IPsec 或虚拟 eXtensible LAN (VXLAN) 等封装技术在 NVA 之间建立通信。
若要让 Azure 路由服务器能够将分支 VNet 的前缀播发到本地 NVA,并将学习的路由注入回分支 VNet,则必须使用使用远程虚拟网络的网关或路由服务器设置,在分支 VNet 和中心 VNet 之间实现对等互连。
NVA 将它们从远程区域学习到的路由播发到其所在的本地路由服务器。然后,本地路由服务器在本地分支 VNet 中配置这些路由,从而相应地吸引流量。 如果同一区域中存在多个 NVA(路由服务器最多支持 8 BGP 对等互连),则可以使用 AS 路径预置来使其中一个 NVA 优先于其他 NVA,从而有效建立活动/备用 NVA 拓扑。
重要
若要确保本地路由服务器可以从远程区域学习 NVA 播发的路由,NVA 必须从路由的 AS 路径中删除自治系统编号 (ASN) 65515。 在某些 BGP 平台中,这种方法有时称为“AS 重写”或“AS 路径重写”。 否则,BGP 循环防止机制将阻止本地路由服务器学习这些路由,因为系统禁止学习已包含本地 ASN 的路由。
ExpressRoute
多区域设计可以与 ExpressRoute 或 VPN 网关相结合。 下图显示了一个拓扑结构,其中包括一个连接到 Azure 区域中的一个内部网络的 ExpressRoute 网关。 在这种情况下,通过 ExpressRoute 线路的覆盖网络有助于简化网络,以便本地前缀仅显示在 NVA 播发的 Azure 中(而不是来自 ExpressRoute 网关)。
无覆盖设计
在 NVA 之间需要跨区域隧道,否则将形成路由环路。 例如,请看一下区域 1 中的 NVA:
- 区域 1 中的 NVA 从区域 2 中学习前缀,并将它们播发给区域 1 中的路由服务器。
- 区域 1 中的路由服务器将为区域 1 中的所有子网中的这些前缀注入路由,并以区域 1 中的 NVA 作为下一个跃点。
- 对于从区域 1 到区域 2 的流量,当区域 1 中的 NVA 将流量发送到另一个 NVA 时,其自己的子网也会继承路由服务器编程的路由,这些路由指向自身 (NVA)。 因此,数据包被返回到 NVA,并出现一个路由循环。
如果可以选择 UDR,则你可以禁用 NVAS 子网中的 BGP 路由传播,并配置静态 UDR,而不是覆盖,这样 Azure 就可以将流量路由到远程分支 VNet。