教程:使用 Azure CLI 创建托管多个网站的应用程序网关

创建应用程序网关时,可以使用 Azure CLI 配置多个网站的托管。 本教程使用虚拟机规模集定义后端地址池。 然后,基于所拥有的域配置侦听器和规则,以确保 Web 流量可到达池中的相应服务器。 本教程假定你拥有多个域,并使用示例 www.contoso.comwww.fabrikam.com

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

  • 设置网络
  • 创建应用程序网关
  • 创建后端侦听器
  • 创建路由规则
  • 使用后端池创建虚拟机规模集
  • 在域中创建 CNAME 记录

多站点路由示例

如果需要,可以使用 Azure PowerShell 完成本教程中的步骤。

如果没有 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 创建虚拟网络和名为 myAGSubnet 的子网。 然后,可以使用 az network vnet subnet create 添加后端服务器所需的子网。 使用 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

创建应用程序网关

可以使用 az network application-gateway create 创建应用程序网关。 使用 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 添加包含后端服务器所需的后端池。

az network application-gateway address-pool create `
  --gateway-name myAppGateway `
  --resource-group myResourceGroupAG `
  --name contosoPool

az network application-gateway address-pool create `
  --gateway-name myAppGateway `
  --resource-group myResourceGroupAG `
  --name fabrikamPool

添加后端侦听器

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

az network application-gateway http-listener create `
  --name contosoListener `
  --frontend-ip appGatewayFrontendIP `
  --frontend-port appGatewayFrontendPort `
  --resource-group myResourceGroupAG `
  --gateway-name myAppGateway `
  --host-name www.contoso.com

az network application-gateway http-listener create `
  --name fabrikamListener `
  --frontend-ip appGatewayFrontendIP `
  --frontend-port appGatewayFrontendPort `
  --resource-group myResourceGroupAG `
  --gateway-name myAppGateway `
  --host-name www.fabrikam.com   

添加路由规则

规则按其列出的顺序进行处理,并且流量使用匹配的第一个规则进行定向,而无论特殊性如何。 例如,如果在同一端口上同时有使用基本侦听器的规则和使用多站点侦听器的规则,则使用多站点侦听器的规则必须在使用基本侦听器的规则之前列出,多站点规则才能正常运行。

在此示例中,将创建两个新规则并删除在创建应用程序网关时创建的默认规则。 可以使用 az network application-gateway rule create 添加规则。

az network application-gateway rule create `
  --gateway-name myAppGateway `
  --name contosoRule `
  --resource-group myResourceGroupAG `
  --http-listener contosoListener `
  --rule-type Basic `
  --address-pool contosoPool

az network application-gateway rule create `
  --gateway-name myAppGateway `
  --name fabrikamRule `
  --resource-group myResourceGroupAG `
  --http-listener fabrikamListener `
  --rule-type Basic `
  --address-pool fabrikamPool

az network application-gateway rule delete `
  --gateway-name myAppGateway `
  --name rule1 `
  --resource-group myResourceGroupAG

创建虚拟机规模集

在此示例中,将创建三个虚拟机规模集以支持应用程序网关中的三个后端池。 创建的规模集分别名为 myvmss1myvmss2myvmss3。 每个规模集包含两个在其上安装了 IIS 的虚拟机实例。

for i in `seq 1 2`; do

  if [ $i -eq 1 ]
  then
    poolName="contosoPool"
  fi

  if [ $i -eq 2 ]
  then
    poolName="fabrikamPool"
  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 2`; 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

在域中创建 CNAME 记录

使用其公共 IP 地址创建应用程序网关后,可以获取 DNS 地址并使用它在域中创建 CNAME 记录。 可以使用 az network public-ip show 获取应用程序网关的 DNS 地址。 复制 DNSSettings 的 fqdn 值并使用它作为所创建的 CNAME 记录的值。

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

不建议使用 A 记录,因为重新启动应用程序网关后 VIP 可能会变化。

测试应用程序网关

在浏览器的地址栏中输入域名。 例如, http://www.contoso.com。

在应用程序网关中测试 contoso 站点

将地址更改为其他域,应看到类似下例所示的内容:

在应用程序网关中测试 fabrikam 站点

清理资源

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

az group delete --name myResourceGroupAG --location chinanorth

后续步骤

在本教程中,你已学习了如何执行以下操作:

  • 设置网络
  • 创建应用程序网关
  • 创建后端侦听器
  • 创建路由规则
  • 使用后端池创建虚拟机规模集
  • 在域中创建 CNAME 记录