Exercício – Criar e configurar um Gateway de Aplicativo
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.
Configurar a rede para o Gateway de Aplicativo
Para criar a sub-rede privada exigida pelo Gateway de Aplicativo, execute o comando a seguir. A sub-rede é denominada
appGatewaySubnet
, na rede virtualvehicleAppVnet
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
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
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
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.
Para encontrar os endereços IP privados de
webServer1
ewebServer2
, 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
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
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
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
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
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
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.
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
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
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
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.