Создание шлюза приложений, на котором размещено несколько веб-сайтов, с помощью Azure CLI

Чтобы настроить размещение нескольких веб-сайтов при создании шлюза приложений, можно использовать Azure CLI. В этой статье описано, как определить серверные пулы адресов с помощью масштабируемых наборов виртуальных машин. Затем вы настроите прослушиватели и правила на основе принадлежащих вам доменов, чтобы обеспечить передачу веб-трафика на соответствующие серверы в пулах. В этой статье предполагается, что вам принадлежат несколько доменов. Для примера здесь используются домены www.contoso.com и www.fabrikam.com.

Вы узнаете, как выполнять следующие задачи:

  • Настройка сети
  • Создание Шлюза приложений
  • Создание серверных прослушивателей
  • Создание правил маршрутизации
  • Создание Масштабируемые наборы виртуальных машин с внутренними пулами
  • создание записи CNAME в домене.

Multi-site Application Gateway

При необходимости эти инструкции можно выполнить с помощью Azure PowerShell.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этим учебником требуется Azure CLI версии 2.0.4 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

Создание или изменение группы ресурсов

Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими. Создайте группу ресурсов, используя команду az group create.

В следующем примере создается группа ресурсов с именем myResourceGroupAG в расположении eastus.

az group create --name myResourceGroupAG --location eastus

Создание сетевых ресурсов

Создайте виртуальную сеть и подсеть с именем myAGSubnet с помощью команды az network vnet create. Затем добавьте подсеть, требуемую для внутренних серверов, используя команду az network vnet subnet create. Создайте общедоступный IP-адрес с именем myAGPublicIPAddress, используя команду az network public-ip create.

az network vnet create \
  --name myVNet \
  --resource-group myResourceGroupAG \
  --location eastus \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myAGSubnet \
  --subnet-prefix 10.0.1.0/24

az network vnet subnet create \
  --name myBackendSubnet \
  --resource-group myResourceGroupAG \
  --vnet-name myVNet \
  --address-prefix 10.0.2.0/24

az network public-ip create \
  --resource-group myResourceGroupAG \
  --name myAGPublicIPAddress \
  --allocation-method Static \
  --sku Standard

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

Шлюз приложений можно создать с помощью команды az network application-gateway create. При создании шлюза приложений с помощью Azure CLI укажите такие сведения о конфигурации, как емкость, номер SKU и параметры HTTP. Шлюз приложений назначается подсети myAGSubnet и адресу myAGPublicIPAddress, созданным ранее.

az network application-gateway create \
  --name myAppGateway \
  --location eastus \
  --resource-group myResourceGroupAG \
  --vnet-name myVNet \
  --subnet myAGsubnet \
  --capacity 2 \
  --sku Standard_v2 \
  --http-settings-cookie-based-affinity Disabled \
  --frontend-port 80 \
  --http-settings-port 80 \
  --http-settings-protocol Http \
  --public-ip-address myAGPublicIPAddress \
  --priority 10

Создание шлюза приложений может занять несколько минут. Когда шлюз приложений будет создан, вы увидите такие новые функции шлюза:

  • appGatewayBackendPool — шлюз приложений должен иметь по крайней мере один внутренний пул адресов.
  • appGatewayBackendHttpSettings — указывает, что для обмена данными используются порт 80 и протокол HTTP.
  • appGatewayHttpListener — прослушиватель по умолчанию, связанный с appGatewayBackendPool.
  • appGatewayFrontendIP — назначает адрес myAGPublicIPAddress для прослушивателя appGatewayHttpListener.
  • rule1 — правило маршрутизации по умолчанию, связанное с прослушивателем appGatewayHttpListener.

Добавление пулов серверной части

Добавьте пулы серверной части с именами, которые требуются для размещения внутренних серверов, с помощью команды az network application-gateway address-pool create.

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name contosoPool

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name fabrikamPool

Добавление прослушивателей

Добавьте прослушиватели, необходимые для маршрутизации трафика с помощью http-прослушивателя сетевого приложения az-шлюза

Примечание.

С помощью Шлюза приложений или SKU WAF версии 2 можно также настроить до пяти имен узлов на прослушиватель, а в имени узла можно использовать подстановочные знаки. Подробнее см. в статье Имена узлов с подстановочными знаками в прослушивателе. Чтобы использовать несколько имен хостов и подстановочных знаков в прослушивателе, использующем Azure CLI, необходимо использовать --host-namesвместо--host-name. При использовании имен узлов можно указать до пяти имен узлов в виде значений, разделенных пробелами. Например --host-names "*.contoso.com *.fabrikam.com".

