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

Azure 架构良好的框架评审 - Azure 应用程序网关 v2

本文提供了有关 Azure 应用程序网关 v2 系列 SKU 的体系结构最佳做法。 本指南基于建筑卓越五大支柱:

我们假设你对Azure 应用程序网关有工作知识,并且熟悉 v2 SKU 功能。 有关详细信息,请参阅Azure 应用程序网关功能

先决条件

可靠性

在云端,我们承认故障总会发生。 我们的目标不是试图防止各种故障,而是最大程度地减轻单个组件故障造成的影响。 使用以下信息将失败的实例降到最低。

设计清单

在为应用程序网关做出设计选择时,请查看可靠性设计原则

  • 区域感知配置中部署实例(如果可用)。
  • 将应用程序网关与虚拟网络中的Web 应用程序防火墙(WAF)配合使用来保护来自 Internet 的入站HTTP/S流量。
  • 在新部署中,除非有令人信服的理由使用 Azure 应用程序网关 v1,否则请使用 Azure 应用程序网关 v2。
  • 规划规则更新
  • 使用运行状况探测检测后端不可用
  • 查看间隔和阈值设置对运行状况探测的影响
  • 通过运行状况终结点验证下游依赖项

建议

浏览下表,以优化可靠性应用程序网关配置。

建议 好处
规划规则更新 在访问应用程序网关或进行进一步更改之前,规划足够的更新时间。 例如,从后端池中删除服务器可能需要一些时间,因为它们必须耗尽现有连接。
使用运行状况探测检测后端不可用 如果应用程序网关用于对传入的流量进行负载均衡,则建议使用运行状况探测。 这将确保流量不会路由到无法处理流量的后端。
查看间隔和阈值设置对运行状况探测的影响 运行状况探测按设置的时间间隔将请求发送到配置的终结点。 此外,在后端标记为不正常之前,将容忍失败请求的阈值。 这些数字提供了权衡。

- 设置更高的间隔会使服务负载更高。 每个应用程序网关实例发送自己的运行状况探测,因此每 30 秒 100 个实例意味着每 30 秒 100 个请求。
- 设置较低的间隔会延长检测到中断之前的更多时间。
- 设置低运行不正常的阈值可能意味着短暂的暂时性故障可能会降低后端。
- 设置高阈值,可能需要更长的时间才能使后端退出轮换。
通过运行状况终结点验证下游依赖项 假设每个后端都有自己的依赖项,以确保故障是隔离的。 例如,托管在应用程序网关后面的应用程序可能有多个后端,每个后端都连接到不同的数据库(副本)。 当此类依赖项失败时,应用程序可能正在运行,但不会返回有效结果。 因此,运行状况终结点应理想地验证所有依赖项。 请记住,如果每次调用运行状况终结点都有直接依赖项调用,则数据库每 30 秒接收 100 个查询,而不是 1。 为了避免这种情况,运行状况终结点应在短时间内缓存依赖项的状态。
使用 Azure Front Door 和应用程序网关来保护 HTTP/S 应用程序时,请使用 Front Door 中的 WAF 策略,并锁定应用程序网关,以仅从 Azure Front Door 接收流量。 某些方案可以强制你专门对应用程序网关实施规则。 例如,如果 ModSec CRS 2.2.9、CRS 3.0 或 CRS 3.1 规则是必需的,则这些规则只能在应用程序网关上实现。 相反,速率限制和地区筛选仅适用于 Azure Front Door,不适用于 AppGateway。

Azure 顾问可帮助你确保和提高业务关键型应用程序的连续性。 查看 Azure 顾问建议

安全性

安全是体系结构的首要考虑因素之一。 应用程序网关提供了使用最低特权原则和防御内防御原则的功能。 建议查看 安全设计原则

设计清单

  • 设置 TLS 策略以提高安全性
  • 将 AppGateway 用于 TLS 终止
  • 使用 Azure 密钥库存储 TLS 证书
  • 重新加密后端流量时,请确保后端服务器证书同时包含根证书颁发机构和中间证书颁发机构(CA)
  • 为后端池资源使用适当的 DNS 服务器
  • 遵守应用程序网关的所有 NSG 限制
  • 避免在应用程序网关子网上使用 UDR
  • 请注意启用 WAF 时应用程序网关容量更改

建议

浏览下表,以优化安全性应用程序网关配置。

建议 好处
设置 TLS 策略以提高安全性 设置 TLS 策略 以增加安全性。 确保始终使用可用的最新 TLS 策略版本。 此版本强制实施 TLS 1.2 和更强的密码。
将 AppGateway 用于 TLS 终止 为 TLS 终止使用应用程序网关有好处:

