Поделиться через


Маршрутизация веб-трафика на основе URL-адреса с помощью Azure PowerShell

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

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

В этой статье вы узнаете, как:

  • Настройка сети
  • Создание прослушивателей, сопоставления пути URL-адресов и правил
  • Создание масштабируемых серверных пулов

Пример маршрутизации для URL-адресов

Если вы предпочитаете, вы можете выполнить эту процедуру с помощью Azure CLI или портала Azure.

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

Note

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать, ознакомьтесь с разделом Установка Azure PowerShell. Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.

Azure Cloud Shell

Azure размещает Azure Cloud Shell, интерактивную среду оболочки, которую можно использовать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для выполнения кода в этой статье можно использовать предустановленные команды Cloud Shell, не устанавливая ничего в локальной среде.

Чтобы запустить Azure Cloud Shell, выполните приведенные действия.

Option Example/Link
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Снимок экрана, на котором показан пример функции
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Кнопка запуска Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Снимок экрана: кнопка

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите Enter, чтобы запустить код или команду.

Чтобы установить и использовать PowerShell локально для работы с этой статьей, вам понадобится модуль Azure PowerShell 1.0.0 или более поздней версии. Чтобы узнать версию, выполните команду Get-Module -ListAvailable Az. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell. При использовании PowerShell на локальном компьютере также нужно запустить Login-AzAccount, чтобы создать подключение к Azure.

Из-за времени, необходимого для создания ресурсов, для выполнения этой процедуры может потребоваться до 90 минут.

Создайте группу ресурсов

Создайте группу ресурсов, содержащую все ресурсы для приложения.

Создайте группу ресурсов Azure, используя командлет New-AzResourceGroup.

New-AzResourceGroup -Name myResourceGroupAG -Location eastus

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

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

Создайте конфигурации подсети myAGSubnet и myBackendSubnet с помощью New-AzVirtualNetworkSubnetConfig. Создайте виртуальную сеть с именем myVNet, используя командлет PowerShell New-AzVirtualNetwork с конфигурациями подсетей. Наконец, создайте общедоступный IP-адрес с именем myAGPublicIPAddress, выполнив командлет New-AzPublicIpAddress. Эти ресурсы используются для обеспечения сетевого подключения к шлюзу приложений и связанным с ним ресурсам.

$backendSubnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name myBackendSubnet `
  -AddressPrefix 10.0.1.0/24

$agSubnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name myAGSubnet `
  -AddressPrefix 10.0.2.0/24

$vnet = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Location eastus `
  -Name myVNet `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $backendSubnetConfig, $agSubnetConfig
$pip = New-AzPublicIpAddress `
  -ResourceGroupName myResourceGroupAG `
  -Location eastus `
  -Name myAGPublicIPAddress `
  -AllocationMethod Static `
  -Sku Standard

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

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

  • IP-конфигурации и интерфейсный порт . Связывает подсеть, созданную ранее, с шлюзом приложений, и назначает порт, используемый для доступа к нему.
  • Пул по умолчанию — все шлюзы приложений должны иметь по крайней мере один внутренний пул серверов.
  • Прослушиватель и правило по умолчанию — прослушиватель по умолчанию прослушивает трафик на назначенный порт, а правило по умолчанию отправляет трафик в пул по умолчанию.

Создание IP-конфигураций и интерфейсного порта

Присоедините myAGSubnet, созданную ранее, к шлюзу приложений с помощью New-AzApplicationGatewayIPConfiguration. Назначьте шлюзу приложений адрес myAGPublicIPAddress с помощью New-AzApplicationGatewayFrontendIPConfig.

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Name myVNet

$subnet=$vnet.Subnets[0]

$pip = Get-AzPublicIpAddress `
  -ResourceGroupName myResourceGroupAG `
  -Name myAGPublicIPAddress

$gipconfig = New-AzApplicationGatewayIPConfiguration `
  -Name myAGIPConfig `
  -Subnet $subnet

$fipconfig = New-AzApplicationGatewayFrontendIPConfig `
  -Name myAGFrontendIPConfig `
  -PublicIPAddress $pip

$frontendport = New-AzApplicationGatewayFrontendPort `
  -Name myFrontendPort `
  -Port 80

Создание пула и параметров по умолчанию

Создайте внутренний пул по умолчанию с именем appGatewayBackendPool для шлюза приложений с помощью New-AzApplicationGatewayBackendAddressPool. Настройте параметры внутреннего пула с помощью New-AzApplicationGatewayBackendHttpSetting.

$defaultPool = New-AzApplicationGatewayBackendAddressPool `
  -Name appGatewayBackendPool

