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

Well-Architected 框架视角下的 Azure 应用程序网关 v2

Azure 应用程序网关 v2 是在应用程序层运行的 Web 流量负载均衡器。 应用程序网关根据 HTTP 请求的属性管理流向 Web 应用的流量。 对于具有高级路由功能且需要增强安全性和可伸缩性的方案,请使用应用程序网关。

本文假设作为架构师,你已查看了 网络选项,并选择应用程序网关作为工作负荷的 Web 流量负载均衡器。 本文中的指南提供了对应于 Well-Architected 框架支柱原则的架构建议。

重要

如何使用本指南

每个部分都有一个 设计清单,该清单列出关注的架构领域,以及针对技术范围本地化的设计策略。

此外,还包括有助于具体化这些策略的技术功能的建议。 这些建议并不表示可用于应用程序网关及其依赖项的所有配置的详尽列表。 然而,它们列出了映射到设计视角的关键建议。 使用建议生成概念证明或优化现有环境。

演示关键建议的基础体系结构:基线高度可用、区域冗余的 Web 应用程序体系结构

技术范围

本次审查重点关注以下 Azure 资源的相关决策:

  • 应用程序网关 v2
  • 应用程序网关上的 Web 应用程序防火墙 (WAF)

可靠性

可靠性支柱的目的是通过 构建足够的复原能力和从故障中快速恢复来提供持续的功能。

可靠性设计原则 为各个组件、系统流和整个系统提供高级设计策略。

设计清单

根据可靠性设计评审核对清单开始实施您的设计策略。 在记住应用程序网关及其依赖项的功能的同时,确定其与业务需求的相关性。 扩展策略以根据需要包含更多方法。

  • 在新部署中使用应用程序网关 v2,除非工作负荷特别需要应用程序网关 v1。

  • 在设计中生成冗余。 将应用程序网关实例分散到可用性区域,以提高容错和生成冗余。 如果一个区域发生故障,流量将流向其他区域。 有关详细信息,请参阅 有关使用可用性区域和区域的建议

  • 在访问应用程序网关或进行进一步更改之前,请规划额外的时间进行规则更新和其他配置更改。 例如,你可能需要额外的时间以从后端池中删除服务器,因为它们必须清空现有的连接。

  • 实现运行状况终结点监视模式。 应用程序应暴露健康检查端点,这些端点汇总应用程序处理请求所需的关键服务和依赖项的状态。 应用程序网关运行状况探测使用终结点来检测后端池中服务器的运行状况。 有关详细信息,请参阅 运行状况终结点监视模式

  • 评估间隔和阈值设置对健康检查的影响。 健康探测器定期向配置的终结点发送请求。 后端系统在被标记为不健康之前可以容忍数量有限的失败请求。 这些设置可能会发生冲突,因此需要进行权衡。

    • 更高的间隔会使服务负载更高。 每个应用程序网关实例发送自己的运行状况探测,因此每 30 秒 100 个实例等于每 30 秒 100 个请求。

    • 较低的间隔会增加健康探测器检测到故障所需的时间。

    • 较低且运行不正常的阈值会增加短暂故障关闭后端的可能性。

    • 较高的阈值会增加后端停止轮换所需的时间。

  • 通过运行状况终结点验证下游依赖项。 为了找出故障,每个后端可能都有自己的依赖项。 例如,托管在应用程序网关后面的应用程序可能有多个后端,每个后端都连接到不同的数据库或副本。 当此类依赖项失败时,应用程序可能会正常工作,但不会返回有效结果。 因此,健康终结点应该验证所有依赖项。

    如果每次调用运行状况终结点都将直接调用依赖项,则该数据库每 30 秒会收到 100 个查询,而不是一个查询。 为了避免查询过多,运行状况终结点应在短时间内缓存依赖项的状态。

  • 请考虑应用程序网关限制和可能影响可靠性的已知问题。 查看应用程序网关常见问题解答,获取有关蓄意行为、正在构建的修复程序、平台限制以及可能的解决方法或缓解策略的重要信息。 不要在应用程序网关专用子网中使用 UDR。

  • 在设计中考虑源网络地址转换(SNAT)端口限制,这可能会影响应用程序网关上的后端连接。 某些因素会影响应用程序网关达到 SNAT 端口限制的方式。 例如,如果后端是公共 IP 地址,则需要自己的 SNAT 端口。 若要避免 SNAT 端口限制,可以执行以下操作之一:

    • 增加每个应用程序网关的实例数。

    • 横向扩展后端以具有更多 IP 地址。

    • 将后端移到同一虚拟网络中,并为后端使用专用 IP 地址。

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

