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

如何在多租户解决方案中使用 Azure NAT 网关

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

注释

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

支持多租户的功能

以下部分介绍可在多租户解决方案中使用的 Azure NAT 网关功能。

大规模 SNAT 端口

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

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

小提示

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

使用在多个客户之间共享 SNAT 端口分配的 Azure 服务时,SNAT 端口耗尽会恶化。 以这种方式行事的服务示例包括 Azure 应用服务和 Azure Functions。 有关详细信息,请参阅排查应用程序服务中的间歇性出站连接错误

如果确定应用程序遇到 SNAT 端口耗尽,并且应用程序代码正确处理出站连接,请考虑集成 Azure NAT 网关。 部署基于应用服务和 Azure Functions 构建的多租户解决方案的客户通常使用此方法。 有关详细信息,请参阅 Azure NAT 网关集成

单个 NAT 网关可以附加多个公共 IP 地址,每个公共 IP 地址都提供一组 SNAT 端口来连接到 Internet。 若要了解单个 NAT 网关可以支持的最大 SNAT 端口数和 IP 地址,请参阅 Azure NAT 网关限制。 如果需要超出此限制,可以考虑 跨多个子网或虚拟网络部署多个 Azure NAT 网关实例。 如果需要,子网中的每个虚拟机都可以使用任何可用的 SNAT 端口。

出站 IP 地址控制

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

  • 使用不自动为出站流量提供专用静态 IP 地址的 Azure 服务。 这些服务包括应用服务、Azure Functions、Azure API 管理(在消耗层中运行时)和 Azure 容器实例。

  • 需要通过 Internet 连接到租户的网络。

  • 租户需要根据每个请求的 IP 地址筛选传入流量。

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

注释

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

隔离模型

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

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

供稿人

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

  • John Downs |Azure 模式和做法的主要软件工程师

其他参与者:

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

后续步骤