네트워크 간 VM 마이그레이션

이 페이지에서는 VM 인스턴스를 한 네트워크에서 다른 네트워크로 마이그레이션하는 방법을 설명합니다. 네트워크 인터페이스 여러 개를 사용하여 네트워크 두 개 이상에 연결된 VM의 경우 이 프로세스는 인터페이스 중 하나를 업데이트하고 나머지 인터페이스는 그대로 둡니다.

지원되는 마이그레이션은 다음과 같습니다.

  • 동일한 프로젝트의 기존 네트워크에서 VPC 네트워크로
  • 동일한 프로젝트의 한 VPC 네트워크에서 다른 VPC 네트워크로
  • VPC 네트워크의 한 서브넷에서 동일한 네트워크의 다른 서브넷으로
  • 서비스 프로젝트 네트워크에서 공유 VPC 호스트 프로젝트의 공유 네트워크로

위 모든 경우 VM은 이전과 동일한 리전과 영역에서 유지됩니다. 연결된 네트워크만 변경됩니다.

시작하기 전에

요구사항

VM을 이동하기 전에 다음 요구사항을 충족해야 합니다.

  • 마이그레이션은 '콜드' 마이그레이션입니다. VM을 마이그레이션하려면 중지해야 합니다.
  • VM이 인스턴스 그룹이나 네트워크 엔드포인트 그룹(NEG)에 있으면 안 됩니다.
    • VM이 비관리형 인스턴스 그룹이나 NEG에 있는 경우 마이그레이션하기 전에 그룹에서 VM을 제외해야 합니다.
    • 관리형 인스턴스 그룹의 VM을 마이그레이션할 수 없습니다. 대신 인스턴스 템플릿을 새 네트워크에 복사하고 이를 사용하여 관리형 인스턴스 그룹을 다시 빌드해야 합니다.
    • 인스턴스를 먼저 삭제하지 않고 대상 풀에서 이동할 수 있습니다. 그러면 대상 풀이 확장되어 두 네트워크를 모두 포함합니다.

제한사항

  • VM 인터페이스를 기존 네트워크로 마이그레이션할 수 없습니다.
  • 네트워크 인터페이스에 할당된 MAC 주소는 마이그레이션 중에 변경됩니다. 이는 타사 라이선스 계약과 같은 MAC 주소와 밀접하게 연결된 서비스에 영향을 줄 수 있습니다.
  • VM을 IP 범위가 다른 네트워크나 서브넷으로 마이그레이션하는 경우 인스턴스의 내부 IP 주소를 변경해야 합니다. 동일한 IP 범위의 서브넷으로 마이그레이션하는 경우 대상 위치에서 이미 사용 중이지 않는 한 마이그레이션 중에 IP 주소를 지정하여 이전 IP 주소를 유지할 수 있습니다.
  • 대상 서브넷에 소스와 동일한 IP 범위가 없으면 인터페이스의 IP 주소가 새 서브넷 범위와 일치하도록 변경됩니다.
  • VM의 기존 외부 IP 주소를 새 위치에서 유지할 수 있습니다. 이렇게 하려면 대상 네트워크에 대한 compute.subnetworks.useExternalIp 권한이 있어야 하며 대상 네트워크에는 constraints/compute.vmExternalIpAccess 제약조건으로 인해 중지된 외부 IP 주소가 있을 수 없습니다.

VM 마이그레이션

VM을 마이그레이션하기 전에 요구사항제한사항을 검토합니다.

VM을 마이그레이션하기 전에 필요한 방화벽 규칙, 경로, 부하 분산기, 기타 네트워크 인프라 리소스를 새 네트워크에 만드는 것이 좋습니다. 이렇게 하면 VM이 오프라인 상태인 시간을 줄일 수 있습니다.

