Exercice - Créer et configurer une instance Application Gateway

Effectué

Application Gateway écoute les requêtes entrantes d’un point de terminaison, puis les transfère vers l’un des serveurs web de son pool de back-ends. Vous allez fournir la configuration qui décrit comment Application Gateway dirige le trafic et comment équilibrer la charge des requêtes entre les serveurs web.

Dans le système du service des véhicules, vous devez configurer Application Gateway pour équilibrer la charge des requêtes entrantes sur les serveurs web hébergeant l’application web d’obtention des cartes grises. Vous devez également configurer Application Gateway pour qu’il puisse, en cas d’échec de l’un des serveurs web, rediriger le trafic vers un serveur qui fonctionne. En outre, vous devez configurer le routage basé sur le chemin pour envoyer des requêtes concernant les sites d’obtention des cartes grises et de renouvellement des permis de conduire aux services web back-end appropriés.

Dans cet exercice, vous allez créer une instance d’Application Gateway avec un pool de back-ends de serveurs web. Vous allez vérifier qu’Application Gateway est configuré avec l’écouteur approprié permettant de gérer les requêtes HTTP entrantes, et qu’il route ces requêtes vers un serveur web opérationnel.

Diagram showing the resources that will be deployed.

Configurer le réseau pour Application Gateway

  1. Pour créer le sous-réseau privé dont a besoin Application Gateway, exécutez la commande suivante. Sur le réseau virtuel vehicleAppVnet que vous avez créé dans l’exercice précédent, le sous-réseau se nomme appGatewaySubnet.

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. Pour créer une adresse IP publique et une étiquette DNS pour Application Gateway, exécutez la commande suivante. L’étiquette DNS doit être globalement unique. Pour générer une étiquette, le code suivant utilise la fonction $RANDOM.

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

Créer une instance Application Gateway

  1. Tout d’abord, utilisez la commande suivante pour créer une stratégie WAF :

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  2. Utilisez la commande suivante pour créer une passerelle applicative nommée vehicleAppGateway avec la configuration suivante :

    • Un pool de back-end contenant les adresses IP des machines virtuelles de serveur web.
    • un pare-feu qui bloque les requêtes malveillantes, comme celles utilisées lors des attaques par injection de code SQL et des attaques par scripts intersites (XSS).
    • Écouteur temporaire qui écoute le port 8080. L’écouteur sera remplacé dans une étape ultérieure. Toutefois, il est nécessaire pour la création de l’instance Application Gateway.
    • une règle qui route ces requêtes vers les serveurs web du pool de back-ends (et qui équilibre leur charge).
    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
    

    Notes

    Cette commande peut durer plusieurs minutes.

  3. Pour rechercher les adresses IP privées de webServer1 et webServer2, exécutez les commandes suivantes :

    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. Ensuite, nous allons ajouter les pools de back-ends pour chaque site web. Tout d’abord, créez le pool de back-end pour le site d’obtention des cartes grises s’exécutant sur des machines virtuelles. Assurez-vous que les adresses IP de la commande ci-dessous correspondent aux adresses IP générées à partir des commandes précédentes.

    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. Pour créer un pool de back-end pour le site de renouvellement des permis de conduire s’exécutant sur App Service, exécutez la commande suivante :

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. Pour le port 80, créez un port front-end :

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. Pour gérer les requêtes sur le port 80, créez l’écouteur :

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

Ajouter une sonde d’intégrité

  1. Créez une sonde d’intégrité qui teste la disponibilité des serveurs web. La sonde d’intégrité s’exécute toutes les 15 secondes (--interval 15) et envoie une requête HTTP GET au chemin racine de l’application web. Si l’application web ne répond pas dans les 10 secondes (--timeout 10), la sonde arrive à expiration. Le serveur web est marqué comme non sain si la sonde échoue trois fois de suite (--threshold 3).

    Étant donné que nous utilisons App Service comme l’un de vos back-ends, vous allez définir l’en-tête d’hôte sur le nom de l’instance App Service. Sans ce paramètre, App Service ne répond pas et n’est pas considéré comme étant sain.

    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. Ensuite, pour utiliser la sonde d’intégrité créée, créez les paramètres HTTP pour la passerelle :

    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
    

Configurer le routage basé sur le chemin

Nous devons maintenant configurer le routage basé sur le chemin pour Application Gateway. Nous allons router les requêtes envoyées à /VehicleRegistration/ vers vmPool, et les requêtes envoyées à /LicenseRenewal/ vers appServicePool. Toutes les requêtes sans contexte d’URL seront routées vers le pool de machines virtuelles (vmPool) par défaut.

  1. Pour créer le mappage de chemin pour vmPool, exécutez la commande suivante :

    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. Pour créer la règle de mappage de chemin pour appServicePool, exécutez la commande suivante :

    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. Maintenant, créez une nouvelle règle de routage à l’aide du mappage de chemin que vous avez créé :

    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. Le dernier élément de configuration consiste à supprimer la règle que nous avons créée lorsque nous avons déployé Application Gateway pour la première fois. Avec votre règle personnalisée en vigueur, vous en avez plus besoin.

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

Maintenant que tout est configuré, nous pouvons passer au test.