Como migrar uma VM entre redes

Nesta página, você verá como migrar uma instância de VM de uma rede para outra. No caso de uma VM conectada a mais de uma rede e que usa várias interfaces de rede, esse processo atualiza uma das interfaces e deixa o restante no lugar.

As migrações a seguir são compatíveis:

  • Da rede legada para uma rede VPC no mesmo projeto
  • De uma rede VPC para outra no mesmo projeto
  • De uma sub-rede de uma rede VPC para outra da mesma rede
  • De uma rede de projetos de serviço para a rede compartilhada de um projeto host de VPC compartilhada

Em todos os casos, a VM permanece na região e na zona em que estava antes. Somente a rede anexada é alterada.

Antes de começar

Requisitos

Para mover a VM, ela precisa atender aos requisitos a seguir:

  • A migração precisa ser "fria". A VM precisa ser interrompida antes de ser migrada.
  • A VM não pode estar em um grupo de instâncias ou de endpoints da rede (NEG, na sigla em inglês).
    • Se a VM estiver em um grupo de instâncias ou NEG não gerenciado, será necessário removê-la do grupo antes da migração.
    • As VMs nos grupos gerenciados de instâncias não podem ser migradas. Em vez disso, é necessário copiar o modelo de instância para a nova rede e usá-lo para recriar o grupo de instâncias gerenciadas.
    • É possível mover instâncias em pools de destino sem removê-las primeiro. O pool de destino se expande para cobrir as duas redes.

Limitações

  • Não é possível migrar uma interface de VM para uma rede legada.
  • O endereço MAC alocado à interface de rede será alterado durante a migração. Isso pode afetar os serviços fortemente acoplados a endereços MAC, como o contrato de licença de terceiros.
  • Se você estiver migrando a VM para uma rede ou sub-rede com um intervalo de IP diferente, o endereço IP interno da instância precisará ser alterado. Se você estiver migrando para uma sub-rede com o mesmo intervalo de IP, poderá manter o endereço IP antigo especificando-o durante a migração, desde que ainda não esteja em uso no destino.
  • Se a sub-rede de destino não tiver o mesmo intervalo de IP da origem, o endereço IP da interface será alterado para corresponder ao novo intervalo de sub-rede.
  • É possível manter o endereço IP externo atual da VM no novo local. Para isso, é necessário ter a permissão compute.subnetworks.useExternalIp na rede de destino, e os endereços IP externos dela não podem estar desativados pela restrição constraints/compute.vmExternalIpAccess.

Como migrar uma VM

Antes de migrar uma VM, consulte os requisitos e as limitações.

O Google recomenda criar regras de firewall, rotas, balanceadores de carga e outros recursos de infraestrutura de rede necessários na nova rede antes de migrar as VMs. Isso pode diminuir o tempo em que elas ficam off-line.

Console

  1. No Console do Cloud, acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Clique no nome da instância de VM para abrir a página de detalhes.

  3. Clique em Interromper .

  4. Se uma caixa de diálogo de confirmação aparecer, clique em Parar.

  5. Depois que a VM for interrompida, clique em Editar .

  6. Em Interfaces de rede, clique na interface que você quer mover.

  7. No campo Rede da interface, selecione a nova rede para a interface.

  8. No campo Sub-rede da interface, selecione a nova sub-rede para a interface.

  9. No campo Endereço IP interno, especifique Automático se quiser que o sistema aloque um endereço IP do intervalo de sub-redes ou Personalizado, se você quer especificar um não utilizado.

  10. Clique em Concluído para fechar o painel de edição da interface de rede.

  11. Clique em Salvar.

  12. Depois que a VM terminar de salvar, clique em Iniciar .

  13. Se uma caixa de diálogo de confirmação aparecer, clique em Iniciar.

gcloud

  1. Pare a VM

    gcloud beta compute instances stop INSTANCE_NAME \
        --zone=ZONE_NAME

    em que

    • INSTANCE_NAME é o nome da instância de VM;
    • ZONE_NAME é o nome da zona que contém a instância.
  2. Migre a VM

    gcloud beta compute instances network-interfaces update INSTANCE_NAME \
        --zone=ZONE_NAME \
        --network-interface=NIC \
        --network=NETWORK_NAME \
        --subnetwork=SUBNET_NAME

    em que

    • INSTANCE_NAME é o nome da instância de VM;
    • ZONE_NAME é o nome da zona que contém a instância;
    • NIC é o nome da interface que você está atualizando. Em uma VM de interface única, o NIC é nic0;
    • NETWORK_NAME é o nome da rede de destino. Se você estiver migrando a VM de uma rede de projetos de serviço para a de projeto de host, use um nome totalmente qualificado para a rede de destino: projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME;
    • SUBNET_NAME é o nome da sub-rede de destino. Essa sub-rede precisa estar na mesma região da VM. Se estiver migrando a VM de uma rede de projeto de serviço para a rede do projeto host, use um nome totalmente qualificado para a sub-rede: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.
  3. Inicie a VM

    A migração pode levar alguns minutos. Portanto, aguarde para tentar iniciar a VM no novo local.

    gcloud beta compute instances start INSTANCE_NAME \
        --zone=ZONE_NAME

    em que

    • INSTANCE_NAME é o nome da instância de VM;
    • ZONE_NAME é o nome da zona que contém a instância.

API

  1. Pare a VM

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/stop
    

    em que

    • PROJECT_ID é o ID do projeto;
    • INSTANCE_NAME é o nome da instância de VM;
    • ZONE_NAME é o nome da zona que contém a instância.
  2. Receba a impressão digital da interface.

    A impressão digital é necessária para atualizar a interface da rede.

    GET https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NIC
    

    em que

    • PROJECT_ID é o ID do projeto;
    • INSTANCE_NAME é o nome da instância de VM;
    • ZONE_NAME é o nome da zona que contém a instância;
    • NIC é o nome da interface que você está atualizando. Em uma VM de interface única, o NIC é nic0.

    Copie a string no campo fingerprint para usar na próxima etapa.

  3. Migre a VM

    PATCH https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NIC
    {
      "network": NETWORK_NAME,
      "subnetwork": SUBNET_NAME,
      "networkIP": IP_ADDRESS,
      "name": NIC,
      "fingerprint": FINGERPRINT
    }
    • PROJECT_ID é o ID do projeto;
    • ZONE_NAME é o nome da zona que contém a instância;
    • INSTANCE_NAME é o nome da instância de VM;
    • NIC é o nome da interface que você está atualizando. Em uma VM de interface única, o NIC é nic0;
    • NETWORK_NAME é o nome da rede de destino. Se você estiver migrando a VM de uma rede de projetos de serviço para a de projeto de host, use um nome totalmente qualificado para a rede de destino: projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME;
    • SUBNET_NAME é o nome da sub-rede de destino. Essa sub-rede precisa estar na mesma região da VM. Se estiver migrando a VM de uma rede de projeto de serviço para a rede do projeto host, use um nome totalmente qualificado para a sub-rede: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME;
    • IP_ADDRESS é o endereço IP interno que você quer que a instância tenha no novo local. Se você omitir esse campo, a interface receberá um automaticamente;
    • FINGERPRINT é a impressão digital que você copiou do comando GET.
  4. Inicie a VM

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/start
    

    em que

    • PROJECT_ID é o ID do projeto;
    • INSTANCE_NAME é o nome da instância de VM;
    • ZONE_NAME é o nome da zona que contém a instância.

A seguir