作为管理 Web 流量的 IT 管理员,你希望帮助客户和用户尽快获取其需要的信息。 若要优化其体验,一种方法是将不同类型的 Web 流量路由到不同的服务器资源。 本文介绍如何使用 Azure CLI 为应用程序中的不同类型的流量设置和配置应用程序网关路由。 然后,路由会根据 URL 将流量定向到不同的服务器池。
在本文中,学习如何:
- 为所需的网络资源创建资源组
- 创建网络资源
- 为来自应用程序的流量创建应用程序网关
- 为不同类型的流量指定服务器池和路由规则
- 为每个池创建一个规模集,使池可以自动缩放
- 运行测试,以便验证不同类型的流量是否进入正确的池
如果你愿意,可以使用 Azure PowerShell 或 Azure 门户完成本过程中的步骤。
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本教程需要 Azure CLI 版本 2.0.4 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。
创建资源组
资源组是在其中部署和管理 Azure 资源的逻辑容器。 使用 az group create
创建资源组。
以下示例在 eastus 位置创建名为 myResourceGroupAG 的资源组 。
az group create --name myResourceGroupAG --___location eastus
创建网络资源
使用 创建名为 myVNet 的虚拟网络和名为 az network vnet create
的子网。 然后,使用 添加后端服务器所需的名为 myBackendSubnet 的子网。 使用 创建名为 az network public-ip create
的公共 IP 地址。
az network vnet create \
--name myVNet \
--resource-group myResourceGroupAG \
--___location eastus \
--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
使用 URL 映射创建应用网关
使用 az network application-gateway create
创建名为 myAppGateway 的应用程序网关。 使用 Azure CLI 创建应用程序网关时,请指定配置信息,例如容量、sku 和 HTTP 设置。 将应用程序网关分配给 myAGSubnet 和 myAGPublicIPAddress。
az network application-gateway create \
--name myAppGateway \
--___location eastus \
--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 关联的默认路由规则。 |
添加映像及视频后端池和端口
使用 向应用程序网关添加名为 imagesBackendPool 和 az network application-gateway address-pool create
的后端池。 使用 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
的后端侦听器。
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 create
和 az network application-gateway url-path-map rule create
的 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 \
--http-settings appGatewayBackendHttpSettings
添加路由规则
路由规则可将 URL 映射与所创建的侦听器相关联。 使用 添加名为 az network application-gateway rule create
的规则。
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 \
--priority 200
创建虚拟机规模集
在本文中,你将创建三个虚拟机规模集以支持所创建的三个后端池。 你将创建名为 myvmss1、myvmss2 和 myvmss3 的规模集。 每个规模集都包含两个虚拟机实例,将在其上安装 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 Ubuntu2204 \
--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 更改为 http://<ip-address>:8080/images/test.html(请将 <ip-address> 替换为自己的 IP 地址),应会看到如以下示例所示的内容:
将 URL 更改为 http://<ip-address>:8080/video/test.html(请将 <ip-address> 替换为自己的 IP 地址),应会看到如以下示例所示的内容。
清理资源
当不再需要资源组、应用程序网关以及所有相关资源时,请将其删除。
az group delete --name myResourceGroupAG