教程:通过 Azure CLI 使用基于 URL 路径的重定向创建应用程序网关
创建应用程序网关时可以使用 Azure CLI 配置基于 URL 路径的路由规则。 在本教程中,使用虚拟机规模集创建后端池。 然后创建 URL 路由规则,以确保 Web 流量重定向到相应的后端池。
在本教程中,你将了解如何执行以下操作:
- 设置网络
- 创建应用程序网关
- 添加侦听器和路由规则
- 为后端池创建虚拟机规模集
下面的示例演示来自端口 8080 和 8081 并定向到相同后端池的站点流量:
如果需要,可以使用 Azure PowerShell 完成本教程中的步骤。
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
先决条件
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本教程需要 Azure CLI 版本 2.0.4 或更高版本。
创建资源组
资源组是在其中部署和管理 Azure 资源的逻辑容器。 使用 az group create 创建资源组。
以下示例在“chinanorth2” 位置创建名为“myResourceGroupAG” 的资源组。
az group create --name myResourceGroupAG --location chinanorth2
创建网络资源
使用 az network vnet create 创建名为 myVNet 的虚拟网络和名为 myAGSubnet 的子网。 然后,可以使用 az network vnet subnet create 添加后端服务器所需的名为 myBackendSubnet 的子网。 使用 az network public-ip create 创建名为 myAGPublicIPAddress 的公共 IP 地址。
az network vnet create \
--name myVNet \
--resource-group myResourceGroupAG \
--location chinanorth2 \
--address-prefix 10.0.0.0/16 \
--subnet-name myAGSubnet \
--subnet-prefix 10.0.1.0/24
az network vnet subnet create \
--name myBackendSubnet \
--resource-group myResourceGroupAG \
--vnet-name myVNet \
--address-prefix 10.0.2.0/24
az network public-ip create \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
创建应用程序网关
使用 az network application-gateway create 创建名为 myAppGateway 的应用程序网关。 使用 Azure CLI 创建应用程序网关时,请指定配置信息,例如容量、sku 和 HTTP 设置。 将应用程序网关分配给之前创建的 myAGSubnet 和 myPublicIPAddress。
az network application-gateway create \
--name myAppGateway \
--location chinanorth2 \
--resource-group myResourceGroupAG \
--vnet-name myVNet \
--subnet myAGsubnet \
--capacity 2 \
--sku Standard_v2 \
--http-settings-cookie-based-affinity Disabled \
--frontend-port 80 \
--http-settings-port 80 \
--http-settings-protocol Http \
--public-ip-address myAGPublicIPAddress \
--priority 100
创建应用程序网关可能需要几分钟时间。 创建应用程序网关后,可以看到以下新功能:
- appGatewayBackendPool - 应用程序网关必须至少具有一个后端地址池。
- appGatewayBackendHttpSettings - 指定将端口 80 和 HTTP 协议用于通信。
- appGatewayHttpListener - 与 appGatewayBackendPool 关联的默认侦听器。
- appGatewayFrontendIP - 将 myAGPublicIPAddress 分配给 appGatewayHttpListener。
- rule1 - 与 appGatewayHttpListener 关联的默认路由规则。
添加后端池和端口
可以使用 az network application-gateway address-pool create 将名为 imagesBackendPool 和 videoBackendPool 的后端地址池添加到应用程序网关。 使用 az network application-gateway frontend-port create 为池添加前端端口。
az network application-gateway address-pool create \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name imagesBackendPool
az network application-gateway address-pool create \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name videoBackendPool
az network application-gateway frontend-port create \
--port 8080 \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name bport
az network application-gateway frontend-port create \
--port 8081 \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name rport
添加侦听器和规则
添加侦听器
使用 az network application-gateway http-listener create 添加路由流量所需的名为 backendListener 和 redirectedListener 的后端侦听器。
az network application-gateway http-listener create \
--name backendListener \
--frontend-ip appGatewayFrontendIP \
--frontend-port bport \
--resource-group myResourceGroupAG \
--gateway-name myAppGateway
az network application-gateway http-listener create \
--name redirectedListener \
--frontend-ip appGatewayFrontendIP \
--frontend-port rport \
--resource-group myResourceGroupAG \
--gateway-name myAppGateway
添加默认 URL 路径映射
URL 路径映射可确保将特定的 URL 路由到特定的后端池。 可以分别使用 az network application-gateway url-path-map create 和 az network application-gateway url-path-map rule create 创建名为 imagePathRule 和 videoPathRule 的 URL 路径映射
az network application-gateway url-path-map create \
--gateway-name myAppGateway \
--name urlpathmap \
--paths /images/* \
--resource-group myResourceGroupAG \
--address-pool imagesBackendPool \
--default-address-pool appGatewayBackendPool \
--default-http-settings appGatewayBackendHttpSettings \
--http-settings appGatewayBackendHttpSettings \
--rule-name imagePathRule
az network application-gateway url-path-map rule create \
--gateway-name myAppGateway \
--name videoPathRule \
--resource-group myResourceGroupAG \
--path-map-name urlpathmap \
--paths /video/* \
--address-pool videoBackendPool
添加重定向配置
可以使用 az network application-gateway redirect-config create 为侦听器配置重定向。
az network application-gateway redirect-config create \
--gateway-name myAppGateway \
--name redirectConfig \
--resource-group myResourceGroupAG \
--type Found \
--include-path true \
--include-query-string true \
--target-listener backendListener
添加重定向 URL 路径映射
az network application-gateway url-path-map create \
--gateway-name myAppGateway \
--name redirectpathmap \
--paths /images/* \
--resource-group myResourceGroupAG \
--redirect-config redirectConfig \
--rule-name redirectPathRule
添加路由规则
路由规则可将 URL 路径映射与所创建的侦听器相关联。 可以使用 az network application-gateway rule create 添加名为 defaultRule 和 redirectedRule 的规则。
az network application-gateway rule create \
--gateway-name myAppGateway \
--name defaultRule \
--resource-group myResourceGroupAG \
--http-listener backendListener \
--rule-type PathBasedRouting \
--url-path-map urlpathmap \
--address-pool appGatewayBackendPool \
--priority 100
az network application-gateway rule create \
--gateway-name myAppGateway \
--name redirectedRule \
--resource-group myResourceGroupAG \
--http-listener redirectedListener \
--rule-type PathBasedRouting \
--url-path-map redirectpathmap \
--address-pool appGatewayBackendPool \
--priority 100
创建虚拟机规模集
在此示例中,将创建三个虚拟机规模集以支持所创建的三个后端池。 创建的规模集分别名为 myvmss1、myvmss2 和 myvmss3。 每个规模集包含两个在其上安装了 NGINX 的虚拟机实例。
将e <azure-user> 和 <password> 替换为所选的用户名和密码。
for i in `seq 1 3`; do
if [ $i -eq 1 ]
then
poolName="appGatewayBackendPool"
fi
if [ $i -eq 2 ]
then
poolName="imagesBackendPool"
fi
if [ $i -eq 3 ]
then
poolName="videoBackendPool"
fi
az vmss create \
--name myvmss$i \
--resource-group myResourceGroupAG \
--image Ubuntu2204 \
--admin-username <azure-user> \
--admin-password <password> \
--instance-count 2 \
--vnet-name myVNet \
--subnet myBackendSubnet \
--vm-sku Standard_DS2 \
--upgrade-policy-mode Automatic \
--app-gateway myAppGateway \
--backend-pool-name $poolName
done
安装 NGINX
for i in `seq 1 3`; do
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroupAG \
--vmss-name myvmss$i \
--settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"], "commandToExecute": "./install_nginx.sh" }'
done
测试应用程序网关
若要获取应用程序网关的公共 IP 地址,请使用 az network public-ip show。 复制该公共 IP 地址,并将其粘贴到浏览器的地址栏。 例如,http://40.121.222.19
、http://40.121.222.19:8080/images/test.htm
、http://40.121.222.19:8080/video/test.htm
或 http://40.121.222.19:8081/images/test.htm
。
az network public-ip show \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv
将 URL 更改为 http://<ip-address>:8080/images/test.html(请将 <ip-address> 替换为自己的 IP 地址),应会看到如以下示例所示的内容:
将 URL 更改为 http://<ip-address>:8080/video/test.html(请将 <ip-address> 替换为自己的 IP 地址),应会看到如以下示例所示的内容:
现在,将 URL 更改为 http://<ip-address>:8081/images/test.htm(请将 <ip-address> 替换为自己的 IP 地址),应会在 http://<ip-address>:8080/images 中看到重定向回映像后端池的流量。
清理资源
当不再需要资源组、应用程序网关以及所有相关资源时,请将其删除。
az group delete --name myResourceGroupAG