Упражнение. Создание и настройка шлюза приложений

Завершено

Шлюз приложений прослушивает конечную точку для входящих запросов, а затем пересылает эти запросы на один из веб-серверов в серверном пуле. Вы предоставите конфигурацию, которая описывает, как Шлюз приложений направляет трафик и как балансировать запросы нагрузки на веб-серверах.

В системе отдела автомобилей необходимо настроить Шлюз приложений для балансировки нагрузки входящих запросов на веб-серверах, на котором размещено веб-приложение регистрации автомобиля. Кроме того, необходимо настроить Шлюз приложений для обнаружения сбоя любого из веб-серверов, чтобы он смог перенаправить трафик на рабочий сервер. Кроме того, необходимо настроить маршрутизацию на основе путей для отправки запросов на сайты регистрации транспортных средств и продления лицензий в соответствующие серверные веб-службы.

В этом упражнении вы создадите экземпляр Шлюза приложений с помощью пула веб-серверов. Вы убедитесь, что в Шлюзе приложений настроен соответствующий прослушиватель для обработки входящих HTTP-запросов, и запросы перенаправляются на работающий веб-сервер.

Схема, на которой показаны развертываемые ресурсы.

Настройка сети для Шлюза приложений

  1. Чтобы создать частную подсеть, необходимую для Шлюза приложений, выполните следующую команду. Подсеть имеет имя appGatewaySubnet в виртуальной сети vehicleAppVnet, которую вы создали в предыдущем упражнении.

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. Чтобы создать общедоступный IP-адрес и DNS-метку для Шлюза приложений, выполните следующую команду. Эта метка DNS должна быть уникальной глобально. Для создания метки в следующем коде используется функция $RANDOM.

    az network public-ip create \
      --resource-group $RG \
      --name appGatewayPublicIp \
      --sku Standard \
      --dns-name vehicleapp${RANDOM}
    

Создание Шлюза приложений

  1. Сначала используйте следующую команду, чтобы создать политику WAF:

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  2. Используйте следующую команду, чтобы создать шлюз приложений с именем vehicleAppGateway следующей конфигурации:

    • Серверный пул, содержащий IP-адреса виртуальных машин веб-сервера.
    • Брандмауэр, блокирующий вредоносные запросы, которые используются в атаках с использованием внедрения SQL-кода и межсайтовых сценариев.
    • Временный прослушиватель, прослушивающий порт 8080. Этот прослушиватель будет заменен позднее, хотя он необходим для создания Шлюза приложений.
    • Правило, которое определяет маршрут (и балансирует нагрузку) запросов на веб-серверы пула.
    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
    

    Примечание.

    Выполнение этой команды может занять несколько минут.

  3. Чтобы найти частные IP-адреса webServer1 и webServer2выполните следующие команды:

    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
    
  4. Далее для каждого веб-сайта мы добавим серверные пулы. Сначала создайте внутренний пул для сайта регистрации транспортных средств, работающего на виртуальных машинах. Убедитесь, что IP-адреса в приведенной ниже команде соответствуют IP-адресам, которые содержались в выходных данных предыдущих команд.

    az network application-gateway address-pool create \
      --gateway-name vehicleAppGateway \
      --resource-group $RG \
      --name vmPool \
      --servers 10.0.1.4 10.0.1.5
    
  5. Чтобы создать внутренний пул для сайта продления лицензии, работающего на Служба приложений, выполните следующую команду:

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. Для порта 80 создайте интерфейсный порт:

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. Чтобы обрабатывать запросы через порт 80, создайте прослушиватель:

    az network application-gateway http-listener create \
        --resource-group $RG \
        --name vehicleListener \
        --frontend-port port80 \
        --frontend-ip appGatewayFrontendIP \
        --gateway-name vehicleAppGateway
    

Добавление пробы работоспособности

  1. Создайте функцию проверки работоспособности, которая протестирует веб-сервер на доступность. Проверка работоспособности выполняется каждые 15 секунд (--interval 15) и отправляет HTTP-запрос GET по корневому пути веб-приложения. Если веб-приложение не отвечает в течение 10 секунд (--timeout 10), время ожидания пробы истекает. Веб-сервер помечается как неработоспособный, если проба завершается сбоем три раза в последовательности (--threshold 3).

    Так как вы используете Служба приложений в качестве одного из внутренних серверов, вы задали заголовок узла в имя Служба приложений. Без этого параметра Служба приложений не будет отвечать и будет отображаться как неработоспособная.

    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
    
  2. Затем, чтобы использовать созданную пробу работоспособности, создайте параметры HTTP для шлюза:

    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
    

Настройка маршрутизации на основе путей

Теперь для нашего Шлюза приложений нужно настроить маршрутизацию на основе пути. Мы направим запросы с частью пути /VehicleRegistration/ на vmPool, а запросы с частью пути /LicenseRenewal/ — на appServicePool. Все запросы без какого-либо URL-контекста будут перенаправляться на vmPool по умолчанию.

  1. Чтобы создать карту пути для vmPool, выполните следующую команду:

    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
    
  2. Чтобы создать правило сопоставления пути для appServicePool, выполните следующую команду:

    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
    
  3. Теперь создайте новое правило маршрутизации с помощью созданной карты пути:

    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
    
  4. Последняя часть конфигурации — удалить правило, созданное при первоначальном развертывании Шлюз приложений. Настраиваемое правило больше не понадобится.

    az network application-gateway rule delete \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name rule1
    

Когда все настроено, следует проверить работоспособность.