$poolSettings = New-AzApplicationGatewayBackendHttpSetting `
  -Name myPoolSettings `
  -Port 80 `
  -Protocol Http `
  -CookieBasedAffinity Enabled `
  -RequestTimeout 120

Создайте прослушиватель по умолчанию и правило

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

Создайте прослушиватель по умолчанию с именем myDefaultListener с помощью New-AzApplicationGatewayHttpListener с конфигурацией внешнего интерфейса и интерфейсным портом, созданным ранее.

Правило необходимо, чтобы слушатель понимал, какой бекенд-пул использовать для входящего трафика. Создайте базовое правило rule1 с помощью командлета New-AzApplicationGatewayRequestRoutingRule.

$defaultlistener = New-AzApplicationGatewayHttpListener `
  -Name myDefaultListener `
  -Protocol Http `
  -FrontendIPConfiguration $fipconfig `
  -FrontendPort $frontendport

$frontendRule = New-AzApplicationGatewayRequestRoutingRule `
  -Name rule1 `
  -RuleType Basic `
  -HttpListener $defaultlistener `
  -BackendAddressPool $defaultPool `
  -BackendHttpSettings $poolSettings

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

Теперь, когда вы создали необходимые вспомогательные ресурсы, укажите параметры для шлюза приложений myAppGateway с помощью командлета New-AzApplicationGatewaySku, а затем создайте шлюз с помощью командлета New-AzApplicationGateway.

$sku = New-AzApplicationGatewaySku `
  -Name Standard_v2 `
  -Tier Standard_v2 `
  -Capacity 2

$appgw = New-AzApplicationGateway `
  -Name myAppGateway `
  -ResourceGroupName myResourceGroupAG `
  -Location eastus `
  -BackendAddressPools $defaultPool `
  -BackendHttpSettingsCollection $poolSettings `
  -FrontendIpConfigurations $fipconfig `
  -GatewayIpConfigurations $gipconfig `
  -FrontendPorts $frontendport `
  -HttpListeners $defaultlistener `
  -RequestRoutingRules $frontendRule `
  -Sku $sku

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

На этом этапе у вас есть шлюз приложений, который прослушивает трафик через порт 80 и отправляет этот трафик в пул серверов по умолчанию.

Добавьте серверные пулы и порты для изображений и видео.

Добавьте серверные пулы с именами imagesBackendPool и videoBackendPool в шлюз приложений с помощью Add-AzApplicationGatewayBackendAddressPool. Добавьте внешний порт для пулов с помощью Add-AzApplicationGatewayFrontendPort. Отправьте изменения в шлюз приложений с помощью Set-AzApplicationGateway.

$appgw = Get-AzApplicationGateway `
  -ResourceGroupName myResourceGroupAG `
  -Name myAppGateway

Add-AzApplicationGatewayBackendAddressPool `
  -ApplicationGateway $appgw `
  -Name imagesBackendPool

Add-AzApplicationGatewayBackendAddressPool `
  -ApplicationGateway $appgw `
  -Name videoBackendPool

