魏衡,微软云资深架构师,国内 Azure 最早的架构师之一。

按照 Azure 部署的最佳实践,

  • 每个用户在部署应用之前,需要先规划各自的订阅,一般按照应用来划分,或者按照部门来划分。
  • 再在各自的订阅中每个应用创建一个 Vnet,把应用部署到这个 Vnet 上。

如下图所示:

 

图中表示一个 Azure 账户有多个订阅,每个订阅重有多个 Vnet,每个 Vnet 根据我们之前谈到的 Azure Vnet 部署的最佳实践,分了不同的 Subnet 进行功能划分和安全隔离。

但这样有一个比较大的问题:

如果客户需要在各个 Vnet 间进行通讯,如果客户需要和 OnPrem 通讯,采用的是 IPsec 或专线 ER 的方式,那每个 Vnet 中,都有各自的 VPN Gateway 和 ER 的 Gateway。这对于管理员来说工作量是巨大的,需要建立所有需要连接的点到点的 IPSec 的连接。而且对 VPN Gateway 和 OnPrem 的 VPN 设备都有数量上的要求。

我们下面会讨论 Vnet 间相互通讯的情况、与 OnPrem 互联以及其它一些场景的情况。

一、同 Region 中 Vnet 间相互通讯

所以如果有大量的Vnet需要相互通讯,我们建议在同一个 Region 内采用 Vnet Peering 的方式实现:

 

Vnet Peering 采用的是多租户环境下,通过控制租户 tag 的方式,实现不同租户之间的相互访问。对于熟悉网络的同学来说,比较好解释,这就相当于 MPLS/VPN 中对 RT 的控制。用户对 RT 定义哪些 tag 可以 import,export 哪些 tag。从而实现逻辑上的各种拓扑结构。比如:全连接、Hub-spoken、partial Mesh 等。

Vnet Peering 还有一个好处,就是如果没有定义 Vnet Peering 间的 Vnet 是不能相互通讯的。比如我们定义了 Vnet1 和 Vnet2 的 Vnet Peering,已经 Vnet1 和 Vnet3 的 Vnet Peering,但 Vnet1 和 Vnet3 之间不通的。所以 Vnet Peering 天生就有严格的安全属性:默认不通,定义过才通。

所以,在这种情况下,拓扑结构变成如下:

 

根据需求,在各个 Vnet 间定义 Peering 关系。当然这种情况下,NSG 和 UDR 的定义仍然服从网络设计的原则。

由于 Vnet Peering 只支持同一个 Region 内,所以,如果有跨 Region 的 Vnet 互通,仍然需要采用 IPsec 的模式。

二、大量 Vnet 需要和 OnPrem 通讯

对于大量的客户而言,混合云的架构是对公有云最基本的需求。因此公有云和 OnPrem 的互通尤为重要。混合架构的设计成为使用公有云重要的环节之一。

如果沿用每个 Vnet 单独和 OnPrem 连接的设计原则,则用户需要维护大量的 VPN 和 ER 的链路,并且很有可能会达到 Gateway 或 Circuit 连接的上限。如下图:

 

在这种情况下,我们建议在一个 region 中建立一个单独的 Gateway Vnet,作为集中的 VPN 和 ER 的 HUB,其它的 Vnet 通过 Vnet Peering 于其连接,且允许 Transit 和网关穿越,使所有业务 Vnet 统一使用 GW 的 Vnet 中的 VPN 业务和 ER 业务。具体实现如下图:

 

这样,网络管理员只需要维护很少数量的 Azure Gateway 以及 VPN Connect。使整个架构的设计具有很好的扩展性。

当然,在设计中,涉及安全的 NSG、UDR 等仍然服从网络设计原则。

三、集中的网络功能区

根据前面提到的这个思路,我们可以把 Gateway 的 Vnet 扩展,可以在设计中增加其它一些安全的区域,比如防火墙的 VNET 或 IPS 的 Vnet 等。如下图:

 

通过 UDR 的配置,可以强制某些流量流经特定的网络功能设备,从而实现企业所需求的安全要求。

四、扩展 VPN Gateway

目前 Azure 的 VPN Gateway 只能最多支持 30 个 VPN 的 tunnel。客户如果要更多的 VPN 连接,需要采用其它第三方厂家的设备,比如 Cisco 的 CSR 的虚拟机。

在 Azure 的 VPN Gateway 支持 BGP 之前,远端 VPN 节点无法和整个网络的路由打通,因为这些 Azure 上的 NVA 设备没有办法和 Azure 的网络间运行路由协议。

但目前,由于 VPN Gateway 以及支持了 BGP 路由协议,可以通过这些 NVA 设备和 Azure VPN Gateway 间通过 IPSec VPN 联通,再运行 BGP 路由协议,整个 VPN 的网络和 Azure 的各个 Vnet 间就路由打通了。

具体的结构如下:

 

创建一个扩展 VPN 的 VNET,多个 VPN 节点,通过 IPSec VPN 与扩展 VPN VNET 中的第三方的 VPN 设备,比如 Cisco CSR 连接。

这台 VPN 设备再通过 IPSec 与 Azure 的 VPN VNET 中的 VPN Gateway 连接。在建立 IPSec VPN 的通道后,与 Azure VPN Gateway 间运行 BGP 路由协议。

各个业务的 VNET 还是通过 VNET Peering 与 Gateway VNET 连接。这样所有的业务 VNET 与各个 VPN 间的路由全部打通了。从任意一台 VM 可以访问任意一个 VPN 节点中的设备。

总结:

  1. Vnet Peering 可以解决同 Region 内同订阅或跨订阅的 Vnet 互通;
  2. 通过 Vnet Peering 可以部署 Gateway Vnet,统一接入和 OnPrem 的 VPN 和 ER 的连接;
  3. 通过 Vnet Peering 还可以部署网络功能 Vnet,实现一些复杂的网络功能;
  4. 可以通过扩展 VPN VNET,扩展 VPN 的接入能力,且通过 BGP 和 Azure 打通路由。