Создание общедоступной подсистемы балансировки нагрузки с поддержкой IPv6 с помощью Azure CLI

Примечание.

В этой статье описывается вводная функция IPv6, позволяющая подсистемам Azure Load Balancer категории "Базовый" предоставлять возможность подключения IPv4 и IPv6. Теперь доступны комплексные возможности подключения IPv6, которые обеспечивает IPv6 для виртуальных сетей Azure. Эта функция интегрирует подключение по протоколу IPv6 с виртуальными сетями и содержит ключевые компоненты, такие как правила группы безопасности сети IPv6, определяемая пользователем маршрутизация IPv6, подсистема балансировки нагрузки IPv6 категории "Стандартный" и "Базовый" и многие другие. IPv6 для виртуальных сетей Azure является рекомендуемым стандартом для приложений IPv6 в Azure. См. статью Развертывание приложения с двойным стеком IPv6 в Azure — PowerShell

Azure Load Balancer является балансировщиком нагрузки 4-го уровня (TCP, UDP). Подсистема балансировки нагрузки обеспечивает высокий уровень доступности, распределяя входящий трафик между работоспособными экземплярами службы в облачных службах или виртуальных машинах, определенных в наборе подсистемы балансировки нагрузки. Подсистемы балансировки нагрузки могут также представить данные службы на нескольких портах, нескольких IP-адресах или обоими этими способами.

Пример сценария развертывания

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

Load balancer scenario

В этом сценарии вы создадите следующие ресурсы Azure:

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

Развертывание решения с помощью Azure CLI

Ниже описано, как создать общедоступную подсистему балансировки нагрузки с помощью Azure CLI. CLI позволяет создать и настроить каждый объект по отдельности, после чего на их основе создается единый ресурс.

Чтобы развернуть подсистему балансировки нагрузки, создайте и настройте следующие объекты:

  • Конфигурация внешнего IP-адреса: содержит общедоступные IP-адреса для входящего сетевого трафика.
  • Серверный пул адресов: содержит сетевые интерфейсы (СЕТЕВЫе адаптеры) для виртуальных машин для получения сетевого трафика от подсистемы балансировки нагрузки.
  • Правила балансировки нагрузки. Содержит правила, которые сопоставляют общедоступный порт в подсистеме балансировки нагрузки с портом в серверном пуле адресов.
  • Правила NAT для входящего трафика: содержит правила преобразования сетевых адресов (NAT), которые сопоставляют общедоступный порт балансировщика нагрузки с портом для конкретной виртуальной машины в серверном пуле адресов.
  • Пробы. Содержит пробы работоспособности, используемые для проверка доступности экземпляров виртуальных машин в серверном пуле адресов.

Настройка Azure CLI

В этом примере программы Azure CLI выполняются в командном окне PowerShell. Для улучшения удобства чтения и повторного использования примените возможности сценариев PowerShell, а не командлеты Azure PowerShell.

  1. Установите и настройте Azure CLI, следуя инструкциям в соответствующей статье, а затем войдите в свою учетную запись Azure.

  2. Настройте переменные PowerShell для использования с командами Azure CLI.

    $subscriptionid = "########-####-####-####-############"  # enter subscription id
    $location = "southcentralus"
    $rgName = "pscontosorg1southctrlus09152016"
    $vnetName = "contosoIPv4Vnet"
    $vnetPrefix = "10.0.0.0/16"
    $subnet1Name = "clicontosoIPv4Subnet1"
    $subnet1Prefix = "10.0.0.0/24"
    $subnet2Name = "clicontosoIPv4Subnet2"
    $subnet2Prefix = "10.0.1.0/24"
    $dnsLabel = "contoso09152016"
    $lbName = "myIPv4IPv6Lb"
    

