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

  • Leia a documentação da nuvem privada virtual.
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

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 Google Cloud, acesse a página Instâncias de VMs.

    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 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 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 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.

REST

  1. Pare a VM

    POST https://compute.googleapis.com/compute/v1/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. Ver detalhes da instância.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME
    

    em que

    • 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;
  3. Encontre a impressão digital da interface.

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

    Examine a saída do comando e encontre o conteúdo do campo networkInterfaces. Encontre o item com o nome da interface que você quer atualizar. Em uma VM de interface única, o nome é nic0. Copie a string no campo fingerprint deste item para usar na próxima etapa.

  4. Migre a VM

    PATCH https://compute.googleapis.com/compute/v1/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ê recebeu na etapa anterior.
  5. Inicie a VM

    POST https://compute.googleapis.com/compute/v1/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