有关在多租户解决方案中使用 Azure NAT 网关的指南

Azure NAT 网关可以控制 Azure 虚拟网络中托管的资源的出站网络连接。 在本文中,我们将回顾 NAT 网关如何缓解源网络地址转换(SNAT)端口耗尽,这可能会影响多租户应用程序。 我们还查看 NAT 网关如何将静态 IP 地址分配给来自多租户解决方案的出站流量。

注释

防火墙(如 Azure 防火墙)使你能够控制和记录出站流量。 Azure 防火墙还提供与 NAT 网关类似的 SNAT 端口规模和出站 IP 地址控制。 NAT 网关成本更低,但它的功能也更少,不是安全产品。

支持多租户的 NAT 网关的功能

大规模 SNAT 端口

应用程序对同一端口上的同一公共 IP 地址建立多个并发出站连接时,分配 SNAT 端口。 SNAT 端口是 负载均衡器中的有限资源。 如果应用程序打开与同一主机的大量单独连接,则可以使用所有可用的 SNAT 端口。 这种情况称为 SNAT 端口耗尽

在大多数应用程序中,SNAT 端口耗尽表示应用程序未正确处理 HTTP 连接或 TCP 端口。 但是,某些多租户应用程序面临超过 SNAT 端口限制的特殊风险,即使它们适当重复使用连接也是如此。 例如,当应用程序连接到同一数据库网关后面的许多特定于租户的数据库时,可能会出现这种情况。

小提示

如果在多租户应用程序中观察到 SNAT 端口耗尽,则应验证 应用程序是否遵循良好做法。 确保重复使用 HTTP 连接,并且每次连接到外部服务时不要重新创建新连接。 你可能能够部署 NAT 网关来解决该问题,但如果代码未遵循最佳做法,则将来可能会再次遇到该问题。

当你使用在多个客户(例如 Azure 应用服务和 Azure Functions)之间共享 SNAT 端口分配的 Azure 服务时,问题会加剧。

如果确定遇到 SNAT 耗尽,并确保应用程序代码能够正确处理出站连接,请考虑部署 NAT 网关。 部署基于 Azure 应用服务和 Azure Functions 构建的多租户解决方案的客户通常使用此方法。

单个 NAT 网关可以附加多个公共 IP 地址,每个公共 IP 地址都提供一组 SNAT 端口,用于将出站连接到 Internet。 若要了解单个 NAT 网关可以支持的最大 SNAT 端口数和 IP 地址,请参阅 Azure 订阅和服务限制、配额和约束。 如果需要扩展超出此限制,可以考虑 跨多个子网或 VNet 部署多个 NAT 网关实例。 子网中的每个虚拟机都可以使用任何可用的 SNAT 端口(如果需要)。

出站 IP 地址控制

如果满足以下所有要求,出站 IP 地址控制在多租户应用程序中非常有用:

  • 使用不自动为出站流量提供专用静态 IP 地址的 Azure 服务。 这些服务包括 Azure 应用服务、Azure Functions、API 管理(在消耗层中运行时)和 Azure 容器实例。
  • 需要通过 Internet 连接到租户的网络。
  • 租户需要根据每个请求的 IP 地址筛选传入流量。

将 NAT 网关实例应用到子网时,来自该子网的任何出站流量都使用与 NAT 网关关联的公共 IP 地址。

注释

将多个公共 IP 地址与单个 NAT 网关相关联时,出站流量可能来自这些 IP 地址中的任何一个。 可能需要在目标处配置防火墙规则。 应允许每个 IP 地址,或使用公共 IP 地址前缀资源来使用同一范围内的一组公共 IP 地址。

隔离模型

如果需要为每个租户提供不同的出站公共 IP 地址,则必须部署单独的 NAT 网关资源。 每个子网都可以与单个 NAT 网关实例相关联。 若要部署更多 NAT 网关,需要部署多个子网或虚拟网络。 反过来,可能需要部署多个计算资源集。

有关如何设计多租户网络拓扑的详细信息,请查看 多租户解决方案中的网络体系结构方法

供稿人

本文由Microsoft维护。 它最初是由以下贡献者撰写的。

主要作者:

  • John Downs |Azure 的 FastTrack 首席客户工程师

其他参与者:

  • 艾美·利特尔顿 |项目经理 2,Azure NAT 网关
  • 阿森·弗拉基米尔斯基 | 客户首席工程师,FastTrack for Azure
  • Joshua Waddell | FastTrack for Azure 高级客户工程师

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