教程 - 使用 Azure CLI 基于 URL 对 Web 流量进行路由

作为管理 Web 流量的 IT 管理员,你希望帮助客户或用户尽快获取其需要的信息。 若要优化其体验,一种方法是将不同类型的 Web 流量路由到不同的服务器资源。 本教程介绍如何使用 Azure CLI 为应用程序中的不同类型的流量设置和配置应用程序网关路由。 然后,路由会根据 URL 将流量定向到不同的服务器池。

URL 路由示例

本教程介绍如何执行下列操作:

  • 为所需的网络资源创建资源组
  • 创建网络资源
  • 为来自应用程序的流量创建应用程序网关
  • 为不同类型的流量指定服务器池和路由规则
  • 为每个池创建一个规模集,使池可以自动缩放
  • 运行测试,以便验证不同类型的流量是否进入正确的池

如果你愿意,可以使用 Azure PowerShellAzure 门户完成本教程中的步骤。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.4 或更高版本。 若要查找版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI

创建资源组

资源组是在其中部署和管理 Azure 资源的逻辑容器。 使用 az group create 创建资源组。

以下示例在“chinanorth”位置创建名为“myResourceGroupAG”的资源组。

az group create --name myResourceGroupAG --location chinanorth

创建网络资源

使用 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 chinanorth `
  --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

使用 URL 映射创建应用网关

使用 az network application-gateway create 创建名为 myAppGateway 的应用程序网关。 使用 Azure CLI 创建应用程序网关时,请指定配置信息,例如容量、sku 和 HTTP 设置。 将应用程序网关分配给之前创建的 myAGSubnetmyAGPublicIPAddress

az network application-gateway create `
  --name myAppGateway `
  --location chinanorth `
  --resource-group myResourceGroupAG `
  --vnet-name myVNet `
  --subnet myAGsubnet `
  --capacity 2 `
  --sku Standard_Medium `
  --http-settings-cookie-based-affinity Disabled `
  --frontend-port 80 `
  --http-settings-port 80 `
  --http-settings-protocol Http `
  --public-ip-address myAGPublicIPAddress

创建应用程序网关可能需要几分钟时间。 创建应用程序网关后,可以看到以下新功能:

功能 说明
appGatewayBackendPool 应用程序网关必须至少具有一个后端地址池。
appGatewayBackendHttpSettings 指定将端口 80 和 HTTP 协议用于通信。
appGatewayHttpListener 与 appGatewayBackendPool 关联的默认侦听器
appGatewayFrontendIP 将 myAGPublicIPAddress 分配给 appGatewayHttpListener。
rule1 与 appGatewayHttpListener 关联的默认路由规则。

添加映像及视频后端池和端口

使用 az network application-gateway address-pool create 向应用程序网关添加名为 imagesBackendPoolvideoBackendPool 的后端池。 使用 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 port8080

添加后端侦听器

使用 az network application-gateway http-listener create 添加路由流量所需的名为 backendListener 的后端侦听器。

az network application-gateway http-listener create `
  --name backendListener `
  --frontend-ip appGatewayFrontendIP `
  --frontend-port port8080 `
  --resource-group myResourceGroupAG `
  --gateway-name myAppGateway

添加 URL 路径映射

URL 路径映射可确保将特定的 URL 路由到特定的后端池。 使用 az network application-gateway url-path-map createaz network application-gateway url-path-map rule create 创建名为 imagePathRulevideoPathRule 的 URL 路径映射。

az network application-gateway url-path-map create `
  --gateway-name myAppGateway `
  --name myPathMap `
  --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 myPathMap `
  --paths /video/* `
  --address-pool videoBackendPool

添加路由规则

路由规则可将 URL 映射与所创建的侦听器相关联。 使用 az network application-gateway rule create 添加名为 rule2 的规则。

az network application-gateway rule create `
  --gateway-name myAppGateway `
  --name rule2 `
  --resource-group myResourceGroupAG `
  --http-listener backendListener `
  --rule-type PathBasedRouting `
  --url-path-map myPathMap `
  --address-pool appGatewayBackendPool

创建 VM 规模集

在本教程中,你将创建三个虚拟机规模集以支持所创建的三个后端池。 你将创建名为 myvmss1myvmss2myvmss3 的规模集。 每个规模集都包含两个虚拟机实例,将在其上安装 NGINX。

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 UbuntuLTS `
    --admin-username azureuser `
    --admin-password Azure123456! `
    --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

az network public-ip show `
  --resource-group myResourceGroupAG `
  --name myAGPublicIPAddress `
  --query [ipAddress] `
  --output tsv

在应用程序网关中测试基 URL

将 URL 更改为 http://<ip-address>:8080/images/test.html(请将 <ip-address> 替换为自己的 IP 地址),应会看到如以下示例所示的内容:

在应用程序网关中测试映像 URL

将 URL 更改为 http://<ip-address>:8080/video/test.html(请将 <ip-address> 替换为自己的 IP 地址),应会看到如以下示例所示的内容。

在应用程序网关中测试视频 URL

清理资源

当不再需要资源组、应用程序网关以及所有相关资源时,请将其删除。

az group delete --name myResourceGroupAG --location chinanorth

后续步骤