Console

  1. Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. VM 인스턴스 이름을 클릭하여 세부정보 페이지를 엽니다.

  3. 중지 를 클릭합니다.

  4. 확인 대화상자가 표시되면 중지를 클릭합니다.

  5. VM이 중지되면 수정 을 클릭합니다.

  6. 네트워크 인터페이스에서 이동할 인터페이스를 클릭합니다.

  7. 인터페이스의 네트워크 필드에서 인터페이스의 새 네트워크를 선택합니다.

  8. 인터페이스의 서브네트워크 필드에서 인터페이스의 새 서브넷을 선택합니다.

  9. 내부 IP 주소 필드에서 시스템에서 서브넷 범위의 IP 주소를 할당하도록 하려면 자동을, 사용되지 않은 IP 주소를 직접 지정하려면 커스텀을 지정합니다.

  10. 완료를 클릭하여 네트워크 인터페이스 수정 패널을 닫습니다.

  11. 저장을 클릭합니다.

  12. VM 저장이 완료되면 시작 을 클릭합니다.

  13. 확인 대화상자가 표시되면 시작을 클릭합니다.

gcloud

  1. VM을 중지합니다.

    gcloud compute instances stop INSTANCE_NAME \
        --zone=ZONE_NAME

    각 항목의 의미는 다음과 같습니다.

    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.
  2. VM을 마이그레이션합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.
    • NIC는 업데이트할 인터페이스의 이름입니다. 단일 인터페이스 VM에서 NICnic0입니다.
    • NETWORK_NAME은 대상 네트워크 이름입니다. 서비스 프로젝트 네트워크에서 호스트 프로젝트 네트워크로 VM을 마이그레이션하는 경우 대상 네트워크에 정규화된 이름을 사용해야 합니다. projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME은 대상 서브넷 이름입니다. 이 서브넷은 VM과 같은 리전에 있어야 합니다. 서비스 프로젝트 네트워크에서 호스트 프로젝트 네트워크로 VM을 마이그레이션하는 경우 서브넷에 정규화된 이름을 사용해야 합니다. projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
  3. VM을 시작합니다.

    마이그레이션에 몇 분 정도 걸릴 수 있으므로 새 위치에서 VM을 시작하기 전에 잠시 기다립니다.

    gcloud compute instances start INSTANCE_NAME \
        --zone=ZONE_NAME

    각 항목의 의미는 다음과 같습니다.

    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.

API

  1. VM을 중지합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • PROJECT_ID는 프로젝트 ID입니다.
    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.
  2. 인터페이스의 지문을 가져옵니다.

    네트워크 인터페이스를 업데이트하려면 지문이 필요합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • PROJECT_ID는 프로젝트 ID입니다.
    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.
    • NIC는 업데이트할 인터페이스의 이름입니다. 단일 인터페이스 VM에서 NICnic0입니다.

    다음 단계에서 사용할 수 있도록 fingerprint 필드의 문자열을 복사합니다.

  3. 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는 프로젝트 ID입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.
    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • NIC는 업데이트할 인터페이스의 이름입니다. 단일 인터페이스 VM에서 NICnic0입니다.
    • NETWORK_NAME은 대상 네트워크 이름입니다. 서비스 프로젝트 네트워크에서 호스트 프로젝트 네트워크로 VM을 마이그레이션하는 경우 대상 네트워크에 정규화된 이름을 사용해야 합니다. projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME은 대상 서브넷 이름입니다. 이 서브넷은 VM과 같은 리전에 있어야 합니다. 서비스 프로젝트 네트워크에서 호스트 프로젝트 네트워크로 VM을 마이그레이션하는 경우 서브넷에 정규화된 이름을 사용해야 합니다. projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    • IP_ADDRESS는 새 위치에서 인스턴스에 할당할 내부 IP 주소입니다. 이 필드를 생략하면 인터페이스에 자동으로 할당됩니다.
    • FINGERPRINT는 GET 명령어로 복사한 지문입니다.
  4. VM을 시작합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • PROJECT_ID는 프로젝트 ID입니다.
    • INSTANCE_NAME은 VM 인스턴스 이름입니다.
    • ZONE_NAME은 인스턴스가 포함된 영역의 이름입니다.

다음 단계