Exercício – Criar e configurar um Gateway de Aplicativo

Concluído

O Gateway de Aplicativo escuta um ponto de extremidade em busca das solicitações de entrada e encaminha essas solicitações para um dos servidores Web no pool de back-end. Você fornecerá a configuração que descreve como o Gateway de Aplicativo direciona o tráfego e como fazer o balanceamento de carga das solicitações entre os servidores Web.

No sistema do departamento de trânsito, você precisa configurar o Gateway de Aplicativo para fazer o balanceamento de carga das solicitações de entrada entre os servidores Web que hospedam o aplicativo Web de registro de veículos. Você também precisa configurar o Gateway de Aplicativo para detectar quando uma dos servidores Web falhar, para que ele possa redirecionar o tráfego para um servidor em funcionamento. Além disso, você precisa configurar o roteamento baseado em caminho para enviar solicitações dos sites de registro de veículos e de renovação de carteiras de motorista para os serviços Web de back-end corretos.

Neste exercício, você criará uma instância do Gateway de Aplicativo com um pool de back-end de servidores Web. Você verificará se o Gateway de Aplicativo está configurado com o ouvinte correto para lidar com as solicitações HTTP de entrada e se ele roteia essas solicitações para um servidor Web em funcionamento.

Diagrama mostra os recursos que serão implantados.

Configurar a rede para o Gateway de Aplicativo

  1. Para criar a sub-rede privada exigida pelo Gateway de Aplicativo, execute o comando a seguir. A sub-rede é denominada appGatewaySubnet, na rede virtual vehicleAppVnet que você criou no exercício anterior.

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. Para criar um endereço IP público e um rótulo DNS para o Gateway de Aplicativo, execute o comando a seguir. O rótulo DNS precisa ser globalmente exclusivo. Para gerar um rótulo, o código a seguir usa a função $RANDOM.

    az network public-ip create \
      --resource-group $RG \
      --name appGatewayPublicIp \
      --sku Standard \
      --dns-name vehicleapp${RANDOM}
    

Criar um Gateway de Aplicativo

  1. Primeiro, use o seguinte comando para criar uma política do WAF:

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  2. Use o seguinte comando para criar um gateway de aplicativo chamado vehicleAppGateway com a seguinte configuração:

    • Um pool de back-end contendo os endereços IP das máquinas virtuais do servidor Web.
    • Um firewall que bloqueia solicitações mal-intencionadas, como aqueles usadas por ataques de injeção de SQL e Cross-site Scripting.
    • Um ouvinte temporário que escuta a porta 8080. Esse ouvinte será substituído em uma etapa posterior, mas é necessário para a criação do Gateway de Aplicativo.
    • A regra que encaminha (e faz o balanceamento de carga) essas solicitações para os servidores Web no pool de back-end.
    az network application-gateway create \
    --resource-group $RG \
    --name vehicleAppGateway \
    --sku WAF_v2 \
    --capacity 2 \
    --vnet-name vehicleAppVnet \
    --subnet appGatewaySubnet \
    --public-ip-address appGatewayPublicIp \
    --http-settings-protocol Http \
    --http-settings-port 8080 \
    --private-ip-address 10.0.0.4 \
    --frontend-port 8080 \
    --waf-policy waf-pol \
    --priority 100
    

    Observação

    Esse comando pode levar vários minutos para ser concluído.

  3. Para encontrar os endereços IP privados de webServer1 e webServer2, execute os comandos a seguir:

    az vm list-ip-addresses \
      --resource-group $RG \
      --name webServer1 \
      --query [0].virtualMachine.network.privateIpAddresses[0] \
      --output tsv
    
    az vm list-ip-addresses \
      --resource-group $RG \
      --name webserver2 \
      --query [0].virtualMachine.network.privateIpAddresses[0] \
      --output tsv
    
  4. Em seguida, adicionaremos os pools de back-end para cada site. Primeiro, crie o pool de back-end para o site de registro de veículos em execução em máquinas virtuais. Verifique se os endereços IP no comando abaixo correspondem aos endereços IP que foram gerados dos comandos anteriores.

    az network application-gateway address-pool create \
      --gateway-name vehicleAppGateway \
      --resource-group $RG \
      --name vmPool \
      --servers 10.0.1.4 10.0.1.5
    
  5. Para criar um pool de back-end para o site de renovação de carteiras de motorista em execução no Serviço de Aplicativo, execute o comando a seguir:

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. Para a porta 80, crie uma porta de front-end:

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. Para tratar as solicitações na porta 80, crie o ouvinte:

    az network application-gateway http-listener create \
        --resource-group $RG \
        --name vehicleListener \
        --frontend-port port80 \
        --frontend-ip appGatewayFrontendIP \
        --gateway-name vehicleAppGateway
    

Adicionar uma investigação de integridade

  1. Crie uma investigação de integridade que testa a disponibilidade de um servidor Web. A investigação de integridade é executada a cada 15 segundos (--interval 15) e envia uma solicitação HTTP GET para o caminho raiz do aplicativo Web. Se o aplicativo Web não responder dentro de 10 segundos (--timeout 10), a investigação atingirá o tempo limite. O servidor Web será marcado como não íntegro se o teste falhar três vezes consecutivas (--threshold 3).

    Como você está usando o Serviço de Aplicativo como um dos back-ends, você definirá o cabeçalho de host como o nome do Serviço de Aplicativo. Sem essa configuração, o Serviço de Aplicativo não responderá e não será exibido como íntegro.

    az network application-gateway probe create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name customProbe \
        --path / \
        --interval 15 \
        --threshold 3 \
        --timeout 10 \
        --protocol Http \
        --host-name-from-http-settings true
    
  2. Em seguida, para usar a investigação de integridade que você criou, crie as configurações de HTTP para o gateway:

    az network application-gateway http-settings create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appGatewayBackendHttpSettings \
        --host-name-from-backend-pool true \
        --port 80 \
        --probe customProbe
    

Configurar o roteamento baseado em caminho

Agora, precisamos configurar o roteamento baseado em caminho para nosso Gateway de Aplicativo. Rotearemos as solicitações para /VehicleRegistration/ para o vmPool e as solicitações para /LicenseRenewal/ para o appServicePool. Solicitações sem nenhum contexto de URL serão roteadas para vmPool por padrão.

  1. Para criar o mapa do caminho para vmPool, execute o seguinte comando:

    az network application-gateway url-path-map create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name urlPathMap \
        --paths /VehicleRegistration/* \
        --http-settings appGatewayBackendHttpSettings \
        --default-http-settings appGatewayBackendHttpSettings \
        --address-pool vmPool \
        --default-address-pool vmPool
    
  2. Para criar a regra do mapa do caminho para appServicePool, execute o seguinte comando:

    az network application-gateway url-path-map rule create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServiceUrlPathMap \
        --paths /LicenseRenewal/* \
        --http-settings appGatewayBackendHttpSettings \
        --address-pool appServicePool \
        --path-map-name urlPathMap
    
  3. Agora, crie uma regra de roteamento usando o mapa do caminho criado:

    az network application-gateway rule create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServiceRule \
        --priority 200 \
        --http-listener vehicleListener \
        --rule-type PathBasedRouting \
        --address-pool appServicePool \
        --url-path-map urlPathMap
    
  4. A última parte da configuração é excluir a regra que foi criada quando implantamos inicialmente o Gateway de Aplicativo. Com sua regra personalizada em vigor, você não precisa mais dela.

    az network application-gateway rule delete \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name rule1
    

Com tudo configurado, é hora de testar.