Ejercicio: Crear y configurar una instancia de Application Gateway

Completado

Application Gateway escucha en un punto de conexión las solicitudes entrantes y reenvía estas solicitudes a uno de los servidores web de su grupo de back-end. Proporcionará la configuración que describe cómo dirige el tráfico Application Gateway y cómo equilibrar la carga de solicitudes entre servidores web.

En el sistema de departamento de vehículos motorizados, deberá configurar Application Gateway para que cargue las solicitudes entrantes entre los servidores web que hospedan la aplicación web de registro de vehículos. También debe configurar Application Gateway para que detecte cuándo alguno de los servidores web tiene errores, para que pueda redirigir el tráfico a un servidor en funcionamiento. Además, deberá configurar el enrutamiento basado en ruta de acceso para enviar solicitudes a los sitios de registro de vehículos y de renovación de licencias a los servicios web de back-end adecuados.

En este ejercicio, creará una instancia de Application Gateway con un grupo de back-end de servidores web. Comprobará que Application Gateway está configurado con el agente de escucha correcto para controlar las solicitudes HTTP entrantes y que enruta estas solicitudes a un servidor web en funcionamiento.

Diagram showing the resources that will be deployed.

Configuración de la red para Application Gateway

  1. Para crear la subred privada requerida por Application Gateway, ejecute el comando siguiente. La subred se denomina appGatewaySubnet, en la red virtual vehicleAppVnet que creó en el ejercicio anterior.

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. Para crear una dirección IP pública y una etiqueta DNS para Application Gateway, ejecute el comando siguiente. La etiqueta DNS debe ser única globalmente. Para generar una etiqueta, el código siguiente usa la función $RANDOM.

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

Creación de una instancia de Application Gateway

  1. En primer lugar, use el siguiente comando para crear una directiva WAF:

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  2. Use el siguiente comando para crear una aplicación de puerta de enlace denominada vehicleAppGateway con la siguiente configuración:

    • Un grupo de servidores back-end que contenga las direcciones IP de las máquinas virtuales del servidor web.
    • Un firewall que bloquee las solicitudes malintencionadas, como las usadas por los ataques de inyección de código SQL y scripting entre sitios.
    • Un cliente de escucha temporal que escucha el puerto 8080. Este cliente de escucha se reemplazará en un paso posterior, pero es necesario para la creación de una instancia de Application Gateway.
    • Una regla que enrute estas solicitudes a los servidores web en el grupo de servidores back-end y equilibre la carga.
    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
    

    Nota:

    Este comando puede tardar varios minutos en completarse.

  3. Para encontrar las direcciones IP privadas de webServer1 y webServer2, ejecute los comandos siguientes:

    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. Después, se agregarán los grupos de servidores back-end para cada sitio web. En primer lugar, cree el grupo de servidores back-end para el sitio de registro de vehículos que se ejecuta en máquinas virtuales. Asegúrese de que las direcciones IP del siguiente comando coinciden con las direcciones IP que se generaron en los 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 crear un grupo de servidores back-end para el sitio de renovación de licencias que se ejecuta en App Service, ejecute el comando siguiente:

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. Cree un puerto de front-end para el puerto 80:

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. Para controlar las solicitudes en el puerto 80, cree el agente de escucha:

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

Agregar un sondeo de estado

  1. Cree un sondeo de estado que compruebe la disponibilidad de un servidor web. El sondeo de estado se ejecuta cada 15 segundos (--interval 15) y envía una solicitud HTTP GET a la ruta de acceso raíz de la aplicación web. Si la aplicación web no responde en 10 segundos (--timeout 10), el sondeo agota el tiempo de espera. El servidor web se marca como incorrecto si el sondeo produce un error tres veces seguidas (--threshold 3).

    Como está usando App Service como uno de los back-end, establecerá el encabezado de host en el nombre de la instancia de App Service. Sin esta configuración, App Service no responderá y no se mostrará con un estado correcto.

    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. Después, para usar el sondeo de estado que ha creado, cree la configuración de HTTP para la puerta de enlace:

    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 el enrutamiento basado en ruta de acceso

Ahora es necesario configurar el enrutamiento basado en ruta de acceso para Application Gateway. Se enrutarán las solicitudes a /VehicleRegistration/ a vmPool, y las solicitudes a /LicenseRenewal/ a appServicePool. Las solicitudes sin ningún contexto de dirección URL se enrutarán a vmPool de forma predeterminada.

  1. Para crear la asignación de ruta de acceso para vmPool, ejecute el comando siguiente:

    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 crear la regla de asignación de ruta de acceso para appServicePool, ejecute el comando siguiente:

    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. Ahora, cree una regla de enrutamiento mediante la asignación de ruta de acceso que ha creado:

    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. La última parte de la configuración es eliminar la regla creada en la implementación inicial de Application Gateway. Ahora que se ha aplicado la regla personalizada, ya no la necesita.

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

Una vez que se ha configurado todo, es hora de probarlo.