Add-AzApplicationGatewayFrontendPort `
  -ApplicationGateway $appgw `
  -Name bport `
  -Port 8080

Set-AzApplicationGateway -ApplicationGateway $appgw

Обновление шлюза приложений также может занять до 20 минут.

Добавить прослушиватель бэкэнда

Добавьте серверный прослушиватель с именем backendListener , который необходим для маршрутизации трафика с помощью Add-AzApplicationGatewayHttpListener.

$appgw = Get-AzApplicationGateway `
  -ResourceGroupName myResourceGroupAG `
  -Name myAppGateway

$backendPort = Get-AzApplicationGatewayFrontendPort `
  -ApplicationGateway $appgw `
  -Name bport

$fipconfig = Get-AzApplicationGatewayFrontendIPConfig `
  -ApplicationGateway $appgw

Add-AzApplicationGatewayHttpListener `
  -ApplicationGateway $appgw `
  -Name backendListener `
  -Protocol Http `
  -FrontendIPConfiguration $fipconfig `
  -FrontendPort $backendPort

Set-AzApplicationGateway -ApplicationGateway $appgw

Добавьте карту URL-пути

Карты маршрутизации URL-адресов обеспечивают, что URL-адреса, отправляемые в ваше приложение, перенаправляются в определенные серверные пулы. Создайте карты пути URL-адресов с именами imagePathRule и videoPathRule с помощью New-AzApplicationGatewayPathRuleConfig и Add-AzApplicationGatewayUrlPathMapConfig.

$appgw = Get-AzApplicationGateway `
  -ResourceGroupName myResourceGroupAG `
  -Name myAppGateway

$poolSettings = Get-AzApplicationGatewayBackendHttpSetting `
  -ApplicationGateway $appgw `
  -Name myPoolSettings

$imagePool = Get-AzApplicationGatewayBackendAddressPool `
  -ApplicationGateway $appgw `
  -Name imagesBackendPool

$videoPool = Get-AzApplicationGatewayBackendAddressPool `
  -ApplicationGateway $appgw `
  -Name videoBackendPool

$defaultPool = Get-AzApplicationGatewayBackendAddressPool `
  -ApplicationGateway $appgw `
  -Name appGatewayBackendPool

$imagePathRule = New-AzApplicationGatewayPathRuleConfig `
  -Name imagePathRule `
  -Paths "/images/*" `
  -BackendAddressPool $imagePool `
  -BackendHttpSettings $poolSettings

$videoPathRule = New-AzApplicationGatewayPathRuleConfig `
  -Name videoPathRule `
    -Paths "/video/*" `
    -BackendAddressPool $videoPool `
    -BackendHttpSettings $poolSettings

Add-AzApplicationGatewayUrlPathMapConfig `
  -ApplicationGateway $appgw `
  -Name urlpathmap `
  -PathRules $imagePathRule, $videoPathRule `
  -DefaultBackendAddressPool $defaultPool `
  -DefaultBackendHttpSettings $poolSettings

Set-AzApplicationGateway -ApplicationGateway $appgw

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

Правило маршрутизации связывает карту URL-адресов с созданным прослушивателем. Добавьте правило с именем rule2 с помощью Add-AzApplicationGatewayRequestRoutingRule.

$appgw = Get-AzApplicationGateway `
  -ResourceGroupName myResourceGroupAG `
  -Name myAppGateway

$backendlistener = Get-AzApplicationGatewayHttpListener `
  -ApplicationGateway $appgw `
  -Name backendListener

$urlPathMap = Get-AzApplicationGatewayUrlPathMapConfig `
  -ApplicationGateway $appgw `
  -Name urlpathmap

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $appgw `
  -Name rule2 `
  -RuleType PathBasedRouting `
  -HttpListener $backendlistener `
  -UrlPathMap $urlPathMap

Set-AzApplicationGateway -ApplicationGateway $appgw

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

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

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Name myVNet

$appgw = Get-AzApplicationGateway `
  -ResourceGroupName myResourceGroupAG `
  -Name myAppGateway

