克服 Azure 应用程序网关上的 40 个前端端口限制

问题描述

  • 我们在 ourapp.com 上展示了一个面向客户的应用程序
  • Ourapp.com 指向我们 Azure Web 应用程序防火墙的公共 IP
  • 我们的每个客户都有两个用于访问应用程序的专用端口。
  • 所有这些端口都在 49152 到 65535 的范围内
  • 由于合同义务,目前无法更改客户连接的端口,但我们会为新客户提供更具扩展性的解决方案,并在老客户续签合同时迁移他们。
  • 目前,ourapp.com 指向带有 Web 应用程序防火墙的 Azure 应用程序网关。
  • 应用程序网关侦听客户连接的端口,并将连接传递到我们后端应用程序服务器的相应池。
  • 在应用网关中,一些路由规则具有重写规则,将额外的标头附加到请求中。
  • 具有 Web 应用程序防火墙的应用程序网关限制为 40 个前端侦听端口,这将我们限制为每个应用程序网关 20 个客户(公开 2 个端口)
  • 我们有超过 20 个客户

我的问题是这个。 我能否在保持单一公共 URL 的同时,将我们的客户群拆分到多个应用程序网关上?

有关应用程序网关限制的文档:https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits#application-gateway-limits

解决方法

一个公共 URL/域只能指向一个公共 IP 地址,在您的情况下转换为一个应用程序网关。如果您在一个 WAF AppGw 上达到限制,您显然需要添加更多。因此,您需要在 AppGw 之上引入其他东西,以接受流量并将其在内部分配给多个 AppGw。

我有一个类似的设置,但在我的情况下,我在 AppGw 上达到了 100 个侦听器的限制(我们有 100 个域仅在 443 上侦听,但如果您有一个具有 100 个不同 URL 侦听不同端口的域也是一样的)并通过增加 AppGws 的数量将其拆分为 5 个 AppGws。

既然您正在考虑扩展,那么您需要查看的是在处理分发的 AppGws 之上的某种目标 NAT。考虑使用 Azure 防火墙,为每个端口创建一个 NAT 规则。我相信一个警告是所有 AppGws 都必须监听私有 IP(您可以同时配置私有 IP 和公共 IP)。

两条规则如下所示:

规则 1
来源:*
目标地址:防火墙公共 IP
目标端口:49152
翻译地址:AppGw1 私有 IP
翻译端口:49152

规则 2
来源:*
目标地址:防火墙公共 IP
目标端口:49154
翻译地址:AppGw2 私有 IP
翻译端口:49154

这不是一个完美的解决方案,因为即使是 Azure 防火墙也有一些limitations(最多 298 个 DNAT 规则,允许您为 149 个客户提供服务)。