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

Azure Well-Architected 框架评审 - Azure 应用程序网关 v2

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

我们假设你具备Azure 应用程序网关的实践知识,并且精通 v2 SKU 功能。 有关详细信息,请参阅Azure 应用程序网关功能

先决条件

可靠性

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

设计清单

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

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

建议

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

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

- 设置较高的间隔会使服务承受更高的负载。 每个应用程序网关实例都发送自己的运行状况探测,因此每 30 秒 100 个实例意味着每 30 秒 100 个请求。
- 设置较低的间隔会留出更多时间,然后才能检测到中断。
- 设置较低的不正常阈值可能意味着短暂的暂时性故障可能会关闭后端。
- 设置高阈值时,可能需要更长的时间才能使后端退出轮换。
通过运行状况终结点验证下游依赖项 假设每个后端都有自己的依赖项,以确保隔离故障。 例如,托管在 应用程序网关 后面的应用程序可能有多个后端,每个后端都连接到不同的数据库 (副本 (replica) ) 。 当此类依赖项失败时,应用程序可能正在运行,但不会返回有效结果。 因此,理想情况下,运行状况终结点应验证所有依赖项。 请记住,如果对运行状况终结点的每次调用都有直接依赖项调用,该数据库将每 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 策略版本 (AppGwSslPolicy20170401S)。 此版本强制实施 TLS 1.2 和更强的密码。
使用 AppGateway 进行 TLS 终止 使用 应用程序网关 进行 TLS 终止有一些优点:

- 性能有所提高,因为发送到不同后端的请求必须向每个后端重新进行身份验证。
- 更好地利用后端服务器,因为它们不必执行 TLS 处理
- 通过访问请求内容进行智能路由。
- 更轻松地管理证书,因为只需在应用程序网关上安装证书。
使用 Azure 密钥保管库存储 TLS 证书 应用程序网关与 密钥保管库 集成。 这提供了更强的安全性、更轻松的角色和职责分离、对托管证书的支持,以及更轻松的证书续订和轮换过程。
重新加密后端流量时,请确保后端服务器证书包含根证书颁发机构和中间证书颁发机构 (CA) 后端服务器的 TLS 证书必须由已知的 CA 颁发。 如果证书不是由受信任的 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 地址供内部使用。
- 应用程序网关 (Standard 或 WAF SKU) 最多可支持 32 个实例。 采用 32 个实例 IP 地址 + 1 个专用前端 IP + 5 个 Azure 预留,建议最小子网大小为 /26。 由于 Standard_v2 或 WAF_v2 SKU 最多可支持 125 个实例,因此使用相同的计算,因此建议子网大小为 /24。
- 如果要在同一子网中部署其他应用程序网关资源,请考虑标准 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 体系结构中心指南

后续步骤