Esercitazione: Creare un gateway applicazione con reindirizzamento basato sui percorsi URL tramite l'interfaccia della riga di comando di Azure

È possibile usare l'interfaccia della riga di comando di Azure per configurare regole di routing basato su percorsi URL quando si crea un gateway applicazione. In questa esercitazione si creano pool back-end usando i set di scalabilità di macchine virtuali. Si creano quindi le regole di routing degli URL per garantire che il traffico Web venga reindirizzato nel pool back-end appropriato.

In questa esercitazione apprenderai a:

  • Configurare la rete
  • Creare un gateway applicazione
  • Aggiungere i listener e le regole di routing
  • Creare set di scalabilità di macchine virtuali per i pool back-end

L'esempio seguente illustra il traffico del sito in arrivo dalle porte 8080 e 8081 e indirizzato agli stessi pool back-end:

URL routing example

Se si preferisce, è possibile completare questa esercitazione usando Azure PowerShell.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

  • Per questa esercitazione è necessaria la versione 2.0.4 o successiva dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.

Creare un gruppo di risorse

Un gruppo di risorse è un contenitore logico in cui vengono distribuite e gestite le risorse di Azure. Creare un gruppo di risorse usando az group create.

L'esempio seguente crea un gruppo di risorse denominato myResourceGroupAG nella località eastus.

az group create --name myResourceGroupAG --location eastus

Creare risorse di rete

Creare la rete virtuale denominata myVNet e la subnet denominata myAGSubnet usando az network vnet create. È quindi possibile aggiungere la subnet denominata myBackendSubnet necessaria per i server back-end tramite az network vnet subnet create. Creare l'indirizzo IP pubblico denominato myAGPublicIPAddress tramite 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

Creare un gateway applicazione

Usare az network application-gateway create per creare il gateway applicazione denominato myAppGateway. Quando si crea un gateway applicazione usando l'interfaccia della riga di comando di Azure, specificare le informazioni di configurazione, ad esempio le impostazioni relative a capacità, SKU e HTTP. Il gateway applicazione viene assegnato alla subnet myAGSubnet e all'indirizzo IP pubblico myPublicIPAddress creati in precedenza.

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 100

Il processo di creazione del gateway applicazione può richiedere alcuni minuti. Dopo aver creato il gateway applicazione, saranno disponibili le nuove funzionalità seguenti:

  • appGatewayBackendPool: un gateway applicazione deve avere almeno un pool di indirizzi back-end.
  • appGatewayBackendHttpSettings: specifica che per le comunicazioni vengono usati la porta 80 e il protocollo HTTP.
  • appGatewayHttpListener: il listener predefinito associato ad appGatewayBackendPool.
  • appGatewayFrontendIP: assegna myAGPublicIPAddress ad appGatewayHttpListener.
  • rule1: regola di routing predefinita associata ad appGatewayHttpListener.

Aggiunta di pool back-end e porte

È possibile aggiungere i pool back-end denominati imagesBackendPool e videoBackendPool al gateway applicazione usando az network application-gateway address-pool create. Aggiungere le porte front-end per i pool usando az network application-gateway frontend-port create.

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name imagesBackendPool

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name videoBackendPool

az network application-gateway frontend-port create \
  --port 8080 \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name bport

az network application-gateway frontend-port create \
  --port 8081 \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name rport

Aggiungere listener e regole

Aggiungere i listener

Aggiungere i listener back-end denominati backendListener e redirectedListener necessari per instradare il traffico usando az network application-gateway http-listener create.

az network application-gateway http-listener create \
  --name backendListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port bport \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway

az network application-gateway http-listener create \
  --name redirectedListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port rport \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway

Aggiunta della mappa del percorso URL predefinito

I mapping dei percorsi URL garantiscono che URL specifici vengano instradati a determinati pool back-end. È possibile creare mappe di percorso URL denominate imagePathRule e videoPathRule tramite az network application-gateway url-path-map create e az network application-gateway url-path-map rule create