建议

建议 好处
区域感知配置中部署应用程序网关实例。

检查区域对区域冗余的支持,因为并非所有区域都提供此功能。
在各区域中分布多个实例时,工作负荷可以承受单个区域中的故障。 如果区域不可用,流量会自动转移到其他区域中的正常实例,从而保持应用程序可靠性。
使用应用程序网关运行状况探测来检测后端不可用性。 运行状况探测可确保流量仅路由到可以处理流量的后端。 应用程序网关监视其后端池中所有服务器的运行状况,并自动停止将流量发送到认为不正常的任何服务器。
为 Azure WAF 配置 速率限制规则,以便客户端无法向应用程序发送太多流量。 使用速率限制来避免重试风暴等问题。
不要在应用网关上使用 UDR,这样 后端健康报告 才能正常运行,并生成正确的日志和指标。

如果你必须在应用程序网关子网中使用 UDR,请参阅支持的 UDR
应用程序网关子网上的 UDR 可能会导致一些问题。 不要在应用程序网关子网上使用 UDR,以便你可以查看后端运行状况、日志和指标。
配置 IdleTimeout 参数,以适配后端应用程序的监听器和流量特征。 默认值为 4 分钟。 可以将它配置为最多 30 分钟。

有关详细信息,请参阅负载均衡器传输控制协议 (TCP) 重置和空闲超时
设置 IdleTimeout 以匹配后端。 此设置可确保应用程序网关和客户端之间的连接在后端需要超过四分钟才能响应请求时保持打开状态。 如果未配置此设置,连接将关闭,并且客户端看不到后端响应。

安全

安全支柱的目的是为工作负荷提供 保密性、完整性和可用性 保证。

安全设计原则 通过应用应用程序网关技术设计方法来实现这些目标提供高级设计策略。

设计清单