- 性能会提高,因为发送到不同后端的请求必须重新对每个后端进行身份验证。
- 更好地利用后端服务器,因为它们不必执行 TLS 处理
- 通过访问请求内容进行智能路由。
- 更简单的证书管理,因为证书只需安装在应用程序网关上。
使用 Azure 密钥库存储 TLS 证书 应用程序网关可与密钥库集成。 这提供更强大的安全性、更轻松地分离角色和职责、对托管证书的支持,以及更简单的证书续订和轮换过程。
重新加密后端流量时,请确保后端服务器证书同时包含根证书颁发机构和中间证书颁发机构(CA) 后端服务器的 TLS 证书必须由已知的 CA 颁发。 如果证书不是由受信任的 CA 颁发的,则应用程序网关检查证书是否由受信任的 CA 颁发,依此等方式,直到找到受信任的 CA 证书。 只有建立安全连接。 否则,应用程序网关将后端标记为不正常。
为后端池资源使用适当的 DNS 服务器 当后端池包含可解析的 FQDN 时,DNS 解析基于专用 DNS 区域或自定义 DNS 服务器(如果已在 VNet 上配置),或使用默认的 Azure 提供的 DNS。
遵守应用程序网关的所有 NSG 限制 应用程序网关子网支持 NSG,但存在一些限制。 例如,禁止某些与某些端口范围的通信。 请确保了解这些限制的含义。 有关详细信息,请参阅网络安全组
不要在应用程序网关子网上使用 UDR 在应用程序网关子网上使用用户定义的路由(UDR)可能会导致一些问题。 后端 中的运行状况可能未知。 应用程序网关日志和指标可能不会生成。 建议不要在应用程序网关子网上使用 UDR,以便查看后端运行状况、日志和指标。 如果你的组织需要在 应用程序网关 子网中使用 UDR,请确保查看受支持的方案。 有关详细信息,请参阅支持的用户定义路由
请注意启用 WAF 时应用程序网关容量更改 启用 WAF 后,每个请求都必须由应用程序网关缓冲,直到它完全到达,检查请求是否与其核心规则集中的任何规则冲突匹配,然后将数据包转发到后端实例。 当存在大型文件上传(大小为 30MB 以上)时,可能会导致显著延迟。 由于应用程序网关容量要求与 WAF 不同,因此不建议在不进行适当的测试和验证的情况下在应用程序网关上启用 WAF。

有关更多建议,请参阅 安全支柱的原则。

Azure 顾问可帮助你确保和提高业务关键型应用程序的连续性。 查看 Azure 顾问建议

策略定义

  • 应为应用程序网关启用Web 应用程序防火墙(WAF)。 将 Azure Web 应用程序防火墙 (WAF) 部署在面向公众的 Web 应用程序的前面,以便对传入流量进行额外检查。 Web 应用程序防火墙 (WAF) 为 Web 应用程序提供集中保护,使其免受常见攻击和漏洞的侵害,例如 SQL 注入、跨站脚本以及本地和远程文件执行。 还可以通过自定义规则,按国家/地区、IP 地址范围和其他 http(s) 参数限制对 Web 应用程序的访问。
  • Web 应用程序防火墙(WAF)应将指定的模式用于应用程序网关。 要求对应用程序网关的所有 Web 应用程序防火墙策略启用“检测”或“防护”模式。
  • 应启用 Azure DDoS 防护。 应对具有相关子网(属于具有公共 IP 的应用程序网关)的所有虚拟网络启用 DDoS 防护。

与 Azure 网络相关的所有内置策略定义都列在内置策略 - 网络

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 建议查看 成本优化设计原则

设计清单

  • 熟悉应用程序网关定价
  • 查看未充分利用的资源
  • 停止未使用的应用程序网关实例
  • 具有横向扩展和横向扩展策略
  • 查看不同参数的消耗指标

建议

浏览下表,以优化成本优化应用程序网关配置。

建议 好处
熟悉应用程序网关定价 有关应用程序网关定价的信息,请参阅了解Azure 应用程序网关和Web 应用程序防火墙的定价。 还可以利用 定价计算器

确保这些选项的大小足够大,以满足容量需求并交付预期的性能,而不会浪费资源。
查看未充分利用的资源 识别和删除具有空后端池的应用程序网关实例,以避免不必要的成本。
不使用时停止应用程序网关实例 当应用程序网关处于停止状态时,不会向你收费。 应用程序网关实例持续运行可能会产生额外的成本。 在不需要使用模式时评估使用模式并停止实例。 例如,开发/测试环境中的工作时间过后的使用情况预期较低。