Создание группы ресурсов, балансировщика нагрузки, виртуальной сети и подсетей

  1. Создание группы ресурсов.

    az group create --name $rgName --location $location
    
  2. Создайте подсистему балансировки нагрузки.

    $lb = az network lb create --resource-group $rgname --location $location --name $lbName
    
  3. Создайте виртуальную сеть.

    $vnet = az network vnet create  --resource-group $rgname --name $vnetName --location $location --address-prefixes $vnetPrefix
    
  4. Создайте две подсети в виртуальной сети.

    $subnet1 = az network vnet subnet create --resource-group $rgname --name $subnet1Name --address-prefix $subnet1Prefix --vnet-name $vnetName
    $subnet2 = az network vnet subnet create --resource-group $rgname --name $subnet2Name --address-prefix $subnet2Prefix --vnet-name $vnetName
    

Создание общедоступных IP-адресов для внешнего пула

  1. Настройте переменные PowerShell.

    $publicIpv4Name = "myIPv4Vip"
    $publicIpv6Name = "myIPv6Vip"
    
  2. Создайте общедоступный IP-адрес для пула внешних IP-адресов:

    $publicipV4 = az network public-ip create --resource-group $rgname --name $publicIpv4Name --location $location --version IPv4 --allocation-method Dynamic --dns-name $dnsLabel
    $publicipV6 = az network public-ip create --resource-group $rgname --name $publicIpv6Name --location $location --version IPv6 --allocation-method Dynamic --dns-name $dnsLabel
    

    Внимание

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

    В этом примере используется полное доменное имя contoso09152016.southcentralus.cloudapp.azure.com.

Создание интерфейсных и внутренних пулов

В этом разделе вы создадите следующие пулы IP-адресов:

  • Интерфейсный пул IP-адресов, который получает входящий сетевой трафик в подсистеме балансировки нагрузки.
  • Серверный пул IP-адресов, в котором интерфейсный пул отправляет сетевой трафик с балансировкой нагрузки.
  1. Настройте переменные PowerShell.

    $frontendV4Name = "FrontendVipIPv4"
    $frontendV6Name = "FrontendVipIPv6"
    $backendAddressPoolV4Name = "BackendPoolIPv4"
    $backendAddressPoolV6Name = "BackendPoolIPv6"
    
  2. Создайте внешний пул IP-адресов и свяжите его с общедоступным IP-адресом, созданным на предыдущем шаге, и подсистемой балансировки нагрузки.

    $frontendV4 = az network lb frontend-ip create --resource-group $rgname --name $frontendV4Name --public-ip-address $publicIpv4Name --lb-name $lbName
    $frontendV6 = az network lb frontend-ip create --resource-group $rgname --name $frontendV6Name --public-ip-address $publicIpv6Name --lb-name $lbName
    $backendAddressPoolV4 = az network lb address-pool create --resource-group $rgname --name $backendAddressPoolV4Name --lb-name $lbName
    $backendAddressPoolV6 = az network lb address-pool create --resource-group $rgname --name $backendAddressPoolV6Name --lb-name $lbName
    

Создание пробы, правил преобразования сетевых адресов и правил подсистемы балансировки нагрузки

В этом примере создаются следующие элементы:

  • правило пробы для проверки подключения к TCP-порту 80;
  • правило преобразования сетевых адресов, которое направляет весь входящий трафик с порта 3389 на порт 3389 для RDP;*
  • правило преобразования сетевых адресов, которое направляет весь входящий трафик с порта 3391 на порт 3389 для протокола удаленного рабочего стола (RDP);*
  • Правило подсистемы балансировки нагрузки для балансировки всего входящего трафика через порт 80 до порта 80 на адреса в серверном пуле.

