你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

多租户的 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 网关来解决该问题,但如果代码不遵循最佳做法,将来可能会再次遇到该问题。

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

如果确定 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 | FastTrack for Azure 首席客户工程师

其他参与者:

若要查看非公开领英个人资料,请登录领英。

后续步骤