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


Обновление общедоступных IP-адресов, подключенных к виртуальной машине, с уровня "Базовый" до "Стандартный"

Это важно

30 сентября 2025 г. общедоступные IP-адреса SKU уровня "Базовый" будут прекращены. Дополнительные сведения см. в официальном объявлении. Если вы используете общедоступные IP-адреса SKU уровня "Базовый", обязательно обновите общедоступные IP-адреса SKU уровня "Стандартный" до даты выхода на пенсию. В этой статье описано, как выполнить процесс обновления.

Дополнительные сведения о прекращении использования общедоступных IP-адресов SKU уровня "Базовый" и преимущества общедоступных IP-адресов SKU уровня "Стандартный" смотрите здесь.

Общие сведения об обновлении

Этот скрипт обновляет все общедоступные IP-адреса, подключенные к виртуальной машине, с уровня "Базовый" до номера SKU уровня "Стандартный". Чтобы выполнить обновление, метод выделения общедоступных IP-адресов устанавливается статическим, прежде чем отсоединяться от виртуальной машины. После отключения номер SKU общедоступного IP-адреса обновляется до уровня "Стандартный", затем IP-адрес повторно связывается с виртуальной машиной.

Так как выделение публичных IP-адресов установлено на "Статично" перед отсоединением от виртуальной машины, IP-адрес не изменится во время процесса обновления, даже в случае сбоя скрипта. Модуль дважды проверяет, является ли метод выделения общедоступных IP-адресов статическим, прежде чем отсоединить общедоступный IP-адрес от виртуальной машины.

Модуль регистрирует все действия обновления до файла с именем PublicIPUpgrade.log, созданного в том же расположении, где модуль был выполнен (по умолчанию).

Ограничения / неподдерживаемые сценарии

  • Виртуальные машины с сетевыми картами, связанными с балансировщиком нагрузки: Поскольку типы балансировщика нагрузки и общедоступных IP-адресов, связанных с виртуальной машиной, должны совпадать, невозможно обновить общедоступные IP-адреса уровня экземпляра, связанные с виртуальной машиной, когда сетевые карты виртуальной машины также связаны с балансировщиком нагрузки через членство в серверном пуле или пуле NAT. Используйте скрипты обновления базового балансировщика нагрузки до SKU Стандартный, чтобы одновременно обновить балансировщик нагрузки и общедоступные IP-адреса.
  • Виртуальные машины без группы безопасности сети: виртуальные машины с IP-адресами, которые необходимо обновить, должны иметь группу безопасности сети (NSG), связанную либо с подсетью каждой конфигурации IP-адресов с общедоступным IP-адресом, либо с сетевым адаптером напрямую. Это связано с тем, что общедоступные IP-адреса SKU уровня "Стандартный" являются "безопасными по умолчанию", что означает, что любой трафик к общедоступному IP-адресу должен быть явно разрешен в NSG для доступа к виртуальной машине. Общедоступные IP-адреса SKU уровня "Базовый" разрешают любой трафик по умолчанию. Обновление SKU публичных IP-адресов без использования NSG приведет к блокировке входящего интернет-трафика к ранее разрешенному публичному IP-адресу с SKU "Базовый" после миграции. См.: SKU для общедоступных IP
  • Масштабируемые наборы виртуальных машин с конфигурациями общедоступных IP-адресов: если у вас есть масштабируемый набор виртуальных машин (единая модель) с общедоступными IP-конфигурациями на экземпляр, обратите внимание, что эти конфигурации не являются общедоступными IP-ресурсами и как таковые не могут быть обновлены. Вместо этого можно удалить базовую IP-конфигурацию и использовать свойство SKU, чтобы указать, что стандартные IP-конфигурации необходимы для каждого экземпляра масштабируемого набора виртуальных машин, как показано здесь.

Предпосылки

  • Установка последней версии PowerShell
  • Убедитесь, что установлен последний модуль Az PowerShell (и установите последнюю версию модуля Az PowerShell , если нет)

Скачивание скрипта

Загрузите скрипт миграции из коллекции PowerShell.