有关如何停止和启动实例的信息,请参阅以下文章。
- Stop-AzApplicationGateway
- Start-AzApplicationGateway
具有横向扩展和横向扩展策略 横向扩展策略可确保有足够的实例来处理传入流量和峰值。 此外,还有一个缩减策略,可确保在需求下降时减少实例数。 请考虑选择实例大小。 大小可能会显著影响成本。 “估计应用程序网关实例计数”中介绍了一些注意事项。

有关详细信息,请参阅什么是 Azure 应用程序网关 v2?
查看不同参数的消耗指标 根据 Azure 跟踪的指标,根据应用程序网关的按流量计费。 评估各种指标和容量单位并确定成本驱动因素。 有关详细信息,请参阅 Microsoft成本管理和计费

以下指标是应用程序网关的关键。 此信息可用于验证预配的实例计数是否与传入流量量匹配。

- 估计计费容量单位
- 固定计费容量单位
- 当前容量单位

有关详细信息,请参阅应用程序网关指标

请确保考虑到带宽成本。

有关更多建议,请参阅 成本优化支柱的原则。

Azure 顾问可帮助你确保和提高业务关键型应用程序的连续性。 查看 Azure 顾问建议

卓越运营

监视和诊断对于确保网关后面的应用程序网关和 Web 应用程序或后端的卓越运营至关重要。 不仅可以测量性能统计信息,还可以使用指标快速排查和修正问题。 建议查看 卓越运营设计原则

设计清单

  • 监视容量指标
  • 对应用程序网关和Web 应用程序防火墙启用诊断(WAF)
  • 使用 Azure Monitor 网络见解
  • 将超时设置与后端应用程序匹配
  • 使用 Azure 顾问监视密钥库配置问题
  • 配置和监视 SNAT 端口限制
  • 考虑设计中的 SNAT 端口限制

建议

浏览下表,以优化应用程序网关配置,实现卓越运营。

建议 好处
监视容量指标 将这些指标用作预配应用程序网关容量利用率指标。 强烈建议针对容量设置警报。 有关详细信息,请参阅应用程序网关高流量支持
使用指标进行故障排除 还有其他指标可以指示应用程序网关或后端出现问题。 建议评估以下警报:

- 不正常的主机计数
- 响应状态(维度 4xx 和 5xx)
- 后端响应状态(维度 4xx 和 5xx)
- 后端最后一个字节响应时间
- 应用程序网关总时间

有关详细信息,请参阅应用程序网关的指标。
对应用程序网关和Web 应用程序防火墙启用诊断(WAF) 通过诊断日志,你可以查看防火墙日志、性能日志和访问日志。 使用这些日志管理和排查应用程序网关实例的问题。 有关详细信息,请参阅应用程序网关的后端运行状况和诊断日志
使用 Azure Monitor 网络见解 Azure Monitor 网络见解提供网络资源的运行状况和指标的综合视图,包括应用程序网关。 有关应用程序网关的其他详细信息和支持的功能,请参阅 Azure Monitor 网络见解
将超时设置与后端应用程序匹配 确保已配置 IdleTimeout 设置,以匹配后端应用程序的侦听器和流量特征。 默认值设置为 4 分钟,最多可配置为 30。 有关详细信息,请参阅负载均衡器 TCP 重置和空闲超时

有关工作负荷注意事项,请参阅 监视应用程序运行状况以了解可靠性
使用 Azure 顾问监视密钥库配置问题 应用程序网关每隔 4 小时检查链接密钥库中续订的证书版本。 如果由于任何不正确的密钥库配置而无法访问,则会记录该错误并推送相应的顾问建议。 必须将顾问警报配置为随时更新并立即修复此类问题,以避免任何与控制或数据平面相关的问题。 有关详细信息,请参阅 调查和解决密钥保管库错误。 若要设置此特定情况的警报,请使用建议类型作为解决应用程序网关的 Azure 密钥库问题。
考虑设计中的 SNAT 端口限制 SNAT 端口限制对于应用程序网关上的后端连接非常重要。 有单独的因素会影响应用程序网关达到 SNAT 端口限制的方式。 例如,如果后端是公共 IP 地址,则需要自己的 SNAT 端口。 为避免 SNAT 端口限制,可以增加每个应用程序网关的实例数,横向扩展后端以获取更多 IP 地址,或将后端移到同一虚拟网络中,并为后端使用专用 IP 地址。

