다수의 네트워크 인터페이스가 있는 VM 만들기

기본적으로 Virtual Private Cloud(VPC) 네트워크의 모든 가상 머신(VM) 인스턴스에는 단일 네트워크 인터페이스가 있습니다. 그러나 지원되는 머신 시리즈 및 유형에서는 여러 네트워크 인터페이스로 인스턴스를 구성할 수 있습니다. 인스턴스에서 여러 네트워크 인터페이스를 사용할 때 각 인터페이스는 다른 VPC 네트워크에 있는 서브넷에 연결해야 합니다. 동일한 서브넷 또는 동일한 VPC 네트워크에 있는 서브넷에 여러 네트워크 인터페이스를 연결할 수 없습니다.

네트워크 인터페이스가 여러 개 필요하지 않은 경우 인스턴스 만들기 및 시작 절차를 따라 기본 네트워크 구성으로 인스턴스를 만듭니다.

다중 네트워크 인터페이스와 그 작동 방식에 대한 자세한 내용은 다중 네트워크 인터페이스를 참조하세요.

시작하기 전에

IAM 역할

다중 네트워크 인터페이스가 포함된 인스턴스를 만들려면 다음 역할 중 하나를 부여받아야 합니다.

공유 VPC를 사용하지 않는 프로젝트에서 다중 인터페이스가 포함된 인스턴스 및 인스턴스 템플릿 생성 및 삭제: 프로젝트 수준에서 소유자, 편집자 또는 Compute 인스턴스 관리자(v1) 역할을 가진 사용자는 동일한 프로젝트에 포함된 VPC 네트워크 및 서브넷과 연결된 다중 인터페이스가 있는 인스턴스를 만들 수 있습니다.

공유 VPC 환경에서 다중 인터페이스가 포함된 인스턴스와 인스턴스 템플릿 생성 및 삭제: 프로젝트 수준에서 소유자, 편집자 또는 Compute 인스턴스 관리자(v1) 역할을 가진 사용자는 다중 인터페이스가 포함된 인스턴스를 만들 수 있습니다. 공유 VPC 호스트 프로젝트의 서브넷에 연결된 인터페이스가 있는 경우, 공유 VPC 호스트 프로젝트 수준 또는 공유 VPC 서브넷 수준에서 Compute 네트워크 사용자 역할(roles/compute.networkUser){101)도 있어야 합니다.

권한에 대한 자세한 내용은 Compute Engine IAM 문서를 참조하세요.

다수의 네트워크 인터페이스가 있는 VM 인스턴스 만들기

인스턴스 생성에 대한 일반적인 안내는 VM 인스턴스 만들기 및 시작을 참조하세요.

