Criar um gateway de aplicativo que hospeda vários sites usando a CLI do Azure

Você pode usar a CLI do Azure para configurar a hospedagem de vários sites da Web ao criar um gateway de aplicativo. Neste artigo, você define pools de endereço back-end usando conjuntos de dimensionamento de máquinas virtuais. Em seguida, você configurará ouvintes e regras com base em domínios que possui para garantir que o tráfego da Web chegue aos servidores apropriados nos pools. Este artigo presume que você possui vários domínios e usa exemplos do www.contoso.com e do www.fabrikam.com.

Neste artigo, você aprenderá como:

  • Configurar a rede
  • Criar um Gateway de Aplicativo
  • Criar ouvintes de back-end
  • Criando regras de encaminhamento
  • Criar conjuntos de dimensionamento de máquinas virtuais com pools de back-end
  • Criar um registro CNAME no seu domínio

Multi-site Application Gateway

Se preferir, você poderá concluir este procedimento usando o Azure PowerShell.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

  • Este tutorial requer a versão 2.0.4 ou posterior da CLI do Azure. Se você está usando o Azure Cloud Shell, a versão mais recente já está instalada.

Criar um grupo de recursos

Um grupo de recursos é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados. Criar um grupo de recursos usando az group create.

O exemplo a seguir cria um grupo de recursos denominado myResourceGroupAG no local eastus.

az group create --name myResourceGroupAG --location eastus

Criar recursos da rede

Criar a rede virtual e a sub-rede denominada myAGSubnet usando az network vnet create. Você pode adicionar a sub-rede que é necessária para os servidores de back-end usando az network vnet subnet create. Crie o endereço IP público denominado myAGPublicIPAddress usando az network public-ip create.

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

Criar o gateway de aplicativo

Você pode usar az network application-gateway creat para criar o gateway do aplicativo. Quando você cria um gateway de aplicativo usando a CLI do Azure, você pode especificar informações de configuração, como configurações de HTTP, sku e capacidade. O gateway de aplicativo é atribuído a myAGSubnet e myAGPublicIPAddress que você criou anteriormente.

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 10

O gateway de aplicativo pode demorar vários minutos para ser criado. Depois de criar o gateway de aplicativo, você pode ver esses novos recursos:

  • appGatewayBackendPool - Um gateway de aplicativo deve ter pelo menos um pool de endereços de back-end.
  • appGatewayBackendHttpSettings - Especifica que a porta 80 e um protocolo HTTP são usados para comunicação.
  • appGatewayHttpListener - O ouvinte padrão associado ao appGatewayBackendPool.
  • appGatewayFrontendIP - Atribui myAGPublicIPAddress ao appGatewayHttpListener.
  • rule1 - A regra padrão de roteamento que está associada ao appGatewayHttpListener.

Adicionar os pools de back-end

Adicione os pools de back-end necessários para conter os servidores de back-end usando 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

Adicionar ouvintes

Adicione ouvintes necessários para redirecionar o tráfego usando az network application-gateway http-listener create.

Observação

Com o Gateway de Aplicativo ou a SKU WAF v2, você também pode configurar até cinco nomes do host por ouvinte e pode usar caracteres curinga no nome do host. Confira nomes do host curinga no ouvinte para obter mais informações. Para usar vários nomes do host e caracteres curinga em um ouvinte usando a CLI do Azure, você deve usar --host-names em vez de --host-name. Com nomes do host, você pode mencionar até cinco nomes do host como valores separados por espaço. Por exemplo, --host-names "*.contoso.com *.fabrikam.com"

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

Adicionar regras de redirecionamento

As regras serão processadas na ordem em que estão listadas se o campo de prioridade da regra não for usado. O tráfego é direcionado usando a primeira regra correspondente, sem levar em conta a especificidade. Por exemplo, se você tiver uma regra usando um ouvinte básico e outra usando um ouvinte multissite, ambas na mesma porta, a regra com o ouvinte multissite deverá ser listada antes daquela com o ouvinte básico, para que a função multissite funcione conforme esperado.

Neste exemplo, você criará duas novas regras e excluirá a regra padrão criada quando você implantou o gateway de aplicativo. Você pode adicionar a regra usando 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 \
  --priority 200

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

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

Adicionar prioridade a regras de roteamento

Para garantir que regras mais específicas sejam processadas primeiro, use o campo de prioridade da regra para garantir que elas tenham prioridade mais alta. O campo de prioridade da regra deve ser definido para todas as regras de roteamento de solicitação existentes e qualquer nova regra criada posteriormente também deve ter um valor de prioridade.

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

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

Criar Conjuntos de Dimensionamento de Máquinas Virtuais

Neste exemplo, você criará três conjuntos de dimensionamento de máquinas virtuais que dão suporte a três pools de back-end no gateway de aplicativo. Os conjuntos de dimensionamento que você cria são denominados myvmss1, myvmss2, e myvmss3. Cada conjunto de dimensionamento contém duas instâncias de máquina virtual no qual você instala o 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 Ubuntu2204 \
    --admin-username azureuser \
    --admin-password Azure123456! \
    --instance-count 2 \
    --vnet-name myVNet \
    --subnet myBackendSubnet \
    --vm-sku Standard_D1_v2 \
    --upgrade-policy-mode Automatic \
    --app-gateway myAppGateway \
    --backend-pool-name $poolName
done

Instalar o 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

Criar um registro CNAME no seu domínio

Depois de criar o gateway de aplicativo com seu endereço IP público, é possível obter o endereço DNS e usá-lo para criar um registro CNAME em seu domínio. Use az network public-ip show para obter o endereço DNS do gateway de aplicativo. Copie o valor de fqdn em DNSSettings e use-o como o valor do registro CNAME a ser criado.

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

O uso de registros A não é recomendado, pois o VIP pode alterar quando o gateway de aplicativo reiniciar.

Testar o gateway de aplicativo

Digite seu nome de domínio na barra de endereços do navegador. Como http://www.contoso.com.

Test contoso site in application gateway

Altere o endereço para seu outro domínio e você verá algo parecido com o exemplo a seguir:

Test fabrikam site in application gateway

Limpar os recursos

Quando não for mais necessário, remova o grupo de recursos, o gateway de aplicativo e todos os recursos relacionados.

az group delete --name myResourceGroupAG

Próximas etapas

Criar um gateway de aplicativo com regras de roteamento baseadas em caminhos de URL