练习 - 创建和配置应用程序网关
应用程序网关在终结点上侦听传入的请求,然后将这些请求转发到其后端池中的某个 Web 服务器。 你提供的配置描述了应用程序网关如何定向流量,以及如何在各 Web 服务器中对请求进行负载均衡。
在机动车部门系统中,需要配置应用程序网关以跨托管车辆登记 Web 应用的 Web 服务器对传入的请求进行负载均衡。 还需要配置应用程序网关以检测任一 Web 服务器何时出现故障,以便将流量重定向到正常工作的服务器。 此外,需要配置基于路径的路由,以将针对车辆登记和驾照更新站点的请求发送到适当的后端 Web 服务。
在此练习中,你将使用后端 Web 服务器池创建应用程序网关实例。 你将验证应用程序网关是否配置了正确的侦听器来处理传入的 HTTP 请求,并将这些请求路由到正常运行的 Web 服务器。
为应用程序网关配置网络
运行以下命令,创建应用程序网关所需的专用子网。 在上一个练习中创建的
vehicleAppVnet
虚拟网络中,子网名为appGatewaySubnet
。az network vnet subnet create \ --resource-group $RG \ --vnet-name vehicleAppVnet \ --name appGatewaySubnet \ --address-prefixes 10.0.0.0/24
运行以下命令,为应用程序网关创建公共 IP 地址和 DNS 标签。 DNS 标签必须是全局唯一的。 为生成标签,以下代码使用
$RANDOM
函数。az network public-ip create \ --resource-group $RG \ --name appGatewayPublicIp \ --sku Standard \ --dns-name vehicleapp${RANDOM}
创建应用程序网关
首先,使用以下命令创建 WAF 策略:
az network application-gateway waf-policy create \ --name waf-pol \ --resource-group $RG \ --type OWASP \ --version 3.2
通过以下命令使用以下配置创建名为
vehicleAppGateway
的应用程序网关:- 包含 Web 服务器虚拟机 IP 地址的后端池。
- 阻止恶意请求(例如,SQL 注入和跨站点脚本攻击)的防火墙。
- 侦听端口 8080 的临时侦听器。 此侦听器将在稍后的步骤中被替换,但创建应用程序网关时需要它。
- 将这些请求路由到后端池中的 Web 服务器(并进行负载均衡)的规则。
az network application-gateway create \ --resource-group $RG \ --name vehicleAppGateway \ --sku WAF_v2 \ --capacity 2 \ --vnet-name vehicleAppVnet \ --subnet appGatewaySubnet \ --public-ip-address appGatewayPublicIp \ --http-settings-protocol Http \ --http-settings-port 8080 \ --private-ip-address 10.0.0.4 \ --frontend-port 8080 \ --waf-policy waf-pol \ --priority 100
注意
此命令可能需要几分钟才能完成。
要查找
webServer1
和webServer2
的专用 IP 地址,请运行以下命令:az vm list-ip-addresses \ --resource-group $RG \ --name webServer1 \ --query [0].virtualMachine.network.privateIpAddresses[0] \ --output tsv
az vm list-ip-addresses \ --resource-group $RG \ --name webserver2 \ --query [0].virtualMachine.network.privateIpAddresses[0] \ --output tsv
接下来,我们将为每个网站添加后端池。 首先,为在虚拟机上运行的车辆登记站点创建后端池。 确保以下命令中的 IP 地址与前面的命令输出的 IP 地址匹配。
az network application-gateway address-pool create \ --gateway-name vehicleAppGateway \ --resource-group $RG \ --name vmPool \ --servers 10.0.1.4 10.0.1.5
要为在应用服务上运行的许可续期站点创建后端池,请运行以下命令:
az network application-gateway address-pool create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServicePool \ --servers $APPSERVICE.azurewebsites.net
为端口 80 创建一个前端端口:
az network application-gateway frontend-port create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name port80 \ --port 80
创建用于在端口 80 上处理请求的侦听器:
az network application-gateway http-listener create \ --resource-group $RG \ --name vehicleListener \ --frontend-port port80 \ --frontend-ip appGatewayFrontendIP \ --gateway-name vehicleAppGateway
添加运行状况探测
创建测试 Web 服务器可用性的运行状况探测。 运行状况探针每 15 秒 (
--interval 15
) 运行一次,并将 HTTP GET 请求发送到 Web 应用的根路径。 如果 Web 应用在 10 秒内未响应 (--timeout 10
),则探测超时。如果探测连续三次失败 (--threshold 3
),则将 Web 服务器标记为不正常。由于要将应用服务用作其中一个后端,因此将主机头设置为应用服务的名称。 如果不进行此设置,应用服务将不会响应,也不会显示为正常状态。
az network application-gateway probe create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name customProbe \ --path / \ --interval 15 \ --threshold 3 \ --timeout 10 \ --protocol Http \ --host-name-from-http-settings true
接下来,为网关创建 HTTP 设置以使用你创建的运行状况探测:
az network application-gateway http-settings create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appGatewayBackendHttpSettings \ --host-name-from-backend-pool true \ --port 80 \ --probe customProbe
配置基于路径的路由
现在,我们需要为应用程序网关配置基于路径的路由。 我们会将针对“/VehicleRegistration/”的请求路由到“vmPool”,并将针对“/LicenseRenewal/”的请求路由到“appServicePool”。 没有 URL 上下文的请求默认将路由到“vmPool”。
运行以下命令,为“vmPool”创建路径映射:
az network application-gateway url-path-map create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name urlPathMap \ --paths /VehicleRegistration/* \ --http-settings appGatewayBackendHttpSettings \ --default-http-settings appGatewayBackendHttpSettings \ --address-pool vmPool \ --default-address-pool vmPool
运行以下命令,为“appServicePool”创建路径映射:
az network application-gateway url-path-map rule create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServiceUrlPathMap \ --paths /LicenseRenewal/* \ --http-settings appGatewayBackendHttpSettings \ --address-pool appServicePool \ --path-map-name urlPathMap
现在,使用你创建的路径映射创建新的路由规则:
az network application-gateway rule create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServiceRule \ --priority 200 \ --http-listener vehicleListener \ --rule-type PathBasedRouting \ --address-pool appServicePool \ --url-path-map urlPathMap
配置的最后一部分是删除我们最初部署应用程序网关时创建的规则。 有了自定义规则,就不再需要它了。
az network application-gateway rule delete \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name rule1
设置好后,应进行测试。