az network application-gateway http-listener create \
  --name contosoListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port appGatewayFrontendPort \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway \
  --host-name www.contoso.com

az network application-gateway http-listener create \
  --name fabrikamListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port appGatewayFrontendPort \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway \
  --host-name www.fabrikam.com

Добавление правил маршрутизации

Правила обрабатываются в том порядке, в котором они перечислены, если поле приоритета правила не используется. Трафик направляется с использованием первого правила, которое соответствует независимо от специфики. Например, если для одного порта имеется правило с базовым прослушивателем и правило с многосайтовым прослушивателем, для обеспечения правильной работы правило с многосайтовым прослушивателем должно быть указано перед правилом с базовым прослушивателем.

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

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name contosoRule \
  --resource-group myResourceGroupAG \
  --http-listener contosoListener \
  --rule-type Basic \
  --address-pool contosoPool \
  --priority 200

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name fabrikamRule \
  --resource-group myResourceGroupAG \
  --http-listener fabrikamListener \
  --rule-type Basic \
  --address-pool fabrikamPool \
  --priority 100

az network application-gateway rule delete \
  --gateway-name myAppGateway \
  --name rule1 \
  --resource-group myResourceGroupAG

Добавление приоритета к правилам маршрутизации

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

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name contosoRule \
  --resource-group myResourceGroupAG \
  --http-listener contosoListener \
  --rule-type Basic \
  --priority 200 \
  --address-pool contosoPool

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name fabrikamRule \
  --resource-group myResourceGroupAG \
  --http-listener fabrikamListener \
  --rule-type Basic \
  --priority 100 \
  --address-pool fabrikamPool

Создание Масштабируемые наборы виртуальных машин

В этом примере создается три Масштабируемые наборы виртуальных машин, которые поддерживают три внутренних пула в шлюзе приложений. Имена создаваемых масштабируемых наборов — myvmss1, myvmss2 и myvmss3. Каждый масштабируемый набор содержит два экземпляра виртуальной машины, на которых устанавливаются службы IIS.

for i in `seq 1 2`; do

  if [ $i -eq 1 ]
  then
    poolName="contosoPool"
  fi

  if [ $i -eq 2 ]
  then
    poolName="fabrikamPool"
  fi

  az vmss create \
    --name myvmss$i \
    --resource-group myResourceGroupAG \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --admin-password Azure123456! \
    --instance-count 2 \
    --vnet-name myVNet \
    --subnet myBackendSubnet \
    --vm-sku Standard_D1_v2 \
    --upgrade-policy-mode Automatic \
    --app-gateway myAppGateway \
    --backend-pool-name $poolName
done

Установка nginx

for i in `seq 1 2`; do

  az vmss extension set \
    --publisher Microsoft.Azure.Extensions \
    --version 2.0 \
    --name CustomScript \
    --resource-group myResourceGroupAG \
    --vmss-name myvmss$i \
    --settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],
  "commandToExecute": "./install_nginx.sh" }'

done

создание записи CNAME в домене.

После создания шлюза приложений с общедоступным IP-адресом можно получить DNS-адрес и использовать его для создания записи CNAME в своем домене. С помощью команды az network public-ip show можно получить DNS-адрес шлюза приложений. Скопируйте значение fqdn для DNSSettings и используйте его в качестве значения создаваемой записи CNAME.

az network public-ip show \
  --resource-group myResourceGroupAG \
  --name myAGPublicIPAddress \
  --query [dnsSettings.fqdn] \
  --output tsv

Использование A-записей не рекомендуется, так как VIP может измениться при перезапуске шлюза приложений.

Тестирование шлюза приложений

В адресной строке браузера введите имя домена. Например, http://www.contoso.com.

Test contoso site in application gateway

Введите адрес другого домена. Результат должен быть примерно таким:

Test fabrikam site in application gateway

Очистка ресурсов

При необходимости вы можете удалить группу ресурсов, шлюз приложений и все связанные ресурсы.

az group delete --name myResourceGroupAG

Следующие шаги

Создание шлюза приложений с правилами маршрутизации на основе URL-путей