根据面向安全性的设计评审清单启动设计策略,并确定漏洞和控制措施来改进安全态势。 扩展策略以根据需要包含更多方法。

  • 查看应用程序网关的安全基线

  • 在边缘拦截常见威胁。 WAF 与应用程序网关集成。 在前端启用 WAF 规则,以保护应用程序免受网络边缘(靠近攻击源)的常见攻击和漏洞的影响。 有关详细信息,请参阅应用程序网关上的 WAF

    了解 WAF 如何影响应用程序网关容量更改。 启用 WAF 时,应用程序网关将会:

    • 缓冲每个请求,直到请求完全到达。

    • 检查请求是否与其核心规则集中的任何规则冲突匹配。

    • 将数据包转发到后端实例。

    30 MB 或更多的大型文件上传可能会带来显著的延迟。 启用 WAF 时,应用程序网关容量要求会发生变化,因此我们建议先正确测试和验证此方法。

    使用 Azure Front Door 和应用程序网关保护 HTTP 或 HTTPS 应用程序时,请使用 Azure Front Door 中的 WAF 策略并锁定应用程序网关,以仅接收来自 Azure Front Door 的流量。 某些情形可能迫使你在应用程序网关上实施专门的规则。 例如,如果需要 ModSec CRS 2.2.9、CRS 3.0 或 CRS 3.1 规则,则只能在应用程序网关上实现这些规则。 相反,Azure Front Door 支持速率限制和地理筛选,应用程序网关不支持这些功能。

  • 仅允许对控制平面进行授权访问。 使用应用程序网关基于角色的访问控制 (RBAC) 将访问权限仅提供给需要权限的标识。

  • 保护传输中的数据。 启用端到端传输层安全性(TLS)、TLS 终止和端到端 TLS 加密。 重新加密后端流量时,请确保后端服务器证书同时包含根证书颁发机构和中间证书颁发机构(CA)。

    使用已知的 CA 颁发后端服务器的 TLS 证书。 如果不使用受信任的 CA 颁发证书,应用程序网关会检查,直到找到受信任的 CA 证书。 仅当找到受信任的 CA 时,它才建立安全连接。 否则,应用程序网关会将后端标记为不正常。

  • 保护应用程序机密。 使用 Azure Key Vault 存储 TLS 证书以提高安全性,并简化证书续订和轮换过程。

  • 减少攻击面并强化配置。 删除不需要的默认配置,并强化应用程序网关配置以加强安全控制。 遵守应用程序网关的所有网络安全组 (NSG) 限制。

    请为后端池资源使用适当的域名系统 (DNS) 服务器。 当后端池包含可解析的完全限定域名(FQDN)时,DNS 解析基于专用 DNS 区域或自定义 DNS 服务器(如果已在虚拟网络上配置),或使用默认的 Azure 提供的 DNS。

  • 监视异常活动。 定期查看日志以检查攻击和误报。 将 WAF 日志从应用程序网关 发送到组织的集中式安全信息和事件管理(如 Microsoft Sentinel),以检测威胁模式,并在工作负荷设计中纳入预防措施。

建议

建议 好处
设置 TLS 策略 以提高安全性。 确保使用最新的 TLS 策略版本。 使用最新的 TLS 策略强制使用 TLS 1.2 和更强的密码。 TLS 策略包括对 TLS 协议版本和密码套件的控制,以及 TLS 握手使用密码的顺序。
使用应用程序网关实现 TLS 终止 性能会提高,因为转到不同后端的请求不必重新对每个后端进行身份验证。

网关可以访问请求内容并做出智能路由决策。

只需在应用程序网关上安装证书即可简化证书管理。
应用程序网关与 Key Vault 集成 以存储 TLS 证书。 此方法提供更强大的安全性、更轻松地分离角色和职责、对托管证书的支持,以及更简单的证书续订和轮换过程。
遵守应用程序网关的所有 NSG 限制。 应用程序网关子网支持 NSG,但存在一些限制。 例如,禁止了与某些端口范围的一些通信。 请确保了解这些限制的含义。

成本优化

成本优化侧重于 检测支出模式、优先考虑关键领域的投资,以及优化其他 以满足组织预算,同时满足业务需求。

成本优化设计原则 提供实现这些目标的高级设计策略,并在与应用程序网关及其环境相关的技术设计中做出必要的权衡。

设计清单

根据投资的成本优化设计评审核对清单开始实施您的设计策略。 微调设计,使工作负荷与为工作负荷分配的预算保持一致。 设计应使用正确的 Azure 功能,监视投资,并查找随时间推移进行优化的机会。

  • 熟悉应用程序网关和 WAF 定价 选择适当大小的选项来满足工作负荷容量需求,并在不浪费资源的情况下提供预期的性能。 若要估算成本,请使用 定价计算器

  • 删除未使用的应用程序网关实例,并优化未使用的实例。 若要避免不必要的成本,请识别和删除具有空后端池的应用程序网关实例。 在不使用时停止应用程序网关实例。

  • 优化应用程序网关实例的扩展成本。 若要优化缩放策略并减少工作负载的需求,请参阅 有关优化缩放成本的建议

    若要依应用流量需求上/下扩展服务,请使用应用程序网关 v2中的 自动扩展。

  • 监视应用程序网关消耗指标,并了解其成本影响。 Azure 会根据跟踪的指标对基于用量计费的应用程序网关实例进行收费。 评估各种指标和容量单位,并确定成本驱动因素。 有关详细信息,请参阅 Microsoft成本管理