如果达到 SNAT 端口限制,则应用程序网关上的每秒请求数(RPS)将受到影响。 例如,如果应用程序网关达到 SNAT 端口限制,则无法打开与后端的新连接,并且请求将失败。

有关更多建议,请参阅 卓越运营支柱的原则。

Azure 顾问可帮助你确保和提高业务关键型应用程序的连续性。 查看 Azure 顾问建议

性能效率

性能效率是指工作负荷能够以高效的方式扩展以满足用户对它的需求。 建议查看 性能效率原则

设计清单

  • 估计应用程序网关实例计数
  • 定义最大实例计数
  • 定义最小实例计数
  • 定义应用程序网关子网大小
  • 利用 应用程序网关 V2 功能实现自动缩放和性能优势

建议

浏览下表,以优化应用程序网关配置来提高性能效率。

建议 好处
估计应用程序网关实例计数 应用程序网关 v2 根据 CPU、网络吞吐量、当前连接等诸多方面横向扩展。 若要确定近似实例计数,请考虑以下指标:

当前计算单位 - 指示 CPU 利用率。 1 个应用程序网关实例大约是 10 个计算单元。
吞吐量 - 应用程序网关实例可以提供大约 500 Mbps 的吞吐量。 此数据取决于有效负载的类型。

计算实例计数时,请考虑此公式。
近似实例计数

估计实例计数后,将该值与最大实例计数进行比较。 这将指示你与最大可用容量的接近程度。
定义最小实例计数 对于 应用程序网关 v2 SKU,自动缩放需要一些时间(大约 6 到 7 分钟),然后才能提供额外的实例集来提供流量。 在此期间,如果流量出现短峰值,预期会出现暂时性延迟或流量丢失。

建议将最小实例计数设置为最佳级别。 估算平均实例计数并确定应用程序网关自动缩放趋势后,请根据应用程序模式定义最小实例计数。 有关信息,请参阅应用程序网关高流量支持

检查过去一个月的当前计算单位。 此指标表示网关的 CPU 使用率。 若要定义最小实例计数,请将峰值使用量除以 10。 例如,如果过去一个月的平均当前计算单位为 50,请将最小实例计数设置为 5。
定义最大实例计数 建议将 125 作为最大自动缩放实例计数。 确保具有应用程序网关的子网有足够的可用 IP 地址来支持实例的扩展集。

将最大实例计数设置为 125 不会产生任何成本影响,因为仅针对已使用容量计费。
定义应用程序网关子网大小 应用程序网关需要虚拟网络中的专用子网。 子网可以有多个已部署应用程序网关资源的实例。 还可以在该子网、v1 或 v2 SKU 中部署其他应用程序网关资源。

下面是定义子网大小的一些注意事项:

- 应用程序网关为每个实例使用一个专用 IP 地址,如果配置了专用前端 IP,则使用另一个专用 IP 地址。
- Azure 在每个子网中保留五个 IP 地址供内部使用。
- 应用程序网关(标准或 WAF SKU)最多可以支持 32 个实例。 建议采用 32 个实例 IP 地址 + 1 个专用前端 IP + 5 Azure 保留,建议最小子网大小为 /26。 由于Standard_v2或WAF_v2 SKU 最多可支持 125 个实例,因此建议使用相同的计算,因此建议使用子网大小 /24。
- 如果要在同一子网中部署其他应用程序网关资源,请考虑其最大实例计数(标准 v2 和标准 v2)所需的其他 IP 地址。
利用功能实现自动缩放和性能优势 v2 SKU 提供自动缩放功能,确保应用程序网关能够随着流量的增加而纵向扩展。 与 v1 SKU 相比,v2 具有增强工作负荷性能的功能。 例如,更好的 TLS 卸载性能、更快的部署和更新时间、区域冗余等。 有关自动缩放功能的详细信息,请参阅缩放应用程序网关 v2 和 WAF v2

如果运行的是 v1 SKU 应用程序网关,请考虑迁移到应用程序网关 v2 SKU。 有关更多信息,请参阅将 Azure 应用程序网关和 Web 应用程序防火墙从 v1 迁移到 v2

Azure 顾问可帮助你确保和提高业务关键型应用程序的连续性。 查看 Azure 顾问建议

Azure 顾问建议

Azure 顾问是个性化的云顾问程序,可帮助遵循最佳做法来优化 Azure 部署。 下面是一些建议,可帮助你提高应用程序网关的可靠性、安全性、成本效益、性能和卓越运营能力。

可靠性

其他资源

Azure 体系结构中心指南

后续步骤