$backendPool = Get-AzApplicationGatewayBackendAddressPool `
  -Name appGatewayBackendPool `
  -ApplicationGateway $appgw

$imagesPool = Get-AzApplicationGatewayBackendAddressPool `
  -Name imagesBackendPool `
  -ApplicationGateway $appgw

$videoPool = Get-AzApplicationGatewayBackendAddressPool `
  -Name videoBackendPool `
  -ApplicationGateway $appgw

for ($i=1; $i -le 3; $i++)
{
  if ($i -eq 1)
  {
     $poolId = $backendPool.Id
  }
  if ($i -eq 2) 
  {
    $poolId = $imagesPool.Id
  }
  if ($i -eq 3)
  {
    $poolId = $videoPool.Id
  }

  $ipConfig = New-AzVmssIpConfig `
    -Name myVmssIPConfig$i `
    -SubnetId $vnet.Subnets[1].Id `
    -ApplicationGatewayBackendAddressPoolsId $poolId

  $vmssConfig = New-AzVmssConfig `
    -Location eastus `
    -SkuCapacity 2 `
    -SkuName Standard_DS2_v2 `
    -UpgradePolicyMode Automatic

  Set-AzVmssStorageProfile $vmssConfig `
    -ImageReferencePublisher MicrosoftWindowsServer `
    -ImageReferenceOffer WindowsServer `
    -ImageReferenceSku 2016-Datacenter `
    -ImageReferenceVersion latest `
    -OsDiskCreateOption FromImage

  Set-AzVmssOsProfile $vmssConfig `
    -AdminUsername azureuser `
    -AdminPassword "Azure123456!" `
    -ComputerNamePrefix myvmss$i

  Add-AzVmssNetworkInterfaceConfiguration `
    -VirtualMachineScaleSet $vmssConfig `
    -Name myVmssNetConfig$i `
    -Primary $true `
    -IPConfiguration $ipConfig

  New-AzVmss `
    -ResourceGroupName myResourceGroupAG `
    -Name myvmss$i `
    -VirtualMachineScaleSet $vmssConfig
}

Установить IIS

Каждый масштабируемый набор содержит два экземпляра виртуальной машины, на которых установлена IIS. Образец страницы создается для проверки работы шлюза приложений.

$publicSettings = @{ "fileUris" = (,"https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/appgatewayurl.ps1"); 
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File appgatewayurl.ps1" }

for ($i=1; $i -le 3; $i++)
{
  $vmss = Get-AzVmss -ResourceGroupName myResourceGroupAG -VMScaleSetName myvmss$i
  Add-AzVmssExtension -VirtualMachineScaleSet $vmss `
    -Name "customScript" `
    -Publisher "Microsoft.Compute" `
    -Type "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -Setting $publicSettings

  Update-AzVmss `
    -ResourceGroupName myResourceGroupAG `
    -Name myvmss$i `
    -VirtualMachineScaleSet $vmss
}

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

Используйте Get-AzPublicIPAddress , чтобы получить общедоступный IP-адрес шлюза приложений. Скопируйте общедоступный IP-адрес и вставьте его в адресную строку браузера. Например, http://52.168.55.24, http://52.168.55.24:8080/images/test.htm или http://52.168.55.24:8080/video/test.htm.

Get-AzPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress

Тестирование базового URL-адреса в шлюзе приложений

Измените URL-адрес на http://<ip-address>:8080/images/test.htm, заменив <ip-address> на ваш IP-адрес, и вы увидите следующий пример:

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

Измените URL-адрес на http://<IP-адрес>:8080/video/test.htm, заменив <IP-адрес> на ваш IP-адрес, и вы должны увидеть следующий пример:

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

Очистите ресурсы

Если больше не требуется, удалите группу ресурсов, шлюз приложений и все связанные ресурсы с помощью Remove-AzResourceGroup.

Remove-AzResourceGroup -Name myResourceGroupAG

Дальнейшие шаги

Перенаправление веб-трафика на основе URL-адреса