첫 번째로 생성되는 인터페이스는 항상 nic0이며 기본 인터페이스입니다. 이 점은 Google Cloud네트워킹의 다른 몇 가지 측면에서 중요합니다. 예를 들어 패스 스루 네트워크 부하 분산기를 제외한 Google Cloud 부하 분산기만 nic0에 트래픽을 분산합니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. 이름 필드에 인스턴스의 이름을 입력합니다.

  3. 리전 필드에서 리전을 선택합니다.

  4. 영역 필드에서 영역을 선택합니다.

  5. 고급 옵션 섹션에서 네트워킹을 펼친 후 다음을 수행합니다.

    1. 네트워크 인터페이스 섹션에서 네트워크 인터페이스를 확장하여 수정합니다.

    2. 네트워크서브네트워크에서 사용할 네트워크와 서브네트워크를 선택합니다.

      인터페이스에서 IPv6 주소를 구성하려면 IPv6 주소 범위가 구성된 서브넷을 선택하세요. 서브넷의 IPv6 액세스 유형에 따라 VM이 내부 IPv6 주소 또는 외부 IPv6 주소를 수신하는지가 결정됩니다.

    3. 인터페이스의 IP 스택 유형에 대해 다음 옵션 중 하나를 선택합니다.

      • IPv4(단일 스택)
      • IPv4 및 IPv6(이중 스택)
      • IPv6(단일 스택)(프리뷰)
    4. IPv4 주소가 있는 인터페이스의 경우 다음 단계를 따르세요.

      1. 기본 내부 IPv4 주소에서 다음 중 하나를 선택합니다.

        • 임시: 새 임시 IPv4 주소 할당
        • 목록의 예약된 고정 내부 IPv4 주소
        • 고정 내부 IPv4 주소 예약: 새 고정 내부 IPv4 주소 예약 및 할당
      2. 외부 IPv4 주소에 대해 다음 중 하나를 선택합니다.

        • 임시: 새 임시 IPv4 주소 할당
        • None(없음): 외부 IPv4 주소를 할당하지 않음
        • 목록의 예약된 고정 IPv4 주소
        • 고정 외부 IP 주소 예약: 새 고정 외부 IPv4 주소 예약 및 할당
    5. IPv6 주소가 있는 인터페이스의 경우 연결된 서브넷의 액세스 유형에 따라 다음을 실행합니다.

      1. 기본 내부 IPv6 주소에서 다음 중 하나를 선택합니다.
        • 자동 할당: 새 임시 내부 IPv6 주소를 자동으로 할당
        • 목록의 예약된 고정 내부 IPv6 주소
        • 고정 내부 IPv6 주소 예약: 새 고정 내부 IPv6 주소 예약 및 할당
      2. 외부 IPv6 주소에서 다음 중 하나를 선택합니다.
        • 자동 할당: 새 임시 외부 IPv6 주소를 자동으로 할당
        • 목록의 예약된 고정 외부 IPv6 주소
        • 고정 외부 IPv6 주소 예약: 새 고정 외부 IPv6 주소 예약 및 할당
    6. 네트워크 인터페이스 수정을 완료하려면 완료를 클릭합니다.

  6. 다른 인터페이스를 추가하려면 네트워크 인터페이스 추가를 클릭합니다.

  7. VM 만들기 프로세스를 계속 진행합니다.

  8. 만들기를 클릭합니다.

gcloud

새 인스턴스에 네트워크 인터페이스를 만들려면 instances create 명령어를 사용합니다.

각 인터페이스에 --network-interface 플래그를 포함한 후 network, subnet, private-network-ip, address, external-ipv6-address 등 적절한 네트워킹 키를 추가합니다. 다중 인터페이스가 포함된 VM을 만드는 방법의 예시는 구성 예시를 참조하세요.

이 스니펫은 --network-interface 인스턴스를 만들 때 지정할 수 있는 여러 매개변수 중 하나입니다.

필요한 네트워크 인터페이스 수를 지원하는 머신 유형을 보려면 네트워크 인터페이스 최대 개수 테이블을 참조하세요.

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        private-network-ip=INTERNAL_IPV4_ADDRESS, \
        address=EXTERNAL_IPV4_ADDRESS | no-address, \
        internal-ipv6-address=INTERNAL_IPV6_ADDRESS \
    ...
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96, \
        ipv6-network-tier=PREMIUM \
    ...

다음을 바꿉니다.

  • INSTANCE_NAME: 만들려는 VM 인스턴스의 이름
  • ZONE: 인스턴스가 생성되는 영역
  • NETWORK: 인터페이스가 연결되는 네트워크
  • SUBNET: 인터페이스가 연결되는 서브넷
  • STACK_TYPE: 인터페이스의 스택 유형

    기본값은 IPV4_ONLY입니다. 이중 스택 인터페이스를 구성하려면 IPV4_IPV6를 지정하고 IPv6 전용 인터페이스(프리뷰)를 구성하려면 IPV6_ONLY를 지정합니다

  • IPv4 주소가 있는 인터페이스의 값:

    • INTERNAL_IPV4_ADDRESS: 인터페이스가 대상 서브넷에 포함할 내부 IPv4 주소입니다. 유효한 주소가 할당되기만 하면 되는 경우에는 생략합니다.
    • EXTERNAL_IPV4_ADDRESS: 인터페이스의 외부 IPv4 주소입니다.

      이전에 외부 IPv4 주소를 예약했어야 합니다. 인터페이스에 외부 IP 주소가 사용되지 않도록 하려면 address=EXTERNAL_IPV4_ADDRESS 대신 'no-address'를 지정합니다. 인터페이스에 임시 외부 IP 주소가 수신되도록 하려면 address=''을 지정합니다.

  • IPv6 주소가 있는 인터페이스의 값:

    • INTERNAL_IPV6_ADDRESS: 인터페이스가 대상 서브넷에 포함할 내부 IPv4 주소입니다. 지정하지 않으면Google Cloud 는 서브넷에서 내부 IPv6 주소를 자동으로 할당합니다.
    • EXTERNAL_IPV6_ADDRESS: 인터페이스가 대상 서브넷에 포함할 외부 IPv6 주소입니다. 이전에 외부 IPv6 주소를 예약했어야 합니다. 지정하지 않으면Google Cloud 가 서브넷에서 외부 IPv6 주소를 자동으로 할당합니다.