az network application-gateway url-path-map create \
  --gateway-name myAppGateway \
  --name urlpathmap \
  --paths /images/* \
  --resource-group myResourceGroupAG \
  --address-pool imagesBackendPool \
  --default-address-pool appGatewayBackendPool \
  --default-http-settings appGatewayBackendHttpSettings \
  --http-settings appGatewayBackendHttpSettings \
  --rule-name imagePathRule

az network application-gateway url-path-map rule create \
  --gateway-name myAppGateway \
  --name videoPathRule \
  --resource-group myResourceGroupAG \
  --path-map-name urlpathmap \
  --paths /video/* \
  --address-pool videoBackendPool

Aggiunta della configurazione di reindirizzamento

È possibile configurare il reindirizzamento per il listener usando az network application-gateway redirect-config create.

az network application-gateway redirect-config create \
  --gateway-name myAppGateway \
  --name redirectConfig \
  --resource-group myResourceGroupAG \
  --type Found \
  --include-path true \
  --include-query-string true \
  --target-listener backendListener

Aggiunta della mappa del percorso URL di reindirizzamento

az network application-gateway url-path-map create \
  --gateway-name myAppGateway \
  --name redirectpathmap \
  --paths /images/* \
  --resource-group myResourceGroupAG \
  --redirect-config redirectConfig \
  --rule-name redirectPathRule

Aggiungere le regole di routing

Le regole di routing associano le mappe dei percorsi URL ai listener creati. È possibile aggiungere le regole denominate defaultRule e redirectedRule usando az network application-gateway rule create.

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name defaultRule \
  --resource-group myResourceGroupAG \
  --http-listener backendListener \
  --rule-type PathBasedRouting \
  --url-path-map urlpathmap \
  --address-pool appGatewayBackendPool \
  --priority 100

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name redirectedRule \
  --resource-group myResourceGroupAG \
  --http-listener redirectedListener \
  --rule-type PathBasedRouting \
  --url-path-map redirectpathmap \
  --address-pool appGatewayBackendPool \
  --priority 100

Creare set di scalabilità di macchine virtuali

In questo esempio si creano tre set di scalabilità di macchine virtuali che supportano i tre pool back-end creati. I set di scalabilità creati sono denominati myvmss1, myvmss2 e myvmss3. Ogni set di scalabilità contiene due istanze di macchina virtuale in cui si installa NGINX.

Sostituire <azure-user> e <password> con un nome utente e una password di propria scelta.

for i in `seq 1 3`; do
  if [ $i -eq 1 ]
  then
    poolName="appGatewayBackendPool"
  fi
  if [ $i -eq 2 ]
  then
    poolName="imagesBackendPool"
  fi
  if [ $i -eq 3 ]
  then
    poolName="videoBackendPool"
  fi

  az vmss create \
    --name myvmss$i \
    --resource-group myResourceGroupAG \
    --image Ubuntu2204 \
    --admin-username <azure-user> \
    --admin-password <password> \
    --instance-count 2 \
    --vnet-name myVNet \
    --subnet myBackendSubnet \
    --vm-sku Standard_DS2 \
    --upgrade-policy-mode Automatic \
    --app-gateway myAppGateway \
    --backend-pool-name $poolName
done

Installare NGINX

for i in `seq 1 3`; 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

Testare il gateway applicazione

Per ottenere l'indirizzo IP pubblico del gateway applicazione, usare az network public-ip show. Copiare l'indirizzo IP pubblico e quindi incollarlo nella barra degli indirizzi del browser. Ad esempio http://40.121.222.19, http://40.121.222.19:8080/images/test.htm, http://40.121.222.19:8080/video/test.htm oppure http://40.121.222.19:8081/images/test.htm.

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

Test base URL in application gateway

Modificare l'URL in http://<indirizzo-ip>:8080/video/test.htm, sostituendo <indirizzo-ip> con l'indirizzo IP desiderato per ottenere qualcosa di simile all'esempio seguente:

Test images URL in application gateway

Modificare l'URL in http://<indirizzo-ip>:8080/video/test.html sostituendo <indirizzo-ip> con l'indirizzo IP usato come nell'esempio seguente:

Test video URL in application gateway

A questo punto modificare l'URL in http://<indirizzo-ip>:8081/images/test.htm e sostituendo <indirizzo-ip> con l'indirizzo IP usato dovrebbe essere possibile visualizzare il traffico reindirizzato al pool back-end delle immagini in http://<indirizzo-ip>:8080/images.

Pulire le risorse

Quando non sono più necessari, rimuovere il gruppo di risorse, il gateway applicazione e tutte le risorse correlate.

az group delete --name myResourceGroupAG

Passaggi successivi