Migra una VM entre redes

En esta página, se describe cómo migrar una instancia de VM de una red a otra. En el caso de una VM que esté conectada a más de una red mediante varias interfaces de red, este proceso actualiza una de las interfaces y deja el resto en su lugar.

Se admiten las siguientes migraciones:

  • De una red heredada a una red de VPC en el mismo proyecto
  • De una red de VPC a otra red de VPC en el mismo proyecto
  • De una subred de una red de VPC a otra subred de la misma red
  • De una red de proyectos de servicio a la red compartida de un proyecto host de VPC compartida

En todos los casos, la VM permanece en la región y la zona donde antes estaba. Solo cambia la red conectada.

Antes de comenzar

Requisitos

Antes de trasladar la VM, debes cumplir con los siguientes requisitos:

  • La migración es una migración “en frío”. La VM debe detenerse antes de migrarse.
  • La VM no debe estar en un grupo de instancias ni en un grupo de extremos de red (NEG).
    • Si la VM está en un grupo de instancias no administrado o en un NEG, debes quitarla del grupo antes de migrarla.
    • No se pueden migrar VM de grupos de instancias administrados. En su lugar, debes copiar tu plantilla de instancias a la nueva red y usarla para volver a compilar el grupo de instancias administrado.
    • Puedes mover instancias en grupos de destino sin quitarlas primero. El grupo de destino se expande para abarcar ambas redes.

Limitaciones

  • No puedes migrar una interfaz de VM a una red heredada.
  • La dirección MAC asignada a la interfaz de red cambiará durante la migración. Esto puede afectar los servicios que se asocian estrechamente con direcciones MAC, como el contrato de licencia de terceros.
  • Si vas a migrar la VM a una red o subred con un rango de IP diferente, debes cambiar la dirección IP interna de tu instancia. Si migras a una subred con el mismo rango de IP, puedes conservar la dirección IP anterior si la especificas durante la migración, siempre y cuando no esté en uso en el destino.
  • Si la subred de destino no tiene el mismo rango de IP que la fuente, la dirección IP de la interfaz cambia para que coincida con el nuevo rango de subred.
  • Puedes conservar la dirección IP externa existente de la VM en la ubicación nueva. Para ello, debes tener el permiso compute.subnetworks.useExternalIp en la red de destino y esta última no puede tener direcciones IP externas inhabilitadas mediante la restricción constraints/compute.vmExternalIpAccess..

Migrar una VM

Antes de migrar una VM, revisa los requisitos y las limitaciones.

Google recomienda que crees las reglas de firewall, las rutas, los balanceadores de cargas y otros recursos de infraestructura de red necesarios en la red nueva antes de migrar tus VM. Esto puede acortar el tiempo en que las VM están sin conexión.

Console

  1. En Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el nombre de la instancia de VM para abrir la página de detalles.

  3. Haz clic en Detener .

  4. Si aparece un diálogo de confirmación, haz clic en Detener.

  5. Después de que la VM se detenga, haz clic en Editar .

  6. En Interfaces de red, haz clic en la interfaz que deseas mover.

  7. En el campo Red de la interfaz, selecciona la red nueva para la interfaz.

  8. En el campo Subred de la interfaz, selecciona la subred nueva para la interfaz.

  9. En el campo Dirección IP interna, especifica Automática, si quieres que el sistema asigne una dirección IP del rango de subred, o Personalizada, si quieres especificar una que no esté en uso.

  10. Haz clic en Listo para cerrar el panel de edición de la interfaz de red.

  11. Haga clic en Guardar.

  12. Cuando la VM termine de guardarse, haz clic en Iniciar .

  13. Si aparece un diálogo de confirmación, haz clic en Iniciar.

gcloud

  1. Detén la VM

    gcloud compute instances stop INSTANCE_NAME \
        --zone=ZONE_NAME

    donde

    • INSTANCE_NAME es el nombre de la instancia de VM.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.
  2. Migra la VM

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

    donde

    • INSTANCE_NAME es el nombre de la instancia de VM.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.
    • NIC es el nombre de la interfaz que estás actualizando. En una VM de una sola interfaz, el NIC es nic0.
    • NETWORK_NAME es el nombre de la red de destino. Si migras la VM de una red de proyecto de servicio a la red de un proyecto host, debes usar un nombre calificado completo para la red de destino: projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME es el nombre de la subred de destino. Esta subred debe estar en la misma región que la VM. Si migras la VM de una red de proyecto de servicio a la red del proyecto host, debes usar un nombre calificado completo para la subred: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
  3. Inicia la VM

    La migración puede tardar unos minutos, así que espera antes de iniciar la VM en la nueva ubicación.

    gcloud compute instances start INSTANCE_NAME \
        --zone=ZONE_NAME

    donde

    • INSTANCE_NAME es el nombre de la instancia de VM.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.

API

  1. Detén la VM

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

    donde

    • PROJECT_ID es el ID del proyecto.
    • INSTANCE_NAME es el nombre de la instancia de VM.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.
  2. Obtén la huella digital para la interfaz.

    Necesitas la huella digital para actualizar la interfaz de red.

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

    donde

    • PROJECT_ID es el ID del proyecto.
    • INSTANCE_NAME es el nombre de la instancia de VM.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.
    • NIC es el nombre de la interfaz que estás actualizando. En una VM de una sola interfaz, el NIC es nic0.

    Copia la string en el campo fingerprint para usarla en el siguiente paso.

  3. Migra la VM

    PATCH https://www.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 es el ID del proyecto.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.
    • INSTANCE_NAME es el nombre de la instancia de VM.
    • NIC es el nombre de la interfaz que estás actualizando. En una VM de una sola interfaz, el NIC es nic0.
    • NETWORK_NAME es el nombre de la red de destino. Si migras la VM de una red de proyecto de servicio a la red de un proyecto host, debes usar un nombre calificado completo para la red de destino: projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME es el nombre de la subred de destino. Esta subred debe estar en la misma región que la VM. Si migras la VM de una red de proyecto de servicio a la red del proyecto host, debes usar un nombre calificado completo para la subred: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    • IP_ADDRESS es la dirección IP interna que debe tener la instancia en la nueva ubicación. Si omites este campo, se asignará una opción a la interfaz de forma automática.
    • FINGERPRINT es la huella digital que copiaste del comando GET.
  4. Inicia la VM

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

    donde

    • PROJECT_ID es el ID del proyecto.
    • INSTANCE_NAME es el nombre de la instancia de VM.
    • ZONE_NAME es el nombre de la zona que contiene la instancia.

¿Qué sigue?