API

instances.insert 메서드를 사용하여 여러 네트워크 인터페이스가 있는 VM 인스턴스를 만들 수 있습니다.

  • 내부 IPv4 주소만 있는 VM 인스턴스를 만들려면 다음 단계를 따르세요.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "networkIP": "IPV4_ADDRESS",
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트의 ID입니다.
    • ZONE: 인스턴스를 포함하는 영역입니다.
    • IPV4_ADDRESS: 네트워크 인터페이스에 할당하려는 내부 IPv4 주소입니다.
    • REGION: 인스턴스가 포함된 리전입니다.
    • SUBNET: 네트워크 인터페이스가 위치한 서브넷입니다.
  • 내부 IPv4 주소와 내부 IPv6 주소가 모두 있는 VM 인스턴스를 만들려면 다음 안내를 따르세요.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV4_IPV6,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트의 ID입니다.
    • ZONE: 인스턴스를 포함하는 영역입니다.
    • REGION: 인스턴스가 포함된 리전입니다.
    • SUBNET: 네트워크 인터페이스가 위치한 서브넷입니다.
    • IPV6_ADDRESS: 인터페이스가 대상 서브넷에 포함할 내부 IPv4 주소입니다. 지정하지 않으면Google Cloud 는 서브넷에서 내부 IPv6 주소를 자동으로 할당합니다.
  • 내부 IPv6 주소만 있는 VM 인스턴스(프리뷰)를 만들려면 다음 단계를 따르세요.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV6_ONLY,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트의 ID입니다.
    • ZONE: 인스턴스를 포함하는 영역입니다.
    • REGION: 인스턴스가 포함된 리전입니다.
    • SUBNET: 네트워크 인터페이스가 위치한 서브넷입니다.
    • IPV6_ADDRESS: 인터페이스가 대상 서브넷에 포함할 내부 IPv4 주소입니다. 지정하지 않으면Google Cloud 는 서브넷에서 내부 IPv6 주소를 자동으로 할당합니다.

Terraform

Terraform 리소스를 사용하여 여러 네트워크 인터페이스로 VM 인스턴스를 만들 수 있습니다.

Terraform 인수에는 변경할 수 있는 예시 값이 있습니다.

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace with your project ID in quotes
  zone         = "us-central1-b"
  name         = "backend-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = var.subnet_1 # Replace with self link to a subnetwork in quotes
    network_ip = "10.0.0.14"
  }
  network_interface {
    subnetwork = var.subnet_2 # Replace with self link to a subnetwork in quotes
    network_ip = "10.10.20.14"
  }
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

구성 예시

다음 섹션에서는 인터페이스가 여러 개 있는 VM을 만드는 방법을 설명합니다.

IPv4 주소만으로 다중 네트워크 인터페이스 구성

다음 샘플 명령어는 네트워크 인터페이스가 3개 있는 인스턴스를 만듭니다.

 gcloud compute instances create vm1 --machine-type=n1-standard-4 \
    --network-interface '' \
    --network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \
    --network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address

인터페이스가 다음과 같이 생성됩니다.

  • nic0은 기본 설정으로 생성됩니다. 인터페이스는 자동으로 할당된 내부 IP 주소와 임시 외부 IP 주소를 사용하여 기본 VPC 네트워크의 서브넷에 연결됩니다.

  • nic1은 내부 IPv4 주소 10.10.10.2 및 고정 외부 IPv4 주소 EXTERNAL_IPV4_ADDRESS를 사용하여 net1 네트워크의 subnet-a 서브넷에 연결됩니다.

  • nic2는 내부 IPv4 주소 10.10.20.2를 사용하고 외부 IP 주소가 없는 net2 네트워크의 subnet-b 서브넷에 연결됩니다.

gcloud compute instances create 명령어와 --network-interface 플래그에 대한 자세한 내용은 명령어 관련 문서를 참조하세요.