建议

建议 益处
当不使用应用程序网关实例时,将其停止。 有关更多信息,请参阅 Stop-AzApplicationGatewayStart-AzApplicationGateway 停止的应用程序网关实例不会产生费用。 持续运行的应用程序网关实例会产生不必要的成本。 评估使用模式,并在不需要实例时停止实例。 例如,在开发/测试环境中,工作时间过后,预期使用量较低。
监视关键成本驱动因素应用程序网关指标,例如:

- 预估计费容量单位数。
- 固定的可计费容量单位。
- 当前容量单位。

请确保考虑到带宽成本。
使用这些指标来验证预配的实例计数是否与传入流量量匹配,并确保充分利用分配的资源。

卓越运营

卓越运营主要侧重于开发实践、可观测性和发布管理等过程。

卓越运营设计原则 提供了一个高级设计策略,用于实现工作负荷的操作要求的目标。

设计清单

根据卓越运营设计评审清单来开始实施设计策略,以定义与应用程序网关相关的可观测性、测试和部署。

  • 在应用程序网关和 WAF 上启用诊断。 收集日志和指标,以便可以监视工作负荷的运行状况、识别工作负荷性能和可靠性的趋势,以及解决问题。 若要设计总体监视方法,请参阅 有关设计和创建监视系统的建议

    使用容量指标监视预配的应用程序网关容量的使用。 设置指标警报,以便在应用程序网关或后端出现容量问题或其他问题时通知你。 使用诊断日志管理和排查应用程序网关实例的问题。

  • 使用 Azure Monitor Network Insights 来全面了解网络资源的运行状况和指标,包括应用程序网关。 使用集中式监视快速识别和解决问题、优化性能并确保应用程序的可靠性。

  • 在 Azure 顾问中监视应用程序网关建议。 配置警报,以便在你有关于应用程序网关实例的新关键建议时通知你的团队。 顾问基于属性(如类别、影响级别和建议类型)生成建议。

建议

建议 好处
配置警报,以在容量指标(如 CPU 使用率和计算单位使用情况)超过建议的阈值时通知团队。

若要根据容量指标配置一组全面的警报,请参阅 应用程序网关高流量支持
设置指标超过阈值时的警报,以便了解使用情况何时增加。 此方法可确保有足够的时间对工作负荷实施必要的更改,并防止降级或中断。
配置警报,以便通知你的团队用于指示应用程序网关或后端出现问题的指标。 建议评估以下警报:

- 运行不正常的主机计数
- 响应状态,例如 4xx 和 5xx 错误
- 后端响应状态,例如 4xx 和 5xx 错误
- 后端最后一个字节响应时间
- 应用程序网关总时间

有关详细信息,请参阅应用程序网关的指标
使用警报来帮助确保团队能够及时响应问题,并有助于进行故障排除。
在应用程序网关和 WAF 上启用 诊断日志,以收集防火墙日志、性能日志和访问日志。 使用日志来帮助检测、调查和排查应用程序网关实例和工作负荷的问题。
使用“顾问”监视密钥保管库配置问题。 设置警报,以便在收到一条指明解决应用程序网关的 Azure Key Vault 问题的建议时通知你的团队。 使用“顾问”警报保持最新状态并立即解决问题。 防止出现任何与控制平面或数据平面相关的问题。

应用程序网关每隔 4 小时检查链接的 Key Vault 实例中的续订证书版本。 如果证书版本由于密钥保管库配置不正确而无法访问,则会记录该错误并推送相应的顾问建议。

性能效率

性能效率就是通过管理容量来保持用户体验,即使负载增加也不例外。 该策略包括缩放资源、识别和优化潜在瓶颈,以及优化峰值性能。

性能效率设计原则 提供了一个高级设计策略,用于根据预期使用量实现这些容量目标。

