Azure 应用程序网关是一种 Web用应用程序层(OSI 层 7)负载均衡,专用于web应用。

 

实战:通过应用程序网关对后端虚拟机上的静态网站进行负载均衡。

实战视频,请观看B站:https://www.bilibili.com/video/av82410697/

或观看本站视频

创建两台VM 并部署IIS和静态网站;

创建Application Gateway, 添加一个后端池pool1,包含两台VM01和VM02;

创建监听规则role1,指向后端池pool1,创建新的Http设置http01,协议选择Http,请求超时20s,端口80;

通过Application Gateway 的前端IP 进行访问,关闭一台虚拟机,验证负载结果。

实战完整视频:

视频中用到的IIS 安装及静态网站创建脚本

 

# install IIS server role
 Install-WindowsFeature -name Web-Server -IncludeManagementTools
​
 # remove default htm file
 remove-item  C:\inetpub\wwwroot\iisstart.htm
​
 # Add a new htm file that displays server name
 Add-Content -Path "C:\inetpub\wwwroot\iisstart.htm" -Value $("Hello World from " + $env:computername)
​

 

这也是我们介绍的Azure上的第三种带有负载均衡能力的产品,其余两种参见:

Azure 上四层负载均衡Azure Load Balancer

Azure 上基于DNS的负载均衡 Azure Traffic Manager

 

Application Gateway 针对WEB做了如下优化:

SSL/TLS终止

应用程序网关支持在网关上终止 SSL/TLS,之后,流量通常会以未加密状态流到后端服务器。 此功能让 Web 服务器不用再负担昂贵的加密和解密开销。 但有时,与服务器进行未加密的通信不是可以接受的选项。 这可能是因为安全要求、符合性要求,或者应用程序可能仅接受安全连接。 对于这些应用程序,应用程序网关支持端到端 SSL/TLS 加密。

 

自动缩放

Standard_v2 或 WAF_v2 SKU 下的应用程序网关或 WAF 部署支持自动缩放,可根据变化的流量负载模式进行扩展或缩减。 自动缩放还无需在预配期间要求选择部署大小或实例计数。 

 

区域冗余

Standard_v2 或 WAF_v2 SKU 下的应用程序网关或 WAF 部署可以跨多个可用性区域,提供更好的故障复原能力,不需在每个区域预配单独的应用程序网关。

截止到2020.1月,中国区尚无可用性区域的概念,请参见

Azure 上的高可用概念

 

 

WAF防火墙支持

Web 应用程序防火墙 (WAF) 服务为 Web 应用程序提供集中保护,使其免受常见攻击和漏洞的侵害。 WAF 基于 OWASP(开放 Web 应用程序安全项目)核心规则集 3.1(仅限 WAF_v2)、3.0 和 2.2.9 中的规则。

 

AKS的入口控制器

应用程序网关入口控制器 (AGIC) 允许你使用应用程序网关作为 Azure Kubernetes 服务 (AKS) 群集的入口。

入口控制器在 AKS 群集中以 pod 的形式运行,使用 Kubernetes 入口资源 并将其转换为应用程序网关配置,使网关可以将流量负载平衡到 Kubernetes pod。 入口控制器仅支持应用程序网关 V2 SKU。

 

基于URL的路由

基于 URL 路径的路由用于根据请求的 URL 路径,将流量路由到后端服务器池。 方案之一是将不同内容类型的请求路由到不同的池。

例如,将 http://contoso.com/video/* 的请求路由到 VideoServerPool,将 http://contoso.com/images/* 的请求路由到 ImageServerPool。 如果没有任何路径模式匹配,则选择 DefaultServerPool。

 

多站点

使用多站点托管可以在同一应用程序网关实例上配置多个网站。 此功能可以将多达 100 个网站添加到一个应用程序网关中或为 WAF 添加 40 个网站(以获得最佳性能),从而为部署配置更有效的拓扑。 每个网站都可以定向到自己的池。 例如,应用程序网关可以通过两个名为 ContosoServerPool 和 FabrikamServerPool 的服务器池分别处理 contoso.comfabrikam.com 的流量。

http://contoso.com 的请求路由到 ContosoServerPool,对 http://fabrikam.com 的请求路由到 FabrikamServerPool。

同样,可以将同一父域的两个子域托管在同一应用程序网关部署中。 例如,在单个应用程序网关部署中托管的 http://blog.contoso.comhttp://app.contoso.com 都是使用子域。

 

重定向

为确保应用程序与其用户之间的所有通信都通过加密路径进行,适用于许多 Web 应用程序的常见方案是支持 HTTP 到 HTTPS 自动重定向。

你可能过去用过专用池创建等技术,其唯一目的是将通过 HTTP 接收的请求重定向到 HTTPS。 应用程序网关支持重定向应用程序网关流量的功能。 这样可以简化应用程序配置、优化资源使用情况,并支持全局重定向和基于路径的重定向等新的重定向方案。 应用程序网关重定向支持并不仅限于 HTTP 到 HTTPS 的重定向。 这是一种通用重定向机制,因此可以针对使用规则定义的任何端口进行双向重定向。 它还支持重定向到外部站点。

 

会话相关性

需要在同一服务器上保留用户会话时,可以使用基于 Cookie 的会话相关性功能。 借助网关托管的 Cookie,应用程序网关可以将来自用户会话的后续流量定向到同一服务器进行处理。 在用户会话的会话状态在服务器上进行本地保存的情况下,此功能十分重要。

 

Web socketHTTP/2流量

应用程序网关为 WebSocket 和 HTTP/2 协议提供本机支持。 用户无法通过配置设置来选择性地启用或禁用 WebSocket 支持。

 

连接清空

连接清空可帮助你在计划内服务更新期间正常删除后端池成员。 此设置是通过后端 http 设置启用的,并且可以在创建规则期间应用于后端池的所有成员。 启用后,应用程序网关可确保后端池的所有已取消注册实例不再收到任何新请求,同时允许现有请求在所配置的时间限制内完成。 这适用于通过 API 调用显式从后端池中删除的后端实例,以及所报告的由运行状况探测确定为不正常的后端实例。

 

自定义错误页

应用程序网关允许你创建自定义错误页而非显示默认错误页。 你可以在自定义错误页上使用自己的品牌和布局。

 

重写HTTP标头

HTTP 标头可让客户端和服务器连同请求或响应一起传递附加的信息。 重写这些 HTTP 标头可帮助实现多个重要方案,例如:

  • 添加安全相关的标头字段(如 HSTS/ X-XSS-Protection)。
  • 删除可能会透露敏感信息的响应标头字段。
  • 从 X-Forwarded-For 标头中去除端口信息。

当请求和响应数据包在客户端与后端池之间移动时,可以通过应用程序网关添加、删除或更新 HTTP 请求和响应标头。 它还允许你添加条件,确保只有在满足特定条件的情况下才能重写指定标头。