DNS 전달을 설정하도록 추가한 네트워크 인터페이스의 IP 주소를 사용할 수 있습니다. Cloud DNS 전달 영역 구성에 대한 자세한 내용은 전달 영역을 참조하세요.

IPv4 및 IPv6 주소 모두로 다중 네트워크 인터페이스 구성

다음 샘플 명령어는 2개의 네트워크 인터페이스가 있는 이중 스택 인스턴스를 만듭니다.

gcloud compute instances create vm1 \
    --network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \
    --network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=ZONE_A

인터페이스가 다음과 같이 생성됩니다.

  • nic0은 임시 내부 IPv4 주소 및 임시 내부 IPv6 주소를 사용하여 dual-int 네트워크의 int-subnet 서브넷에 연결됩니다.

  • nic1은 임시 내부 IPv4 주소 및 임시 외부 IPv6 주소를 사용하여 dual-ext 네트워크의 ext-subnet 서브넷에 연결됩니다.

IPv6 주소만으로 다중 네트워크 인터페이스 구성

다음 샘플 명령어는 네트워크 인터페이스가 3개인 IPv6 전용 인스턴스(프리뷰)를 만듭니다.

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int-a,subnet=int-subnet-a,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-int-b,subnet=int-subnet-b,stack-type=IPV6_ONLY,internal-ipv6-address=fd20:db8:0:0:1:0:: \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM,external-ipv6-address=EXTERNAL_IPV6_ADDRESS \
    --machine-type=n1-standard-4 --zone=us-west2-a

인터페이스가 다음과 같이 생성됩니다.

  • nic0은 자동으로 할당된 임시 내부 IPv6 주소를 사용하여 ipv6-only-int-a 네트워크의 int-subnet-a 서브넷에 연결됩니다.

  • nic1은 커스텀 임시 내부 IPv6 주소 fd20:db8:0:0:1:0::/96을 사용하여 ipv6-only-int-b 네트워크의 int-subnet-b 서브넷에 연결됩니다.

  • nic2는 고정 외부 IPv6 주소 EXTERNAL_IPV6_ADDRESS를 사용하여 ipv6-only-ext 네트워크의 ext-subnet 서브넷에 연결됩니다.

인스턴스 그룹에 다중 네트워크 인터페이스 구성

비관리형 인스턴스 그룹 및 관리형 인스턴스 그룹에 다중 네트워크 인터페이스가 포함된 인스턴스를 사용할 수 있습니다.

비관리형 인스턴스 그룹의 경우 각 인스턴스를 개별적으로 생성하여 각 VM에 대한 nic0 네트워크 인터페이스가 동일한 서브넷에 연결되도록 해야 합니다. 그런 다음 VM 인스턴스를 비관리형 인스턴스 그룹에 추가합니다.

관리형 인스턴스 그룹에 다중 네트워크 인터페이스를 구성하려면 각 인터페이스에 --network-interface 플래그를 한 번 설정하여 인스턴스 템플릿의 각 인터페이스에 네트워크 구성을 지정해야 합니다. 다음 샘플에서는 3개의 네트워크 인터페이스가 있는 인스턴스 템플릿을 만듭니다.

gcloud compute instance-templates create template-1 \
    --network-interface subnet=net0-subnet-a \
    --network-interface subnet=net1-subnet-b,no-address \
    --network-interface subnet=net2-subnet-c,no-address \
    --region REGION_A

프로젝트의 각 리전에서 서브넷 이름은 고유해야 하므로 이름으로 서브넷을 지정하면 각 인터페이스가 VPC 네트워크와 암시적으로 연결됩니다. 각 인터페이스는 고유 VPC 네트워크에 있는 서브넷을 사용해야 합니다.

  • nic0net0-subnet-a 서브넷을 사용합니다.
  • nic1net1-subnet-b 서브넷을 사용합니다.
  • nic2net2-subnet-c 서브넷을 사용합니다.

--network-interface 플래그의 no-address 옵션은 인터페이스가 외부 IPv4 주소 없이 구성되었음을 나타냅니다. 내부 IP 주소는 인터페이스에서 사용하는 서브넷에서 가져옵니다. 플래그 및 구문에 대한 자세한 내용은 instance-templates create 명령어에 대한 --network-interface 플래그를 참조하세요.