设计清单

  • 估算应用程序网关的容量要求以支持工作负荷要求。 利用应用程序网关 v2 中的自动缩放功能。 为最小和最大实例数设置适当的值。 适当调整应用程序网关所需的专用子网的大小。 有关详细信息,请参阅 容量规划建议

    应用程序网关 v2 根据许多方面(例如 CPU、网络吞吐量和当前连接)进行横向扩展。 若要确定近似实例计数,请考虑以下指标:

    • 当前计算单位: 此指标指示 CPU 使用率。 一个应用程序网关实例等于大约 10 个计算单元。

    • 吞吐量: 应用程序网关实例可以提供大约 500 Mbps 的吞吐量。 此数据取决于有效负载的类型。

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

    估算实例计数后,将该值与最大实例计数进行比较。 使用此比较来确定与最大可用容量的接近程度。

  • 利用相关功能进行自动扩展并获取性能优势。 v2 SKU 提供自动缩放功能,应用程序网关会随着流量的增加而扩展。 与 v1 SKU 相比,v2 SKU 具有增强工作负荷性能的功能。 例如,v2 SKU 具有更好的 TLS 卸载性能、更快的部署和更新时间,以及区域冗余支持。 有关详细信息,请参阅 扩展应用网关 v2 和 WAF v2

    如果使用应用程序网关 v1,请考虑迁移到应用程序网关 v2。 有关详细信息,请参阅 将应用程序网关和 WAF 从 v1 迁移到 v2

建议

建议 好处
根据估计实例计数、实际应用程序网关自动缩放趋势和应用程序模式,将 最小实例计数设置为最佳级别

检查过去一个月的当前计算单位。 此指标表示网关的 CPU 使用率。 若要定义最小实例计数,请将峰值使用量除以 10。 例如,如果过去一个月的平均当前计算单位为 50,请将最小实例计数设置为 5。
对于应用程序网关 v2,自动缩放大约需要三到五分钟,之后额外的实例集才可以处理流量。 在此期间,如果应用程序网关流量出现短峰值,则预期会有暂时性延迟或流量丢失。
最大自动缩放实例计数 设置为可能的最大值,即 125 个实例。 确保应用程序网关专用子网有足够的可用 IP 地址来支持增加的实例集。 应用程序网关可以根据需要进行横向扩展,以应对应用程序流量的增加。 此设置不会增加成本,因为只需为消耗的容量付费。
适当调整应用程序网关专用子网的大小。 强烈建议使用 /24 子网进行应用程序网关 v2 部署。

如果要在同一子网中部署其他应用程序网关资源,请考虑为支持最大实例数量而需要的额外 IP 地址。

有关调整子网大小的详细信息,请参阅 应用程序网关基础结构配置
使用 /24 子网为应用程序网关 v2 部署所需的所有 IP 地址提供支持。

如果配置专用前端 IP,应用程序网关为每个实例使用一个专用 IP 地址和另一个专用 IP 地址。 Standard_v2或WAF_v2 SKU 最多可以支持 125 个实例。

Azure 在每个子网中保留五个 IP 地址供内部使用。

Azure 策略

Azure 提供了一组与应用服务及其依赖项相关的大量内置策略。 一组 Azure 策略可以审核上述一些建议。 例如,可以检查以下情况:

  • 应为应用程序网关启用 WAF。 在面向公众的 Web 应用程序前面部署 WAF,为传入流量添加另一个检查层。 WAF 为 Web 应用程序提供集中保护。 它有助于防止常见的攻击和漏洞,例如 SQL 注入、跨站点脚本以及本地和远程文件执行。 还可以使用自定义规则根据国家或地区、IP 地址范围和其他 HTTP 或 HTTPS 参数限制对 Web 应用程序的访问。

  • WAF 应为应用程序网关使用指定的模式。 确保应用程序网关的所有 WAF 策略都使用检测防护模式。

  • 应启用 Azure DDoS 防护。 为所有具有包含具有公共 IP 的应用程序网关的子网的虚拟网络启用 DDoS 防护。

有关全面治理,请查看 Azure Policy 内置定义 和其他可能影响网络的策略。

Azure 顾问建议

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

后续步骤