Application Gateway ile App Service’i yapılandırma
Makale
Application Gateway, arka uç havuzu üyesi olarak bir App Service uygulamasına veya başka bir çok kiracılı hizmete sahip olmanıza olanak tanır. Bu makalede App Service uygulamasını Application Gateway ile yapılandırmayı öğreneceksiniz. Application Gateway yapılandırması, App Service'e nasıl erişileceğine bağlı olarak farklılık gösterir:
İlk seçenek hem Application Gateway'de hem de arka uçtaki App Service'te özel bir etki alanı kullanır.
İkinci seçenek, Application Gateway'in App Service'e varsayılan etki alanını kullanarak erişmesini sağlamaktır ve ".azurewebsites.net" olarak son eklenmiştir.
Bu yapılandırma üretim sınıfı senaryolar için önerilir ve istek akışında ana bilgisayar adını değiştirmeme uygulamasını karşılar. Varsayılan ".azurewebsites" etki alanına güvenmek zorunda kalmamak için özel bir etki alanına (ve ilişkili sertifikaya) sahip olmanız gerekir.
Aynı etki alanı adını arka uç havuzundaki Application Gateway ve App Service ile ilişkilendirerek, istek akışının konak adını geçersiz kılması gerekmez. Arka uç web uygulaması, istemci tarafından kullanılan özgün ana bilgisayarı görür.
Bu yapılandırma en kolayıdır ve özel etki alanı gerektirmez. Bu nedenle hızlı bir kolay kurulum sağlar.
Uyarı
Bu yapılandırmanın sınırlamaları vardır. İstemci ile Application Gateway arasında ve arka uçtaki Application ve App Service arasında farklı ana bilgisayar adları kullanmanın etkilerini gözden geçirmenizi öneririz. Daha fazla bilgi için Mimari Merkezi'ndeki makaleyi gözden geçirin: Ters ara sunucu ile arka uç web uygulaması arasında özgün HTTP ana bilgisayar adını koruma
App Service'in kendisiyle ilişkilendirilmiş özel bir etki alanı olmadığında, web uygulamasında gelen istekteki ana bilgisayar üst bilgisinin ".azurewebsites.net" ile son ekli varsayılan etki alanına ayarlanması gerekir, aksi takdirde platform isteği düzgün şekilde yönlendiremez.
Application Gateway tarafından alınan özgün istekteki ana bilgisayar üst bilgisi, arka uç App Service'in ana bilgisayar adından farklı olacaktır.
Bu makalede şunları nasıl yapacağınızı öğreneceksiniz:
DNS yapılandırma
App Service'i Application Gateway'e arka uç havuzu olarak ekleme
App Service bağlantısı için HTTP Ayarlarını yapılandırma
App Service: Mevcut bir App Service'iniz yoksa App Service belgelerine bakın.
Key Vault'ta depolanan özel etki alanı adı ve ilişkili sertifika (iyi bilinen bir yetkili tarafından imzalanmış). Sertifikaları Key Vault'ta depolama hakkında daha fazla bilgi için bkz . Öğretici: Azure Key Vault'ta sertifika içeri aktarma
Özel etki alanını kullanarak kullanıcıyı veya istemciyi Application Gateway'e yönlendirin. Application Gateway için DNS'ye işaret eden bir CNAME diğer adı kullanarak DNS'yi ayarlayın. Application Gateway DNS adresi, ilişkili Genel IP adresinin genel bakış sayfasında gösterilir. Alternatif olarak, doğrudan IP adresine işaret eden bir A kaydı oluşturun. (Application Gateway V1 için, hizmeti durdurup başlatırsanız VIP değişebilir ve bu da bu seçeneği istenmeyen hale getirir.)
App Service, gelen ana bilgisayar olarak özel etki alanı adını kullanarak Application Gateway'den gelen trafiği kabul etmesi için yapılandırılmalıdır. Özel bir etki alanını App Service'e eşleme hakkında daha fazla bilgi için bkz. Öğretici: Mevcut bir özel DNS adını Azure Uygulaması Hizmeti ile eşleme Etki alanını doğrulamak için App Service'in yalnızca txt kaydı eklenmesi gerekir. CNAME veya A kayıtlarında değişiklik gerekmez. Özel etki alanının DNS yapılandırması Application Gateway'e yönlendirilmiş olarak kalır.
Özel etki alanı olmadığında, kullanıcı veya istemci ağ geçidinin IP adresini veya DNS adresini kullanarak Application Gateway'e erişebilir. Application Gateway DNS adresi, ilişkili Genel IP adresinin genel bakış sayfasında bulunabilir. Özel bir etki alanının kullanılabilir olmaması, Application Gateway'de TLS için genel olarak imzalanan hiçbir sertifikanın kullanılamayacağını gösterir. İstemciler, otomatik olarak imzalanan bir sertifikayla HTTP veya HTTPS kullanmakla sınırlıdır ve her ikisi de istenmeyen bir sertifikadır.
App Service'e bağlanmak için Application Gateway, App Service tarafından sağlanan varsayılan etki alanını kullanır ("azurewebsites.net" son eklenmiştir).
Arka uç havuzları'nın altında arka uç havuzunu seçin.
Hedef türü altında Uygulama Hizmetleri'ne tıklayın.
Hedef'in altında App Service'inizi seçin.
Not
Açılan liste yalnızca Application Gateway'inizle aynı abonelikteki uygulama hizmetlerini doldurur. Application Gateway'in bulunduğu abonelikten farklı bir abonelikte yer alan bir uygulama hizmetini kullanmak istiyorsanız, Hedefler açılan listesinde Uygulama Hizmetleri'niseçmek yerine IP adresi veya ana bilgisayar adı seçeneğini belirleyin ve uygulama hizmetinin ana bilgisayar adını (example.azurewebsites.net) girin.
Kaydet'i seçin.
# 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
Application Gateway'e özel etki alanı adını kullanarak App Service arka ucuna erişmesini belirten bir HTTP Ayarı gereklidir. HTTP Ayarı varsayılan olarak varsayılan sistem durumu araştırmasını kullanır. Varsayılan sistem durumu yoklamaları, trafiğin alındığı konak adıyla istekleri iletse de, hiçbir konak adı açıkça tanımlanmadığından sistem durumu yoklamaları ana bilgisayar adı olarak 127.0.0.1'i Arka Uç Havuzu'na kullanır. Bu nedenle, ana bilgisayar adı olarak doğru özel etki alanı adıyla yapılandırılmış bir özel durum araştırması oluşturmamız gerekir.
HTTPS kullanarak arka uça bağlanacağız.
HTTP Ayarları'nın altında var olan bir HTTP ayarını seçin veya yenisini ekleyin.
Yeni bir HTTP Ayarı oluştururken buna bir ad verin
443 numaralı bağlantı noktasını kullanarak istenen arka uç protokolü olarak HTTPS'yi seçin
"Yeni ana bilgisayar adıyla geçersiz kıl" seçeneğini "Hayır" olarak ayarladığınızdan emin olun
"Özel yoklama" açılan listesinden özel HTTPS sistem durumu araştırmasını seçin.
Application Gateway'e varsayılan ("azurewebsites.net") etki alanı adını kullanarak App Service arka ucuna erişmesini belirten bir HTTP Ayarı gereklidir. Bunu yapmak için HTTP Ayarı, konak adını açıkça geçersiz kılar.
HTTP Ayarları'nın altında var olan bir HTTP ayarını seçin veya yenisini ekleyin.
Yeni bir HTTP Ayarı oluştururken buna bir ad verin
443 numaralı bağlantı noktasını kullanarak istenen arka uç protokolü olarak HTTPS'yi seçin
"Yeni ana bilgisayar adıyla geçersiz kıl" seçeneğini "Evet" olarak ayarladığınızdan emin olun
"Ana bilgisayar adı geçersiz kılma" bölümünde "Arka uç hedefinden ana bilgisayar adını seçin" seçeneğini belirleyin. Bu ayar, App Service'e yönelik isteğin Arka Uç Havuzu'nda yapılandırıldığı gibi "azurewebsites.net" ana bilgisayar adını kullanmasına neden olur.
# 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
"Dinleyiciler" bölümünü açın ve "Dinleyici ekle" seçeneğini belirleyin veya düzenlemek için mevcut bir bölüme tıklayın
Yeni bir dinleyici için: Ona bir ad verin
"Ön uç IP"nin altında, dinlenecek IP adresini seçin
"Bağlantı noktası" altında 443'e tıklayın
"Protokol" altında "HTTPS" öğesini seçin
"Sertifika seçin" bölümünde "Key Vault'tan bir sertifika seçin" seçeneğini belirleyin. Daha fazla bilgi için bkz . Yönetilen kimlik atama ve Key Vault'unuza hak sağlama hakkında daha fazla bilgi bulabileceğiniz Key Vault'u kullanma.
Sertifikaya bir ad verin
Yönetilen Kimlik'i seçin
Sertifikanın alınacağı Anahtar Kasası'nı seçin
Sertifikayı seçin
"Dinleyici Türü" altında "Temel" öğesini seçin
Dinleyiciyi eklemek için "Ekle"ye tıklayın
Kullanılabilir özel etki alanı veya ilişkili sertifika olmadığını varsayarsak Application Gateway'i 80 numaralı bağlantı noktasındaKI HTTP trafiğini dinleyecek şekilde yapılandıracağız. Alternatif olarak, otomatik olarak imzalanan sertifika oluşturma yönergelerine bakın
"Dinleyiciler" bölümünü açın ve "Dinleyici ekle" seçeneğini belirleyin veya düzenlemek için mevcut bir bölüme tıklayın
Yeni bir dinleyici için: Ona bir ad verin
"Ön uç IP"nin altında, dinlenecek IP adresini seçin
"Bağlantı noktası" altında 80'i seçin
"Protokol" altında "HTTP" seçeneğini belirleyin
# 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
Çoğu durumda bağlantı noktası 80'de HTTP için genel dinleyici zaten olacaktır. Aşağıdaki betik, henüz böyle bir durum söz konusu değilse bir betik oluşturur.
$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
}
İstek yönlendirme kuralını yapılandırma
Daha önce yapılandırılmış Arka Uç Havuzu ve HTTP Ayarları kullanılarak, istek yönlendirme kuralı bir dinleyiciden trafik alacak ve HTTP Ayarları kullanılarak Arka Uç Havuzu'na yönlendirilecek şekilde ayarlanabilir. Bunun için, mevcut bir yönlendirme kuralına bağlı olmayan bir HTTP veya HTTPS dinleyiciniz olduğundan emin olun.
"Arka uç durumu" bölümünü açın ve "Durum" sütununun HTTP Ayarı ve Arka Uç Havuzu birleşiminin "Sağlıklı" olarak gösterildiğinden emin olun.
Şimdi Application Gateway IP Adresini veya IP Adresi için ilişkili DNS adını kullanarak web uygulamasına göz atın. Her ikisi de Application Gateway "Genel Bakış" sayfasında "Essentials" altında bir özellik olarak bulunabilir. Alternatif olarak, Genel IP Adresi kaynağı ip adresini ve ilişkili DNS adını da gösterir.
Uygulamayı test ederken aşağıdaki kapsamlı olmayan olası belirtiler listesine dikkat edin:
Application Gateway yerine doğrudan ".azurewebsites.net" öğesini işaret eden yeniden yönlendirmeler
Bu, doğrudan ".azurewebsites.net" erişimini deneyen kimlik doğrulama yeniden yönlendirmelerini içerir
etki alanına bağlı tanımlama bilgileri arka uca geçirilmiyor
Yukarıdaki koşullar (Mimari Merkezi'nde daha ayrıntılı olarak açıklanmıştır) web uygulamanızın ana bilgisayar adını yeniden yazmakla iyi ilgilenmediğini gösterir. Bu yaygın olarak görülür. Bununla başa çıkmanın önerilen yolu, özel bir etki alanı kullanarak App Service ile Application Gateway'i yapılandırma yönergelerini izlemektir. Ayrıca bkz. Application Gateway'de App Service sorunlarını giderme.
"Arka uç durumu" bölümünü açın ve "Durum" sütununun HTTP Ayarı ve Arka Uç Havuzu birleşiminin "Sağlıklı" olarak gösterildiğinden emin olun.
Şimdi hem Application Gateway hem de arka uçtaki App Service ile ilişkilendirdiğiniz özel etki alanını kullanarak web uygulamasına göz atın.
Arka uç ve HTTP Ayarları için arka uç durumunun "Sağlıklı" olarak gösterilip gösterilmediğini denetleyin:
$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
Yapılandırmayı test etmek için özel etki alanını kullanarak Application Gateway aracılığıyla App Service'ten içerik isteğinde bulunacağız:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Arka uç ve HTTP Ayarları için arka uç durumunun "Sağlıklı" olarak gösterilip gösterilmediğini denetleyin:
$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
Yapılandırmayı test etmek için APP Service'ten IP adresini kullanarak Application Gateway aracılığıyla içerik isteğinde bulunacağız:
$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)"
Uygulamayı test ederken aşağıdaki kapsamlı olmayan olası belirtiler listesine dikkat edin:
Application Gateway yerine doğrudan ".azurewebsites.net" öğesini işaret eden yeniden yönlendirmeler
Yukarıdaki koşullar (Mimari Merkezi'nde daha ayrıntılı olarak açıklanmıştır) web uygulamanızın ana bilgisayar adını yeniden yazmakla iyi ilgilenmediğini gösterir. Bu yaygın olarak görülür. Bununla başa çıkmanın önerilen yolu, özel bir etki alanı kullanarak App Service ile Application Gateway'i yapılandırma yönergelerini izlemektir. Ayrıca bkz. Application Gateway'de App Service sorunlarını giderme.
Erişimi kısıtlama
Bu örneklerde dağıtılan web uygulamaları, doğrudan İnternet'ten erişilebilen genel IP adreslerini kullanır. Bu, yeni bir özellik hakkında bilgi edinirken ve yeni şeyler denerken sorun gidermeye yardımcı olur. Ancak bir özelliği üretim ortamına dağıtmayı planlıyorsanız daha fazla kısıtlama eklemek istersiniz. Aşağıdaki seçenekleri göz önünde bulundurun:
Hizmet uç noktalarına göre Erişim kısıtlama kurallarını yapılandırın. Bu, kaynak adresin Application Gateway'den olduğundan emin olmak için uygulamaya gelen erişimi kilitlemenize olanak tanır.
Azure Uygulaması Hizmeti statik IP kısıtlamalarını kullanın. Örneğin, web uygulamasını yalnızca uygulama ağ geçidinden trafik alacak şekilde kısıtlayabilirsiniz. Uygulama ağ geçidi VIP'sini erişimi olan tek adres olarak listelemek için app service IP kısıtlama özelliğini kullanın.