App Service konfigurálása az Application Gatewayjel
Cikk
Az Application Gateway lehetővé teszi egy App Service-alkalmazás vagy más több-bérlős szolgáltatás háttérkészlet-tagként való alkalmazását. Ebből a cikkből megtudhatja, hogyan konfigurálhat App Service-alkalmazást az Application Gateway használatával. Az Application Gateway konfigurációja az App Service elérésének módjától függően eltérő lesz:
Az első beállítás egyéni tartományt használ az Application Gatewayen és az App Service-en is a háttérrendszerben.
A második lehetőség az, hogy az Application Gateway az App Service-t az alapértelmezett tartományával, ".azurewebsites.net" utótaggal használja.
Ez a konfiguráció éles környezetben ajánlott, és megfelel annak a gyakorlatnak, hogy nem módosítja a gazdagép nevét a kérelemfolyamatban. Ahhoz, hogy ne kelljen az alapértelmezett ".azurewebsites" tartományra támaszkodnia, rendelkeznie kell egy egyéni tartománysal (és a társított tanúsítvánnyal).
Ha ugyanazt a tartománynevet társítja az Application Gatewayhez és az App Service-hez is a háttérkészletben, a kérési folyamatnak nem kell felülbírálnia a gazdagép nevét. A háttérbeli webalkalmazás az ügyfél által használt eredeti gazdagépet fogja látni.
Ez a konfiguráció a legegyszerűbb, és nem igényel egyéni tartományt. Így gyors, kényelmes beállítást tesz lehetővé.
Figyelmeztetés
Ez a konfiguráció korlátozásokkal rendelkezik. Javasoljuk, hogy tekintse át a különböző gazdagépnevek használatának következményeit az ügyfél és az Application Gateway, valamint az Application és az App Service között a háttérrendszerben. További információkért tekintse át az Architektúraközpontban található cikket: Az eredeti HTTP-gazdagépnév megőrzése a fordított proxy és a háttérbeli webalkalmazás között
Ha az App Service-hez nincs hozzárendelve egyéni tartomány, a webalkalmazás bejövő kérésének állomásfejlécét az alapértelmezett tartományra kell állítani, ".azurewebsites.net" utótaggal, különben a platform nem tudja megfelelően irányítani a kérést.
Az Application Gateway által fogadott eredeti kérés gazdagépfejléce eltér a háttérbeli App Service gazdagép nevétől.
Ebből a cikkből megtudhatja, hogyan:
DNS konfigurálása
App Service hozzáadása háttérkészletként az Application Gatewayhez
Az App Service-kapcsolat HTTP-beállításainak konfigurálása
App Service: Ha nem rendelkezik meglévő App Service-szolgáltatással, tekintse meg az App Service dokumentációját.
A Key Vaultban tárolt egyéni tartománynév és társított tanúsítvány (amelyet egy jól ismert szolgáltató írt alá). További információ a tanúsítványok Key Vaultban való tárolásáról: Oktatóanyag: Tanúsítvány importálása az Azure Key Vaultban
A felhasználó vagy ügyfél átirányítása az Application Gatewayre az egyéni tartomány használatával. Állítsa be a DNS-t egy CNAME alias használatával, amely az Application Gateway DNS-ére mutat. Az Application Gateway DNS-címe a társított nyilvános IP-cím áttekintési oldalán jelenik meg. Másik lehetőségként létrehozhat egy A rekordot, amely közvetlenül az IP-címre mutat. (Az Application Gateway 1-ben a VIRTUÁLIS IP-cím változhat, ha leállítja és elindítja a szolgáltatást, ami miatt ez a beállítás nem kívánatos.)
Az App Service-t úgy kell konfigurálni, hogy fogadja az Application Gatewayről érkező forgalmat az egyéni tartománynév használatával bejövő gazdagépként. Az egyéni tartomány App Service-be való leképezéséről további információt a következő oktatóanyagban talál: Meglévő egyéni DNS-név leképezése Azure-alkalmazás Szolgáltatáshoz A tartomány ellenőrzéséhez az App Service csak TXT rekord hozzáadását igényli. A CNAME vagy az A rekordokon nincs szükség módosításra. Az egyéni tartomány DNS-konfigurációja továbbra is az Application Gateway felé lesz irányítva.
Ha HTTPS-en keresztül szeretne kapcsolatot fogadni az App Service-hez, konfigurálja annak TLS-kötését. További információ: Egyéni DNS-név védelme TLS/SSL-kötéssel a Azure-alkalmazás Service Configure App Service szolgáltatásban az egyéni tartomány tanúsítványának lekéréséhez az Azure Key Vaultból.
Ha nem érhető el egyéni tartomány, a felhasználó vagy az ügyfél hozzáférhet az Application Gatewayhez az átjáró IP-címével vagy DNS-címével. Az Application Gateway DNS-címe a társított nyilvános IP-cím áttekintési oldalán található. Ha nincs elérhető egyéni tartomány, az azt jelenti, hogy a TLS-hez nem lesz elérhető nyilvánosan aláírt tanúsítvány az Application Gatewayen. Az ügyfelek csak http- vagy HTTPS-t használhatnak önaláírt tanúsítvánnyal, és mindkettő nem kívánatos.
Az App Service-hez való csatlakozáshoz az Application Gateway az App Service által biztosított alapértelmezett tartományt használja (utótag: "azurewebsites.net").
Az Azure Portalon válassza ki az Application Gatewayt.
A Háttérkészletek csoportban válassza ki a háttérkészletet.
A Céltípus területen válassza az App Services lehetőséget.
A Cél területen válassza ki az App Service-t.
Feljegyzés
A legördülő lista csak azokat az alkalmazásszolgáltatásokat tölti ki, amelyek ugyanabban az előfizetésben vannak, mint az Application Gateway. Ha olyan App Service-t szeretne használni, amely az Application Gateway szolgáltatástól eltérő előfizetésben található, akkor aHelyett, hogy az App Servicest választaná a Célok legördülő listában, válassza az IP-címet vagy a gazdagépnév lehetőséget, és adja meg az app service gazdagépnevét (example.azurewebsites.net).
Válassza a Mentés lehetőséget.
# Fully qualified default domain name of the web app:
$webAppFQDN = "<nameofwebapp>.azurewebsite.net"
# For Application Gateway: both name, resource group and name for the backend pool to create:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add a new Backend Pool with App Service in there:
Add-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw -BackendFqdns $webAppFQDN
# Update Application Gateway with the new added Backend Pool:
Set-AzApplicationGateway -ApplicationGateway $gw
Olyan HTTP-beállítás szükséges, amely arra utasítja az Application Gatewayt, hogy az egyéni tartománynév használatával férhessen hozzá az App Service háttérrendszeréhez. A HTTP-beállítás alapértelmezés szerint az alapértelmezett állapotadat-mintavételt használja. Bár az alapértelmezett állapotadat-mintavételek azzal a gazdagépnévvel továbbítják a kéréseket, amelyben a forgalom érkezik, az állapotminták a 127.0.0.1-et használják gazdagépnévként a háttérkészletnek, mivel nincs explicit módon definiálva állomásnév. Ezért létre kell hoznunk egy egyéni állapotmintát , amely a megfelelő egyéni tartománynévvel van konfigurálva gazdagépnévként.
HTTPS használatával csatlakozunk a háttérrendszerhez.
A HTTP-beállítások területen válasszon ki egy meglévő HTTP-beállítást, vagy adjon hozzá egy újat.
Új HTTP-beállítás létrehozásakor adjon neki nevet
Válassza a HTTPS-t a kívánt háttérprotokollként a 443-as port használatával
Győződjön meg arról, hogy a "Felülbírálás új gazdagépnévvel" értéket "Nem" értékre állítja
Válassza ki az egyéni HTTPS-állapotmintát az "Egyéni mintavétel" legördülő listában.
Olyan HTTP-beállítás szükséges, amely arra utasítja az Application Gatewayt, hogy az alapértelmezett ("azurewebsites.net") tartománynévvel férhessen hozzá az App Service háttérrendszeréhez. Ehhez a HTTP-beállítás explicit módon felülbírálja a gazdagép nevét.
A HTTP-beállítások területen válasszon ki egy meglévő HTTP-beállítást, vagy adjon hozzá egy újat.
Új HTTP-beállítás létrehozásakor adjon neki nevet
Válassza a HTTPS-t a kívánt háttérprotokollként a 443-as port használatával
Győződjön meg arról, hogy a "Felülbírálás új gazdagépnévvel" értéket "Igen" értékre állítja
A "Gazdagépnév felülbírálása" területen válassza a "Gazdagépnév kiválasztása a háttérbeli célból" lehetőséget. Ez a beállítás azt eredményezi, hogy az App Service felé irányuló kérés a háttérkészletben konfigurált "azurewebsites.net" gazdagépnevet használja.
# Configure Application Gateway to connect to App Service using the incoming hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$customProbeName = "<name for custom health probe>"
$customDomainName = "<FQDN for custom domain associated with App Service>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add custom health probe using custom domain name:
Add-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw -Protocol Https -HostName $customDomainName -Path "/" -Interval 30 -Timeout 120 -UnhealthyThreshold 3
$probe = Get-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -Probe $probe -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
# Configure Application Gateway to connect to backend using default App Service hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -PickHostNameFromBackendAddress -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
HTTP-figyelő konfigurálása
A forgalom elfogadásához konfigurálnunk kell egy figyelőt. Erről további információt az Application Gateway figyelőjének konfigurációjában talál.
Nyissa meg a "Figyelők" szakaszt, és válassza a "Figyelő hozzáadása" lehetőséget, vagy kattintson egy meglévőre a szerkesztéshez
Új figyelő esetén: adjon neki nevet
Az "Előtérbeli IP" területen válassza ki a figyelendő IP-címet
A "Port" alatt válassza a 443-at
A "Protokoll" területen válassza a "HTTPS" lehetőséget
A "Tanúsítvány kiválasztása" területen válassza a "Tanúsítvány kiválasztása a Key Vaultból" lehetőséget. További információ: A Key Vault használata, ahol további információt talál arról, hogyan rendelhet hozzá felügyelt identitást, és hogyan biztosíthat neki jogosultságokat a Key Vaulthoz.
Adjon nevet a tanúsítványnak
A felügyelt identitás kiválasztása
Válassza ki a Key Vaultot, ahonnan a tanúsítványt le szeretné szerezni
A tanúsítvány kiválasztása
A "Figyelő típusa" csoportban válassza az "Alapszintű" lehetőséget
Kattintson a "Hozzáadás" gombra a figyelő hozzáadásához
Feltéve, hogy nincs elérhető egyéni tartomány vagy társított tanúsítvány, az Application Gatewayt úgy fogjuk konfigurálni, hogy a 80-as porton figyelje a HTTP-forgalmat. Másik lehetőségként tekintse meg az önaláírt tanúsítvány létrehozásának utasításait
Nyissa meg a "Figyelők" szakaszt, és válassza a "Figyelő hozzáadása" lehetőséget, vagy kattintson egy meglévőre a szerkesztéshez
Új figyelő esetén: adjon neki nevet
Az "Előtérbeli IP" területen válassza ki a figyelendő IP-címet
A "Port" területen válassza a 80-at
A "Protokoll" területen válassza a "HTTP" lehetőséget
# This script assumes that:
# - a certificate was imported in Azure Key Vault already
# - a managed identity was assigned to Application Gateway with access to the certificate
# - there is no HTTP listener defined yet for HTTPS on port 443
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwSSLCertificateName = "<name for ssl cert to be created within Application Gateway"
$appGwSSLCertificateKeyVaultSecretId = "<key vault secret id for the SSL certificate to use>"
$httpListenerName = "<name for the listener to add>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Create SSL certificate object for Application Gateway:
Add-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw -KeyVaultSecretId $appGwSSLCertificateKeyVaultSecretId
$sslCert = Get-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw
# Fetch public ip associated with Application Gateway:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
$port = New-AzApplicationGatewayFrontendPort -Name "port_443" -Port 443
Add-AzApplicationGatewayFrontendPort -Name "port_443" -ApplicationGateway $gw -Port 443
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Https -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port -SslCertificate $sslCert
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
A HTTP nyilvános figyelője sok esetben már létezik a 80-as porton. Az alábbi szkript létrehoz egyet, ha még nem ez a helyzet.
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for the listener to add if not exists yet>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check if HTTP listener on port 80 already exists:
$port = $gw.FrontendPorts | Where-Object {$_.Port -eq 80}
$listener = $gw.HttpListeners | Where-Object {$_.Protocol.ToString().ToLower() -eq "http" -and $_.FrontendPort.Id -eq $port.Id}
if ($listener -eq $null){
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Http -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
}
Kérelem útválasztási szabályának konfigurálása
A korábban konfigurált háttérkészlet és a HTTP-beállítások használatával a kérés-útválasztási szabály beállítható úgy, hogy a figyelőből átvegye a forgalmat, és a HTTP-beállítások használatával átirányítsa azt a háttérkészletbe. Ehhez győződjön meg arról, hogy elérhető egy OLYAN HTTP- vagy HTTPS-figyelő, amely még nincs kötve egy meglévő útválasztási szabályhoz.
Nyissa meg a "Háttérállapot" szakaszt, és győződjön meg arról, hogy az "Állapot" oszlop a HTTP-beállítás és a háttérkészlet kombinációját "Kifogástalan" értékként jeleníti meg.
Most keresse meg a webalkalmazást az Application Gateway IP-címével vagy az IP-címhez társított DNS-névvel. Mindkettő az Application Gateway "Áttekintés" lapján található, mint az "Alapvető szolgáltatások" tulajdonság. Másik lehetőségként a nyilvános IP-cím erőforrás az IP-címet és a társított DNS-nevet is megjeleníti.
Az alkalmazás tesztelése során vegye figyelembe az alábbi, nem teljes listát a lehetséges tünetekről:
átirányítások, amelyek az Application Gateway helyett közvetlenül a ".azurewebsites.net" kifejezésre mutatnak
ez magában foglalja azokat a hitelesítési átirányításokat, amelyek közvetlenül próbálják elérni a ".azurewebsites.net" elemet
tartományhoz kötött cookie-k, amelyeket nem ad át a háttérrendszernek
A fenti feltételek (részletesebben az Architektúraközpontban) azt jelzik, hogy a webalkalmazás nem kezeli jól a gazdagép nevének újraírását. Ez gyakran látható. Ennek kezelésére ajánlott követni az Application Gateway és az App Service egyéni tartomány használatával történő konfigurálására vonatkozó utasításokat. Lásd még: App Service-problémák elhárítása az Application Gatewayben.
Nyissa meg a "Háttérállapot" szakaszt, és győződjön meg arról, hogy az "Állapot" oszlop a HTTP-beállítás és a háttérkészlet kombinációját "Kifogástalan" értékként jeleníti meg.
Most keresse meg a webalkalmazást az Application Gatewayhez és az App Service-hez a háttérrendszerben társított egyéni tartomány használatával.
Ellenőrizze, hogy a háttérrendszer és a HTTP-beállítások háttérállapota "Kifogástalan":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
A konfiguráció teszteléséhez az App Service-től az Application Gatewayen keresztül kérünk tartalmat az egyéni tartomány használatával:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Ellenőrizze, hogy a háttérrendszer és a HTTP-beállítások háttérállapota "Kifogástalan":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
A konfiguráció teszteléséhez az App Service-től az Application Gatewayen keresztül kérünk tartalmat az IP-cím használatával:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get ip address:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
Write-Host "Public ip address for Application Gateway is $($publicIp.IpAddress)"
Invoke-WebRequest "http://$($publicIp.IpAddress)"
Az alkalmazás tesztelése során vegye figyelembe az alábbi, nem teljes listát a lehetséges tünetekről:
átirányítások, amelyek az Application Gateway helyett közvetlenül a ".azurewebsites.net" kifejezésre mutatnak
ez magában foglalja az App Service-hitelesítés átirányításait, amelyek közvetlenül próbálják elérni a ".azurewebsites.net" szolgáltatást
tartományhoz kötött cookie-k, amelyeket nem ad át a háttérrendszernek
A fenti feltételek (részletesebben az Architektúraközpontban) azt jelzik, hogy a webalkalmazás nem kezeli jól a gazdagép nevének újraírását. Ez gyakran látható. Ennek kezelésére ajánlott követni az Application Gateway és az App Service egyéni tartomány használatával történő konfigurálására vonatkozó utasításokat. Lásd még: App Service-problémák elhárítása az Application Gatewayben.
Hozzáférés korlátozása
Az ezekben a példákban üzembe helyezett webalkalmazások nyilvános IP-címeket használnak, amelyek közvetlenül az internetről érhetők el. Ez segít a hibaelhárításban, ha egy új funkcióról tanul, és új dolgokat próbál ki. Ha azonban üzembe szeretne helyezni egy funkciót az éles környezetben, további korlátozásokat kell alkalmaznia. Vegye figyelembe a következő lehetőségeket:
Hozzáférési korlátozási szabályok konfigurálása szolgáltatásvégpontok alapján. Így zárolhatja az alkalmazás bejövő hozzáférését, így meggyőződhet arról, hogy a forráscím az Application Gatewayről származik.
Használjon Azure-alkalmazás szolgáltatás statikus IP-korlátozásait. Korlátozhatja például a webalkalmazást, hogy csak az Application Gatewayről fogadhassa a forgalmat. Az App Service IP-korlátozási funkciójával az Application Gateway VIP-címét listázhatja egyetlen hozzáféréssel rendelkező címként.