Настройка Службы приложений с помощью Шлюза приложений
Статья
Шлюз приложений позволяет использовать приложение Служба приложений или другую мультитенантную службу в качестве члена внутреннего пула. В этой статье вы узнаете, как настраивать приложения службы приложений с помощью шлюза приложений. Конфигурация Шлюз приложений будет отличаться в зависимости от способа доступа Служба приложений:
Первый вариант использует личный домен как на Шлюз приложений, так и на Служба приложений в серверной части.
Второй вариант — иметь Шлюз приложений доступ Служба приложений с помощью своего домена по умолчанию, суффиксированного как ".azurewebsites.net".
Эта конфигурация рекомендуется для сценариев производственного уровня и соответствует практике не изменять имя узла в потоке запросов. Необходимо иметь личный домен (и связанный сертификат), чтобы избежать необходимости полагаться на домен azurewebsites по умолчанию.
Связывание одного и того же имени домена с Шлюз приложений и Служба приложений в серверном пуле не требует переопределения имени узла. Серверное веб-приложение увидит исходный узел, который использовался клиентом.
Эта конфигурация является самой простой и не требует личного домена. Таким образом, это позволяет быстро настроить.
Если Служба приложений не связан с ним личный домен, заголовок узла для входящего запроса в веб-приложении должен быть задан в домен по умолчанию, суффикс с помощью ".azurewebsites.net" или другой платформы не сможет правильно перенаправить запрос.
Заголовок узла в исходном запросе, полученном Шлюз приложений, будет отличаться от имени узла серверной Служба приложений.
Из этой статьи вы узнаете о следующем.
Настройка DNS
Добавление Служба приложений в серверный пул в Шлюз приложений
Настройка параметров HTTP для подключения к Служба приложений
Имя личного домена и связанный сертификат (подписанный известным центром), хранящийся в Key Vault. Дополнительные сведения о хранении сертификатов в Key Vault см. в руководстве по импорту сертификата в Azure Key Vault.
Перенаправите пользователя или клиента в Шлюз приложений с помощью личного домена. Настройте DNS с помощью псевдонима CNAME, указываемого на DNS для Шлюз приложений. Шлюз приложений DNS-адрес отображается на странице обзора связанного общедоступного IP-адреса. Кроме того, создайте запись A, указывающую на IP-адрес напрямую. (Для Шлюз приложений версии 1 виртуальный IP-адрес может измениться при остановке и запуске службы, что делает этот параметр нежелательным.)
Служба приложений следует настроить таким образом, чтобы он принимал трафик из Шлюз приложений с помощью имени личного домена в качестве входящего узла. Дополнительные сведения о сопоставлении личного домена с Служба приложений см. в руководстве по сопоставлению существующего пользовательского DNS-имени с приложение Azure службой для проверки домена, Служба приложений требуется только добавить запись TXT. Для записи CNAME или A-records не требуется никаких изменений. Конфигурация DNS для личного домена будет оставаться направлена на Шлюз приложений.
Если личный домен недоступен, пользователь или клиент могут получить доступ к Шлюз приложений с помощью IP-адреса шлюза или DNS-адреса. Шлюз приложений DNS-адрес можно найти на странице обзора связанного общедоступного IP-адреса. Отсутствие личного домена означает, что общедоступный подписанный сертификат не будет доступен для TLS на Шлюз приложений. Клиенты могут использовать ПРОТОКОЛ HTTP или HTTPS с самозаверяющий сертификат, оба из которых являются нежелательными.
Чтобы подключиться к Служба приложений, Шлюз приложений использует домен по умолчанию, как указано Служба приложений (суффикс "azurewebsites.net").
Добавление службы приложений в качестве серверного пула
В разделе Тип целевого объекта выберите Службы приложений.
В разделе Целевой объект выберите свою Службу приложений Azure.
Примечание.
В раскрывающемся списке отображаются только те службы приложений, которые находятся в той же подписке, что и Шлюз приложений. Если вы хотите использовать службу приложений, которая находится в подписке, отличной от подписки, в которой находится Шлюз приложений, вместо выбора Служба приложений в раскрывающемся списке "Цели", выберите IP-адрес или имя узла и введите имя узла (example.azurewebsites.net) службы приложений.
Выберите Сохранить.
# 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
Изменение параметров HTTP для Службы приложений Azure
Параметр HTTP требуется, чтобы Шлюз приложений получить доступ к серверной части Служба приложений с помощью имени личного домена. Параметр HTTP по умолчанию будет использовать пробу работоспособности по умолчанию. Хотя пробы работоспособности по умолчанию будут пересылать запросы с именем узла, в котором получен трафик, пробы работоспособности будут использовать 127.0.0.1 в качестве имени узла в серверный пул, так как имя узла явно не определено. По этой причине необходимо создать настраиваемую пробу работоспособности, настроенную с правильным именем личного домена в качестве имени узла.
Мы подключимся к серверной части с помощью HTTPS.
В разделе "Параметры HTTP" выберите существующий параметр HTTP или добавьте новый.
При создании нового параметра HTTP присвойте ему имя
Выберите HTTPS в качестве требуемого внутреннего протокола с помощью порта 443
Обязательно установите для параметра "Переопределение с новым именем узла" значение "Нет"
Выберите настраиваемую пробу работоспособности HTTPS в раскрывающемся списке "Настраиваемая проба".
Параметр HTTP требуется, чтобы Шлюз приложений получить доступ к серверной части Служба приложений с помощью имени домена по умолчанию ("azurewebsites.net") . Для этого параметр HTTP явно переопределит имя узла.
В разделе "Параметры HTTP" выберите существующий параметр HTTP или добавьте новый.
При создании нового параметра HTTP присвойте ему имя
Выберите HTTPS в качестве требуемого внутреннего протокола с помощью порта 443
Обязательно задайте для параметра "Переопределение с новым именем узла" значение "Да"
В разделе "Переопределение имени узла" выберите "Выбрать имя узла из серверного целевого объекта". Этот параметр приведет к тому, что запрос к Служба приложений будет использовать имя узла azurewebsites.net, как настроено в серверном пуле.
# 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
Чтобы принять трафик, необходимо настроить прослушиватель. Дополнительные сведения об этой статье см. в разделе Шлюз приложений конфигурации прослушивателя.
Откройте раздел "Прослушиватели" и выберите "Добавить прослушиватель" или щелкните существующий, чтобы изменить
Для нового прослушивателя: присвойте ему имя
В разделе "Внешний IP-адрес" выберите IP-адрес для прослушивания
В разделе "Порт" выберите 443
В разделе "Протокол" выберите "HTTPS"
В разделе "Выбор сертификата" выберите "Выбрать сертификат из Key Vault". Дополнительные сведения см. в разделе "Использование Key Vault ", где вы найдете дополнительные сведения о том, как назначить управляемое удостоверение и предоставить ему права на хранилище ключей.
Присвойте сертификату имя
Выберите управляемое удостоверение
Выберите Key Vault, из которого нужно получить сертификат.
Выбор сертификата
В разделе "Тип прослушивателя" выберите "Базовый"
Нажмите кнопку "Добавить", чтобы добавить прослушиватель
Если нет личного домена или связанного сертификата, мы настроим Шлюз приложений прослушивать HTTP-трафик через порт 80. Кроме того, ознакомьтесь с инструкциями по созданию самозаверяющего сертификата.
Откройте раздел "Прослушиватели" и выберите "Добавить прослушиватель" или щелкните существующий, чтобы изменить
Для нового прослушивателя: присвойте ему имя
В разделе "Внешний IP-адрес" выберите IP-адрес для прослушивания
В разделе "Порт" выберите 80
В разделе "Протокол" выберите "HTTP"
# 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
Во многих случаях общедоступный прослушиватель HTTP через порт 80 уже существует. Приведенный ниже сценарий создаст сценарий, если это еще не так.
$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
}
Настройка правила маршрутизации запросов
Используя ранее настроенный серверный пул и параметры HTTP, правило маршрутизации запросов можно настроить для передачи трафика из прослушивателя и маршрутизации его в внутренний пул с помощью параметров HTTP. Для этого убедитесь, что у вас есть прослушиватель HTTP или HTTPS, который еще не привязан к существующему правилу маршрутизации.
Откройте раздел "Работоспособность серверной части" и убедитесь, что столбец "Состояние" указывает сочетание параметра HTTP и внутреннего пула.
Теперь перейдите к веб-приложению с помощью ip-адреса Шлюз приложений или связанного DNS-имени для IP-адреса. Оба элемента можно найти на странице Шлюз приложений "Обзор" в качестве свойства в разделе "Essentials". Кроме того, ресурс общедоступного IP-адреса также отображает IP-адрес и связанное DNS-имя.
Обратите внимание на следующий неисчерпающий список потенциальных симптомов при тестировании приложения:
перенаправления, указывающие на "azurewebsites.net" напрямую вместо Шлюз приложений
Это включает перенаправления проверки подлинности, которые напрямую пытаются получить доступ к ".azurewebsites.net".
Файлы cookie, привязанные к домену, не передаются в серверную часть
Это включает использование параметра "Сходство ARR" в Служба приложений
Приведенные выше условия (более подробно описаны в Центре архитектуры) указывают на то, что веб-приложение не хорошо перезаписывает имя узла. Это часто видно. Рекомендуемый способ справиться с этим — следовать инструкциям по настройке Шлюз приложений с помощью Служба приложений с помощью личного домена. См. также: устранение неполадок Служба приложений в Шлюз приложений.
Откройте раздел "Работоспособность серверной части" и убедитесь, что столбец "Состояние" указывает сочетание параметра HTTP и внутреннего пула.
Теперь перейдите к веб-приложению с помощью личного домена, связанного с Шлюз приложений и Служба приложений в серверной части.
Проверьте, отображается ли серверная часть работоспособности для серверной части и параметров HTTP:
$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
Чтобы проверить конфигурацию, мы запросим содержимое из Служба приложений через Шлюз приложений с помощью личного домена:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Проверьте, отображается ли серверная часть работоспособности для серверной части и параметров HTTP:
$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
Чтобы проверить конфигурацию, мы запросим содержимое из Служба приложений через Шлюз приложений с помощью IP-адреса:
$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)"
Обратите внимание на следующий неисчерпающий список потенциальных симптомов при тестировании приложения:
перенаправления, указывающие на "azurewebsites.net" напрямую вместо Шлюз приложений
Файлы cookie, привязанные к домену, не передаются в серверную часть
Это включает использование параметра "Сходство ARR" в Служба приложений
Приведенные выше условия (более подробно описаны в Центре архитектуры) указывают на то, что веб-приложение не хорошо перезаписывает имя узла. Это часто видно. Рекомендуемый способ справиться с этим — следовать инструкциям по настройке Шлюз приложений с помощью Служба приложений с помощью личного домена. См. также: устранение неполадок Служба приложений в Шлюз приложений.
Ограничение доступа
Веб-приложения, развернутые в этих примерах, используют общедоступные IP-адреса, доступ к которым можно получить напрямую из Интернета. Это помогает устранить неполадки при изучении новой функции и попытке новых вещей. Однако, если вы хотите развернуть функцию в производственной среде, необходимо добавить дополнительные ограничения. Следуйте приведенным ниже рекомендациям.
Настройте правила ограничения доступа на основе конечных точек службы. Это позволяет заблокировать входящий доступ к приложению, убедившись, что исходный адрес находится в Шлюз приложений.
Используйте ограничения статических IP-адресов службы приложение Azure. Например, можно ограничить веб-приложение, чтобы получать трафик только из шлюза приложения. Используйте функцию ограничения IP-адреса для службы приложения, чтобы сделать виртуальный IP-адрес шлюза приложения единственным адресом с доступом.