* Правила преобразования сетевых адресов связаны с конкретным экземпляром виртуальной машины, находящимся в зоне действия подсистемы балансировки нагрузки. Сетевой трафик, который поступает на порт 3389, отправляется на определенную виртуальную машину и порт, которые связанны с правилом преобразования сетевых адресов. Для правила NAT необходимо указать протокол (UDP или TCP). Вы не можете назначить оба протокола одному порту.

  1. Настройте переменные PowerShell.

    $probeV4V6Name = "ProbeForIPv4AndIPv6"
    $natRule1V4Name = "NatRule-For-Rdp-VM1"
    $natRule2V4Name = "NatRule-For-Rdp-VM2"
    $lbRule1V4Name = "LBRuleForIPv4-Port80"
    $lbRule1V6Name = "LBRuleForIPv6-Port80"
    
  2. Создадим пробу.

    В следующем примере создается проба TCP, которая проверка для подключения к внутреннему TCP-порту 80 каждые 15 секунд. После двух последовательных сбоев серверный ресурс помечается как недоступный.

    $probeV4V6 = az network lb probe create --resource-group $rgname --name $probeV4V6Name --protocol tcp --port 80 --interval 15 --threshold 2 --lb-name $lbName
    
  3. Создайте правила NAT для входящего трафика, разрешающие подключения RDP к внутренним ресурсам:

    $inboundNatRuleRdp1 = az network lb inbound-nat-rule create --resource-group $rgname --name $natRule1V4Name --frontend-ip-name $frontendV4Name --protocol Tcp --frontend-port 3389 --backend-port 3389 --lb-name $lbName
    $inboundNatRuleRdp2 = az network lb inbound-nat-rule create --resource-group $rgname --name $natRule2V4Name --frontend-ip-name $frontendV4Name --protocol Tcp --frontend-port 3391 --backend-port 3389 --lb-name $lbName
    
  4. Создайте правила подсистемы балансировки нагрузки, которые отправляют трафик на разные внутренние порты в зависимости от внешнего интерфейса, полученного запросом.

    $lbruleIPv4 = az network lb rule create --resource-group $rgname --name $lbRule1V4Name --frontend-ip-name $frontendV4Name --backend-pool-name $backendAddressPoolV4Name --probe-name $probeV4V6Name --protocol Tcp --frontend-port 80 --backend-port 80 --lb-name $lbName
    $lbruleIPv6 = az network lb rule create --resource-group $rgname --name $lbRule1V6Name --frontend-ip-name $frontendV6Name --backend-pool-name $backendAddressPoolV6Name --probe-name $probeV4V6Name --protocol Tcp --frontend-port 80 --backend-port 8080 --lb-name $lbName
    
  5. Проверьте параметры.

    az network lb show --resource-group $rgName --name $lbName
    

    Ожидаемые выходные данные:

    info:    Executing command network lb show
    info:    Looking up the load balancer "myIPv4IPv6Lb"
    data:    Id                              : /subscriptions/########-####-####-####-############/resourceGroups/pscontosorg1southctrlus09152016/providers/Microsoft.Network/loadBalancers/myIPv4IPv6Lb
    data:    Name                            : myIPv4IPv6Lb
    data:    Type                            : Microsoft.Network/loadBalancers
    data:    Location                        : southcentralus
    data:    Provisioning state              : Succeeded
    data:
    data:    Frontend IP configurations:
    data:    Name             Provisioning state  Private IP allocation  Private IP   Subnet  Public IP
    data:    ---------------  ------------------  ---------------------  -----------  ------  ---------
    data:    FrontendVipIPv4  Succeeded           Dynamic                                     myIPv4Vip
    data:    FrontendVipIPv6  Succeeded           Dynamic                                     myIPv6Vip
    data:
    data:    Probes:
    data:    Name                 Provisioning state  Protocol  Port  Path  Interval  Count
    data:    -------------------  ------------------  --------  ----  ----  --------  -----
    data:    ProbeForIPv4AndIPv6  Succeeded           Tcp       80          15        2
    data:
    data:    Backend Address Pools:
    data:    Name             Provisioning state
    data:    ---------------  ------------------
    data:    BackendPoolIPv4  Succeeded
    data:    BackendPoolIPv6  Succeeded
    data:
    data:    Load Balancing Rules:
    data:    Name                  Provisioning state  Load distribution  Protocol  Frontend port  Backend port  Enable floating IP  Idle timeout in minutes
    data:    --------------------  ------------------  -----------------  --------  -------------  ------------  ------------------  -----------------------
    data:    LBRuleForIPv4-Port80  Succeeded           Default            Tcp       80             80            false               4
    data:    LBRuleForIPv6-Port80  Succeeded           Default            Tcp       80             8080          false               4
    data:
    data:    Inbound NAT Rules:
    data:    Name                 Provisioning state  Protocol  Frontend port  Backend port  Enable floating IP  Idle timeout in minutes
    data:    -------------------  ------------------  --------  -------------  ------------  ------------------  -----------------------
    data:    NatRule-For-Rdp-VM1  Succeeded           Tcp       3389           3389          false               4
    data:    NatRule-For-Rdp-VM2  Succeeded           Tcp       3391           3389          false               4
    info:    network lb show
    

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

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

  1. Настройте переменные PowerShell.

    $nic1Name = "myIPv4IPv6Nic1"
    $nic2Name = "myIPv4IPv6Nic2"
    $subnet1Id = "/subscriptions/$subscriptionid/resourceGroups/$rgName/providers/Microsoft.Network/VirtualNetworks/$vnetName/subnets/$subnet1Name"
    $subnet2Id = "/subscriptions/$subscriptionid/resourceGroups/$rgName/providers/Microsoft.Network/VirtualNetworks/$vnetName/subnets/$subnet2Name"
    $backendAddressPoolV4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/backendAddressPools/$backendAddressPoolV4Name"
    $backendAddressPoolV6Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/backendAddressPools/$backendAddressPoolV6Name"
    $natRule1V4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/inboundNatRules/$natRule1V4Name"
    $natRule2V4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/inboundNatRules/$natRule2V4Name"
    
  2. Создайте сетевой адаптер для каждой серверной части и добавьте конфигурацию IPv6.

    $nic1 = az network nic create --name $nic1Name --resource-group $rgname --location $location --private-ip-address-version "IPv4" --subnet $subnet1Id --lb-address-pools $backendAddressPoolV4Id --lb-inbound-nat-rules $natRule1V4Id
    $nic1IPv6 = az network nic ip-config create --resource-group $rgname --name "IPv6IPConfig" --private-ip-address-version "IPv6" --lb-address-pools $backendAddressPoolV6Id --nic-name $nic1Name
    
    $nic2 = az network nic create --name $nic2Name --resource-group $rgname --location $location --private-ip-address-version "IPv4" --subnet $subnet2Id --lb-address-pools $backendAddressPoolV4Id --lb-inbound-nat-rules $natRule2V4Id
    $nic2IPv6 = az network nic ip-config create --resource-group $rgname --name "IPv6IPConfig" --private-ip-address-version "IPv6" --lb-address-pools $backendAddressPoolV6Id --nic-name $nic2Name
    

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

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

  1. Настройте переменные PowerShell.

    $availabilitySetName = "myIPv4IPv6AvailabilitySet"
    $vm1Name = "myIPv4IPv6VM1"
    $vm2Name = "myIPv4IPv6VM2"
    $nic1Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/networkInterfaces/$nic1Name"
    $nic2Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/networkInterfaces/$nic2Name"
    $imageurn = "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest"
    $vmUserName = "vmUser"
    $mySecurePassword = "PlainTextPassword*1"
    

    Предупреждение

    В этом примере для виртуальных машин используются имя пользователя и пароль в виде открытого текста. Будьте предусмотрительны, используя эти учетные данные в виде открытого текста. Более безопасный способ обработки учетных данных в PowerShell приводится в описании командлета Get-Credential.

  2. Создайте группу доступности.

    $availabilitySet = az vm availability-set create --name $availabilitySetName --resource-group $rgName --location $location
    
  3. Создайте виртуальные машины со связанными сетевыми адаптерами.

    az vm create --resource-group $rgname --name $vm1Name --image $imageurn --admin-username $vmUserName --admin-password $mySecurePassword --nics $nic1Id --location $location --availability-set $availabilitySetName --size "Standard_A1" 
    
    az vm create --resource-group $rgname --name $vm2Name --image $imageurn --admin-username $vmUserName --admin-password $mySecurePassword --nics $nic2Id --location $location --availability-set $availabilitySetName --size "Standard_A1"