PS C:\> Install-Module -Name AzureVMPublicIPUpgrade -Scope CurrentUser -Repository PSGallery -Force

Использование модуля

  1. Используйте Connect-AzAccount для подключения к необходимому клиенту Microsoft Entra и подписке Azure.

    PS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
    
  2. Найдите виртуальную машину с подключенными общедоступными IP-адресами уровня "Базовый", которые вы хотите обновить. Запишите его название и название группы ресурсов.

  3. Проверьте параметры модуля:

    • Имя виртуальной машины [строка] Обязательно . Этот параметр является именем виртуальной машины.
    • ResourceGroupName [string] Обязательный параметр . Этот параметр является группой ресурсов для виртуальной машины с подключенными общедоступными IP-адресами уровня "Базовый", которые требуется обновить.
  4. Выполните команду "Обновить".

Пример использования скрипта

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

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG'

Чтобы оценить обновление одной виртуальной машины без внесения изменений, добавьте параметр -WhatIf.

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG' -WhatIf

Чтобы обновить все виртуальные машины в группе ресурсов, пропускайте виртуальные машины, у которых нет групп безопасности сети.

    Get-AzVM -ResourceGroupName 'myRG' | Start-VMPublicIPUpgrade -skipVMMissingNSG

Восстановление после неудачной миграции

Если миграция завершается сбоем из-за временной проблемы, например сбоя сети или клиентской системы, миграция может быть повторно запущена для настройки виртуальной машины и общедоступных IP-адресов в состоянии цели. При выполнении скрипт выводит файл журнала восстановления, который используется для правильной настройки виртуальной машины. Просмотрите файл PublicIPUpgrade.log журнала, созданный в расположении, где был выполнен скрипт.

Чтобы восстановиться после сбоя обновления, передайте путь к файлу журнала восстановления скрипту с -recoverFromFile параметром и определите виртуальную машину для восстановления с помощью -VMName и -ResourceGroupName-VMResourceID параметров, как показано в этом примере.

    Start-VMPublicIPUpgrade -RecoverFromFile ./PublicIPUpgrade_Recovery_2020-01-01-00-00.csv -VMName 'myVM' -ResourceGroupName 'rgName'

Распространенные вопросы

Сколько времени займет миграция и сколько времени моя виртуальная машина будет недоступна в общедоступном IP-адресе?

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

Можно ли вернуться к общедоступному IP-адресу SKU уровня "Базовый"?

Невозможно понизить уровень публичного IP-адреса с "Стандартного" до "Базового".

Можно ли протестировать миграцию перед выполнением?

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

Поддерживает ли сценарий общедоступные IP-адреса зонального SKU уровня "Базовый"?

Да, процесс обновления общедоступного IP-адреса зонального SKU уровня "Базовый" до общедоступного IP-адреса зонального номера SKU уровня "Стандартный" идентичен и работает в скрипте.

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

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

Использование Resource Graph для перечисления виртуальных машин с общедоступными IP-адресами, требующими обновления

Запрос на перечисление виртуальных машин с общедоступными IP-адресами SKU уровня "Базовый"

Этот запрос возвращает список идентификаторов виртуальных машин с присоединенными общедоступными IP-адресами SKU уровня "Базовый".

Resources
| where type =~ 'microsoft.compute/virtualmachines'
| project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces
| join (
  Resources |
  where type =~ 'microsoft.network/networkinterfaces' |
  project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations)
  on $left.vmId == $right.nicVMId
| join (
  Resources
  | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id)
  | where sku.name == 'Basic' // exclude to find all VMs with Public IPs
  | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0])))
  on $left.allVMNicID == $right.pipAssociatedNicId
| project vmId, pipId, pipSku
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces | join (Resources | where type =~ 'microsoft.network/networkinterfaces' | project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations) on \$left.vmId == \$right.nicVMId | join ( Resources | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id) | where sku.name == 'Basic' | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0]))) on \$left.allVMNicID == \$right.pipAssociatedNicId | project vmId, pipId, pipSku"

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