Развертывание приложения с двойным стеком IPv6 в виртуальной сети Azure с помощью PowerShell

В этой статье показано, как развернуть приложение с двойным стеком (IPv4 + IPv6) с помощью Load Balancer (цен. категория в Azure, включающего виртуальную сеть с двойным стеком и подсеть, Load Balancer (цен. категория с двумя интерфейсными конфигурациями (IPv4 и IPv6), виртуальными машинами с сетевыми адаптерами с двойной конфигурацией IP-адресов, группой безопасности сети и общедоступными IP-адресами.

Azure Cloud Shell

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

Начало работы с Azure Cloud Shell

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Screenshot that shows an example of Try It for Azure Cloud Shell.
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Button to launch Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Screenshot that shows the Cloud Shell button in the Azure portal

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

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

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

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

  4. Нажмите клавишу ВВОД, чтобы запустить код или команду.

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

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

Прежде чем создавать виртуальную сеть с двумя стеками, необходимо создать группу ресурсов с помощью командлета New-AzResourceGroup. В следующем примере создается группа ресурсов с именем myRGDualStack в расположении Восточная часть США.

   $rg = New-AzResourceGroup `
  -ResourceGroupName "dsRG1"  `
  -Location "east us"

Общедоступные IP-адреса IPv4 и IPv6

Для доступа к виртуальным машинам из Интернета требуются общедоступные IP-адреса IPv4 и IPv6 для балансировщика нагрузки. Создайте общедоступные IP-адреса с помощью командлета New-AzPublicIpAddress. В следующем примере создается общедоступный IP-адрес IPv4 и IPv6 с именем dsPublicIP_v4 и dsPublicIP_v6 в группе ресурсов dsRG1:

$PublicIP_v4 = New-AzPublicIpAddress `
  -Name "dsPublicIP_v4" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -AllocationMethod Static `
  -IpAddressVersion IPv4 `
  -Sku Standard
  
$PublicIP_v6 = New-AzPublicIpAddress `
  -Name "dsPublicIP_v6" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -AllocationMethod Static `
  -IpAddressVersion IPv6 `
  -Sku Standard

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

  $RdpPublicIP_1 = New-AzPublicIpAddress `
  -Name "RdpPublicIP_1" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -AllocationMethod Static `
  -Sku Standard `
  -IpAddressVersion IPv4
  
  $RdpPublicIP_2 = New-AzPublicIpAddress `
   -Name "RdpPublicIP_2" `
   -ResourceGroupName $rg.ResourceGroupName `
   -Location $rg.Location  `
   -AllocationMethod Static `
   -Sku Standard `
   -IpAddressVersion IPv4

Создание подсистемы балансировки нагрузки (цен. категория "Стандартный")

В этом разделе описана настройка двух интерфейсных IP-адресов (IPv4 и IPv6) и пула внутренних адресов для подсистемы балансировки нагрузки, а затем создание Load Balancer (цен. категория .

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

Создайте внешний IP-адрес с помощью New-AzLoadBalancerFrontendIpConfig. В следующем примере создаются интерфейсные IP-конфигурации IPv4 и IPv6 с именами dsLbFrontEnd_v4 и dsLbFrontEnd_v6:

$frontendIPv4 = New-AzLoadBalancerFrontendIpConfig `
  -Name "dsLbFrontEnd_v4" `
  -PublicIpAddress $PublicIP_v4

$frontendIPv6 = New-AzLoadBalancerFrontendIpConfig `
  -Name "dsLbFrontEnd_v6" `
  -PublicIpAddress $PublicIP_v6

Настройка серверного пула адресов

Создайте серверный пул адресов с помощью командлета New-AzLoadBalancerBackendAddressPoolConfig. Виртуальные машины присоединяются в этот внутренний пул на следующих шагах. В следующем примере создаются пулы внутренних адресов с именем dsLbBackEndPool_v4 и dsLbBackEndPool_v6 для включения виртуальных машин с конфигурациями сетевого адаптера IPV4 и IPv6:

$backendPoolv4 = New-AzLoadBalancerBackendAddressPoolConfig `
-Name "dsLbBackEndPool_v4"

$backendPoolv6 = New-AzLoadBalancerBackendAddressPoolConfig `
-Name "dsLbBackEndPool_v6"

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

Используйте командлет Add-AzLoadBalancerProbeConfig для создания пробы работоспособности для отслеживания работоспособности виртуальных машин.

$probe = New-AzLoadBalancerProbeConfig -Name MyProbe -Protocol tcp -Port 3389 -IntervalInSeconds 15 -ProbeCount 2

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

Правило балансировщика нагрузки позволяет определить распределение трафика между виртуальными машинами. Вы определяете конфигурацию внешнего IP-адреса для входящего трафика и пул внутренних IP-адресов для приема трафика, а также требуемый порт источника и назначения. Чтобы трафик поступал только на работоспособные виртуальные машины, можно дополнительно определить пробу работоспособности. Load Balancer (цен. категории "Базовый") использует пробу IPv4 для оценки работоспособности конечных точек IPv4 и IPv6 на виртуальных машинах. В подсистему балансировки нагрузки стандартной ценовой категории входит поддержка явно заданных проб работоспособности IPv6.

Создайте правило подсистемы балансировки нагрузки с помощью командлета Add-AzLoadBalancerRuleConfig. В следующем примере создаются правила подсистемы балансировки нагрузки с именами dsLBrule_v4 и dsLBrule_v6, а также выполняется балансировка трафика на TCP-порту 80 в интерфейсных конфигурациях IP-адреса версий IPv4 и IPv6.

$lbrule_v4 = New-AzLoadBalancerRuleConfig `
  -Name "dsLBrule_v4" `
  -FrontendIpConfiguration $frontendIPv4 `
  -BackendAddressPool $backendPoolv4 `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80 `
   -probe $probe

$lbrule_v6 = New-AzLoadBalancerRuleConfig `
  -Name "dsLBrule_v6" `
  -FrontendIpConfiguration $frontendIPv6 `
  -BackendAddressPool $backendPoolv6 `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80 `
   -probe $probe

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

Создайте Load Balancer (цен. категория "Стандартный") с помощью командлета New-AzLoadBalancer. В следующем примере создается общедоступный экземпляр службы Load Balancer ценового уровня "Стандартный" с именем myLoadBalancer с использованием интерфейсной конфигурация IP-адресов IPv4 и IPv6, серверных пулов и правил балансировки нагрузки, созданных на предыдущих шагах:

$lb = New-AzLoadBalancer `
-ResourceGroupName $rg.ResourceGroupName `
-Location $rg.Location  `
-Name "MyLoadBalancer" `
-Sku "Standard" `
-FrontendIpConfiguration $frontendIPv4,$frontendIPv6 `
-BackendAddressPool $backendPoolv4,$backendPoolv6 `
-LoadBalancingRule $lbrule_v4,$lbrule_v6 `
-Probe $probe

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

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

Создание группы доступности

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

Создайте группу доступности с помощью командлета New-AzAvailabilitySet. В следующем примере создается группа доступности myAvailabilitySet.

$avset = New-AzAvailabilitySet `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -Name "dsAVset" `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2 `
  -Sku aligned

Создание группы безопасности сети

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

Создание правила группы безопасности сети для порта 3389

Создайте правило для группы безопасности сети, разрешающее RDP-подключения через порт 3389, с помощью командлета New-AzNetworkSecurityRuleConfig.

$rule1 = New-AzNetworkSecurityRuleConfig `
-Name 'myNetworkSecurityGroupRuleRDP' `
-Description 'Allow RDP' `
-Access Allow `
-Protocol Tcp `
-Direction Inbound `
-Priority 100 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389

Создание правила группы безопасности сети для порта 80

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

$rule2 = New-AzNetworkSecurityRuleConfig `
  -Name 'myNetworkSecurityGroupRuleHTTP' `
  -Description 'Allow HTTP' `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80

Создание группы безопасности сети

Создайте группу безопасности сети с помощью командлета New-AzNetworkSecurityGroup.

$nsg = New-AzNetworkSecurityGroup `
-ResourceGroupName $rg.ResourceGroupName `
-Location $rg.Location  `
-Name "dsNSG1"  `
-SecurityRules $rule1,$rule2

Создание виртуальной сети

Создайте виртуальную сеть с помощью командлета New-AzVirtualNetwork. В следующем примере создается виртуальная сеть с именем dsVnet и подсетью mySubnet.

# Create dual stack subnet
$subnet = New-AzVirtualNetworkSubnetConfig `
-Name "dsSubnet" `
-AddressPrefix "10.0.0.0/24","fd00:db8:deca:deed::/64"

# Create the virtual network
$vnet = New-AzVirtualNetwork `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -Name "dsVnet" `
  -AddressPrefix "10.0.0.0/16","fd00:db8:deca::/48"  `
  -Subnet $subnet

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

Создайте виртуальные сетевые адаптеры с помощью командлета New-AzNetworkInterface. В следующем примере создаются два виртуальных сетевых адаптера с конфигурациями IPv4 и IPv6. (по одной виртуальной сетевой карте для каждой виртуальной машины, используемой приложением).

  $Ip4Config=New-AzNetworkInterfaceIpConfig `
    -Name dsIp4Config `
    -Subnet $vnet.subnets[0] `
    -PrivateIpAddressVersion IPv4 `
    -LoadBalancerBackendAddressPool $backendPoolv4 `
    -PublicIpAddress  $RdpPublicIP_1
      
  $Ip6Config=New-AzNetworkInterfaceIpConfig `
    -Name dsIp6Config `
    -Subnet $vnet.subnets[0] `
    -PrivateIpAddressVersion IPv6 `
    -LoadBalancerBackendAddressPool $backendPoolv6
    
  $NIC_1 = New-AzNetworkInterface `
    -Name "dsNIC1" `
    -ResourceGroupName $rg.ResourceGroupName `
    -Location $rg.Location  `
    -NetworkSecurityGroupId $nsg.Id `
    -IpConfiguration $Ip4Config,$Ip6Config 
    
  $Ip4Config=New-AzNetworkInterfaceIpConfig `
    -Name dsIp4Config `
    -Subnet $vnet.subnets[0] `
    -PrivateIpAddressVersion IPv4 `
    -LoadBalancerBackendAddressPool $backendPoolv4 `
    -PublicIpAddress  $RdpPublicIP_2  

  $NIC_2 = New-AzNetworkInterface `
    -Name "dsNIC2" `
    -ResourceGroupName $rg.ResourceGroupName `
    -Location $rg.Location  `
    -NetworkSecurityGroupId $nsg.Id `
    -IpConfiguration $Ip4Config,$Ip6Config 

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

Укажите имя и пароль администратора для виртуальной машины с помощью командлета Get-Credential:

$cred = get-credential -Message "DUAL STACK VNET SAMPLE:  Please enter the Administrator credential to log into the VMs."

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

$vmsize = "Standard_A2"
$ImagePublisher = "MicrosoftWindowsServer"
$imageOffer = "WindowsServer"
$imageSKU = "2019-Datacenter"

$vmName= "dsVM1"
$VMconfig1 = New-AzVMConfig -VMName $vmName -VMSize $vmsize -AvailabilitySetId $avset.Id 3> $null | Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent 3> $null | Set-AzVMSourceImage -PublisherName $ImagePublisher -Offer $imageOffer -Skus $imageSKU -Version "latest" 3> $null | Set-AzVMOSDisk -Name "$vmName.vhd" -CreateOption fromImage  3> $null | Add-AzVMNetworkInterface -Id $NIC_1.Id  3> $null 
$VM1 = New-AzVM -ResourceGroupName $rg.ResourceGroupName  -Location $rg.Location  -VM $VMconfig1 

$vmName= "dsVM2"
$VMconfig2 = New-AzVMConfig -VMName $vmName -VMSize $vmsize -AvailabilitySetId $avset.Id 3> $null | Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent 3> $null | Set-AzVMSourceImage -PublisherName $ImagePublisher -Offer $imageOffer -Skus $imageSKU -Version "latest" 3> $null | Set-AzVMOSDisk -Name "$vmName.vhd" -CreateOption fromImage  3> $null | Add-AzVMNetworkInterface -Id $NIC_2.Id  3> $null 
$VM2 = New-AzVM -ResourceGroupName $rg.ResourceGroupName  -Location $rg.Location  -VM $VMconfig2

Определение IP-адресов конечных точек IPv4 и IPv6

Получите все объекты сетевого интерфейса в группе ресурсов, чтобы суммировать IP-адреса, используемые в этом развертывании get-AzNetworkInterface. Кроме того, получите внешние адреса конечных точек IPv4 и IPv6 подсистемы балансировки нагрузки с помощью get-AzpublicIpAddress.

$rgName= "dsRG1"
$NICsInRG= get-AzNetworkInterface -resourceGroupName $rgName 
write-host `nSummary of IPs in this Deployment: 
write-host ******************************************
foreach ($NIC in $NICsInRG) {
 
    $VMid= $NIC.virtualmachine.id 
    $VMnamebits= $VMid.split("/") 
    $VMname= $VMnamebits[($VMnamebits.count-1)] 
    write-host `nPrivate IP addresses for $VMname 
    $IPconfigsInNIC= $NIC.IPconfigurations 
    foreach ($IPconfig in $IPconfigsInNIC) {
 
        $IPaddress= $IPconfig.privateipaddress 
        write-host "    "$IPaddress 
        IF ($IPconfig.PublicIpAddress.ID) {
 
            $IDbits= ($IPconfig.PublicIpAddress.ID).split("/")
            $PipName= $IDbits[($IDbits.count-1)]
            $PipObject= get-azPublicIpAddress -name $PipName -resourceGroup $rgName
            write-host "    "RDP address:  $PipObject.IpAddress
                 }
         }
 }
 
 
 
  write-host `nPublic IP addresses on Load Balancer:
 
  (get-AzpublicIpAddress -resourcegroupname $rgName | where { $_.name -notlike "RdpPublicIP*" }).IpAddress

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

IP summary of dual stack (IPv4/IPv6) application deployment in Azure

Виртуальная сеть IPv6 с двойным стеком на портале Azure

Вы можете просмотреть виртуальную сеть IPv6 с двумя стеками на портале Azure следующим образом:

  1. На портале в строке поиска введите dsVnet.
  2. Когда в результатах поиска появится пункт dsVnet, выберите его. Откроется страница Обзор для виртуальной сети с двумя стеками с именем dsVnet. В виртуальной сети с двойным стеком показаны две сетевые карты с конфигурациями IPv4 и IPv6, расположенные в подсети с двойным стеком и именем dsSubnet.

IPv6 dual stack virtual network in Azure

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

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

Remove-AzResourceGroup -Name dsRG1

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

Из этой статьи вы узнали, как создать Load Balancer (цен. категория "Стандартный") с двойной интерфейсной IP-конфигурацией (IPv4 и IPv6). Вы также создали две виртуальные машины, которые включали сетевые адаптеры с двумя IP-конфигурациями (IPV4 + IPv6), которые были добавлены в внутренний пул подсистемы балансировки нагрузки. Дополнительные сведения о поддержке IPv6 в виртуальных сетях Azure см. в статье Что такое IPv6 для виртуальной сети Azure?