Übung: Erstellen und Konfigurieren einer Application Gateway-Instanz
Application Gateway lauscht an einem Endpunkt auf eingehende Anforderungen und leitet diese dann an einen der Webserver im Back-End-Pool weiter. Sie stellen die Konfiguration bereit, die beschreibt, wie Application Gateway den Datenverkehr weiterleitet und wie der Lastenausgleich für die Anforderungen auf den Webserver durchgeführt wird.
Im System der Kraftfahrzeugbehörde müssen Sie Application Gateway so konfigurieren, das für eingehende Anforderung ein Lastenausgleich auf die Webserver durchgeführt wird, die die Web-App für die Fahrzeugregistrierung hosten. Außerdem müssen Sie Application Gateway so konfigurieren, dass erkannt wird, wenn ein Webserver ausfällt, damit der Datenverkehr auf einen funktionierenden Server umgeleitet wird. Darüber hinaus müssen Sie das pfadbasierte Routing so konfigurieren, dass Anforderungen an die Website für die Fahrzeugregistrierung und die Führerscheinerneuerung an die richtigen Back-End-Webdienste gesendet werden.
In dieser Übung erstellen Sie eine Application Gateway-Instanz mit einem Back-End-Pool von Webservern. Sie überprüfen, ob Application Gateway mit dem richtigen Listener konfiguriert ist, damit eingehende HTTP-Anforderungen verarbeitet und an einen funktionierenden Webserver weitergeleitet werden.
Konfigurieren des Netzwerks für Application Gateway
Führen Sie den folgenden Befehl aus, um das private Subnetz zu erstellen, das für Application Gateway erforderlich ist. Das Subnetz heißt
appGatewaySubnet
und befindet sich im virtuellen NetzwerkvehicleAppVnet
, das Sie in der vorherigen Übung erstellt haben.az network vnet subnet create \ --resource-group $RG \ --vnet-name vehicleAppVnet \ --name appGatewaySubnet \ --address-prefixes 10.0.0.0/24
Führen Sie den folgenden Befehl aus, um eine öffentliche IP-Adresse und DNS-Bezeichnung für Application Gateway zu erstellen. Die DNS-Bezeichnung muss global eindeutig sein. Im folgenden Code wird die
$RANDOM
-Funktion verwendet, um eine Bezeichnung zu generieren.az network public-ip create \ --resource-group $RG \ --name appGatewayPublicIp \ --sku Standard \ --dns-name vehicleapp${RANDOM}
Erstellen einer Application Gateway-Instanz
Verwenden Sie zunächst den folgenden Befehl, um eine WAF-Richtlinie zu erstellen:
az network application-gateway waf-policy create \ --name waf-pol \ --resource-group $RG \ --type OWASP \ --version 3.2
Verwenden Sie den folgenden Befehl, um eine Application Gateway-Instanz namens
vehicleAppGateway
mit der folgenden Konfiguration zu erstellen:- Ein Back-End-Pool, der die IP-Adressen der Webserver-VMs enthält
- Eine Firewall, die böswillige Anforderungen blockiert, die z. B. bei Angriffen durch Einschleusung von SQL-Befehlen oder durch Cross-Site Scripting verwendet werden
- Ein temporärer Listener, der ah Port 8080 lauscht. Dieser Listener wird in einem späteren Schritt ersetzt, wird jedoch für die Erstellung einer Application Gateway-Instanz benötigt.
- Eine Regel, mit der diese Anforderungen an die Webserver im Back-End-Pool weitergeleitet werden (und der Lastenausgleich durchgeführt wird)
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
Hinweis
Die Ausführung dieses Befehls kann mehrere Minuten dauern.
Führen Sie die folgenden Befehle aus, um die privaten IP-Adressen von
webServer1
undwebServer2
zu ermitteln.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
Als Nächstes fügen Sie die Back-End-Pools für alle Websites hinzu. Erstellen Sie zunächst den Back-End-Pool für die Fahrzeugregistrierungswebsite auf VMs. Stellen Sie sicher, dass die IP-Adressen im unten stehenden Befehl den IP-Adressen entsprechen, die von den vorherigen Befehl ausgegeben wurden.
az network application-gateway address-pool create \ --gateway-name vehicleAppGateway \ --resource-group $RG \ --name vmPool \ --servers 10.0.1.4 10.0.1.5
Führen Sie den folgenden Befehl aus, um einen Back-End-Pool für die Führerscheinerneuerungswebsite zu erstellen, die in App Service ausgeführt wird.
az network application-gateway address-pool create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServicePool \ --servers $APPSERVICE.azurewebsites.net
Erstellen Sie für Port 80 einen Front-End-Port.
az network application-gateway frontend-port create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name port80 \ --port 80
Erstellen Sie den Listener zum Verarbeiten von Anforderungen an Port 80.
az network application-gateway http-listener create \ --resource-group $RG \ --name vehicleListener \ --frontend-port port80 \ --frontend-ip appGatewayFrontendIP \ --gateway-name vehicleAppGateway
Hinzufügen eines Integritätstests
Erstellen Sie einen Integritätstest, der die Verfügbarkeit eines Webservers prüft. Der Integritätstest wird alle 15 Sekunden (
--interval 15
) ausgeführt und sendet eine HTTP GET-Anforderung an den Stammpfad der Web-App. Wenn die Web-App nicht innerhalb von 10 Sekunden (--timeout 10
) reagiert, tritt für den Test ein Timeout auf. Der Webserver wird als fehlerhaft markiert, wenn der Test dreimal in Folge fehlschlägt (--threshold 3
).Da Sie App Service als Back-End verwenden, legen Sie den Namen der App Service-Instanz als Hostheader fest. Ohne diese Einstellung reagiert App Service nicht und wird deshalb nicht als fehlerfrei angezeigt.
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
Erstellen Sie zum Verwenden des erstellten Integritätstests als nächstes die HTTP-Einstellungen für das 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
Konfigurieren des pfadbasierten Routings
Nun müssen Sie das pfadbasierte Routing für die Application Gateway-Instanz konfigurieren. Anforderungen an /VehicleRegistration/ leiten Sie an den vmPool weiter und Anforderungen an /LicenseRenewal/ an den appServicePool. Alle Anforderungen ohne URL-Kontext werden standardmäßig an den vmPool weitergeleitet.
Führen Sie den folgenden Befehl aus, um die Pfadzuordnung für vmPool zu erstellen:
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
Führen Sie den folgenden Befehl aus, um die Pfadzuordnungsregel für appServicePool zu erstellen:
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
Erstellen Sie jetzt mit der erstellten Pfadzuordnung eine neue Routingregel:
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
Der letzte Konfigurationsschritt besteht darin, die Regel zu löschen, die wir bei der ersten Bereitstellung der Application Gateway-Instanz erstellt haben. Sie wird nicht mehr benötigt, da Sie nun über die benutzerdefinierte Regel verfügen.
az network application-gateway rule delete \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name rule1
Da nun alles eingerichtet ist, ist es höchste Zeit, die Application Gateway-Instanz zu testen.