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

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

IPv4 주소만(단일 스택) 또는 IPv4 주소와 IPv6 주소(이중 스택)가 모두 있는 VM 인터페이스를 구성할 수 있습니다.

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

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

사양

  • 인스턴스를 만들 때 네트워크 인터페이스를 하나만 구성할 수 있습니다.
  • 다중 네트워크 인터페이스가 포함된 인스턴스를 만들 경우 각 인터페이스는 서로 다른 VPC 네트워크에 연결되어야 합니다. 네트워크는 독립형 VPC 네트워크 또는 공유 VPC 네트워크일 수 있습니다.
  • 네트워크 인터페이스는 동일한 인스턴스에서 다른 인터페이스의 IP 주소 범위와 겹치지 않는 IP 주소 범위를 가진 서브넷에 연결되어야 합니다.
  • 여러 VPC 네트워크의 서브넷에 연결된 VM을 만들려면 인스턴스를 만들기 전에 모든 네트워크와 서브넷이 있어야 합니다. 네트워크 및 서브넷 만들기에 대한 자세한 내용은 VPC 네트워크 만들기 및 관리를 참조하세요.
  • 네트워크 인터페이스가 연결된 인스턴스를 삭제하지 않고는 네트워크 인터페이스를 삭제할 수 없습니다.
  • 각 인스턴스에는 인스턴스의 머신 유형에 따라 최소 1개의 네트워크 인터페이스와 최대 8개의 인터페이스가 있어야 합니다.

    • nic0은 필수이며 인스턴스 생성 시 구성해야 합니다.
    • nic1~nic7은 선택 사항이지만 마찬가지로 인스턴스 생성 시 구성해야 합니다.

    자세한 내용은 인터페이스 최대 개수를 참조하세요.

  • 필요할 경우 각 인터페이스에 외부 IPv4 주소를 지정할 수 있습니다.

  • 내부 또는 외부 IPv6 서브넷 범위가 있는 서브넷에 VM을 연결하는 경우 선택적으로 내부 또는 외부 IPv6 주소를 구성할 수 있습니다.

  • Google Cloud의 DHCP 서버는 기본 경로(RFC 3442, '클래스 없는 정적 경로')를 기본 네트워크 인터페이스인 nic0으로만 전송합니다. 다른 네트워크 인터페이스에 기본 경로가 필요하면 인스턴스에 정책 라우팅을 구성해야 합니다.

  • 모든 VM 네트워크 인터페이스는 VM과 동일한 프로젝트에 있는 네트워크의 서브넷 또는 프로젝트와 공유된 공유 VPC 네트워크에 연결되어야 합니다.

제한사항

  • 기존 VM에 네트워크 인터페이스를 추가 또는 삭제할 수 없습니다.

  • IP 전달은 VM 수준에서 사용 설정되며 개별 인터페이스에 적용할 수 없습니다.

다중 네트워크 인터페이스가 포함된 인스턴스, 권한, IAM

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

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

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

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

여러 VPC 네트워크 유형에서 다중 네트워크 인터페이스 사용

  • 이전 네트워크에서는 다중 네트워크 인터페이스가 지원되지 않습니다.
  • 다중 네트워크 인터페이스를 구성할 경우 각 인터페이스를 자동 모드 VPC 네트워크 또는 커스텀 모드 VPC 네트워크에 연결합니다.

네트워크 인터페이스 IP 주소 할당

  • 서브넷의 기본 IP 주소 범위로부터 할당된 기본 내부 IP 주소로 각 네트워크 인터페이스를 구성해야 합니다.
    • 단일 인스턴스에서 각 인스턴스에 할당되는 기본 내부 주소는 서로 달라야 합니다.
  • 고유 외부 IP 주소로 각 가상 인터페이스(NIC)를 구성하도록 선택할 수 있습니다. 외부 주소는 임시 주소 또는 예약된 주소일 수 있습니다.

네트워크 인터페이스의 최대 개수

가상 네트워크 인터페이스 수는 2~8개의 vCPU 수로 확장됩니다.

다음 표에서 인스턴스 하나에 네트워크 인터페이스 몇 개를 연결할 수 있는지 확인하세요.

vCPU 개수 vNIC 개수
2 이하 2
4 최대 4개
6 최대 6개
8개 이상 최대 8개

시작하기 전에

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

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

인스턴스를 만들 때 다중 네트워크 인터페이스를 추가할 수 있습니다.

  • Google Cloud 콘솔의 네트워킹 > 네트워크 인터페이스 섹션에 있는 인스턴스 만들기 페이지에서 네트워크 인터페이스를 추가합니다.
  • gcloud CLI에서 instances create 명령어를 사용합니다. 각 인터페이스에 --network-interface 플래그를 포함한 후 ([network | subnet], private-network-ip, address, external-ipv6-address) 등 적절한 네트워킹 키를 추가합니다.

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

콘솔

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

    인스턴스 만들기로 이동

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

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

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

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

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

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

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

    1. IP 스택 유형 선택: IPv4(단일 스택) 또는 IPv4 및 IPv6(이중 스택)

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

      • 임시: 새 임시 IPv4 주소 할당
      • 목록의 예약된 고정 내부 IPv4 주소
      • 고정 내부 IPv4 주소 예약: 새 고정 내부 IPv4 주소 예약 및 할당
    3. 기본 내부 IPv6 주소에서 다음 중 하나를 선택합니다.

      • 자동 할당: 새로운 고정 내부 IPv6 주소 자동 할당
      • 목록의 예약된 고정 내부 IPv6 주소
      • 고정 내부 IPv6 주소 예약: 새 고정 내부 IPv6 주소 예약 및 할당
    4. 외부 IPv4 주소에 대해 다음 중 하나를 선택합니다.

      • 임시: 새 임시 IPv4 주소 할당
      • None(없음): 외부 IPv4 주소를 할당하지 않음
      • 목록의 예약된 고정 IPv4 주소
      • 고정 외부 IP 주소 예약: 새 고정 외부 IPv4 주소 예약 및 할당
    5. 외부 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, \
        address=EXTERNAL_IPV4_ADDRESS | no-address, \
        private-network-ip=INTERNAL_IPV4_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를 지정합니다.

  • EXTERNAL_IPV4_ADDRESS: 이름이 지정된 외부 IPv4 주소를 인터페이스에 할당합니다.

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

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

  • INTERNAL_IPV6_ADDRESS: 인터페이스가 대상 서브넷에 포함할 내부 IPv6 주소입니다. 이 플래그를 생략하면 내부 IPv6 주소가 할당되지 않습니다.

  • EXTERNAL_IPV6_ADDRESS: 이름이 지정된 외부 IPv4 주소를 인터페이스에 할당합니다.

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

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/SUBNETWORK"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    다음을 바꿉니다.

    • SUBNET: 네트워크 인터페이스가 있는 서브넷입니다.
    • REGION: 인스턴스가 포함된 리전입니다.
    • PROJECT_ID: 인스턴스가 포함된 프로젝트의 ID입니다.
    • ZONE: 인스턴스를 포함하는 영역입니다.
    • IPV4_ADDRESS: 네트워크 인터페이스에 할당할 내부 IPv4 주소입니다.
  • 내부 IPv6 주소로 VM 인스턴스를 만들려면 다음을 수행합니다.

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

    다음을 바꿉니다.

    • SUBNET: 네트워크 인터페이스가 있는 서브넷입니다.
    • REGION: 인스턴스가 포함된 리전입니다.
    • PROJECT_ID: 인스턴스가 포함된 프로젝트의 ID입니다.
    • ZONE: 인스턴스를 포함하는 영역입니다.
    • IPV6_ADDRESS: 네트워크 인터페이스에 할당할 내부 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 플래그에 대한 자세한 내용은 명령어 관련 문서를 참조하세요.

추가한 네트워크 인터페이스의 IP 주소를 사용하여 DNS 전달을 설정할 수 있습니다. 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=us-west2-a

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

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

  • nic1은 임시 내부 IPv4 주소 및 임시 외부 IPv6 주소를 사용하여 dual-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 us-central1

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

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

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

정책 라우팅 구성

Google에서 지원하는 이미지의 경우 보조 네트워크 인터페이스(nic0를 제외한 인터페이스)와 연결된 서브넷의 기본 서브넷 범위의 로컬에 있지 않은 IP 주소와 통신하기 위해 보조 네트워크 인터페이스가 필요할 때는 이그레스 패킷이 올바른 인터페이스를 통해 나가도록 정책 라우팅을 구성해야 합니다. 이러한 경우, 정책 라우팅을 사용하여 각 네트워크 인터페이스에 별도의 라우팅 테이블을 구성해야 합니다.

Windows 운영체제에서는 소스 기반 정책 라우팅이 지원되지 않습니다.

인터페이스의 기본 게이트웨이 찾기

메타데이터 서버를 쿼리하여 VM 인터페이스의 기본 게이트웨이를 찾을 수 있습니다.

  • 인터페이스 IPv4 주소의 기본 게이트웨이를 찾으려면 VM에서 다음 요청을 수행합니다.

    curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/INTERFACE_NUMBER/gateway -H "Metadata-Flavor: Google"
    

    INTERFACE_NUMBER를 인터페이스 번호로 바꾸세요. 예를 들어 nic1의 기본 게이트웨이를 찾으려면 1을 사용합니다.

  • 인터페이스 IPv6 주소의 기본 게이트웨이를 찾으려면 VM에서 다음 요청을 수행합니다.

    curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/INTERFACE_NUMBER/gateway-ipv6 -H "Metadata-Flavor: Google"
    

    INTERFACE_NUMBER를 인터페이스 번호로 바꾸세요. 예를 들어 nic1의 기본 게이트웨이를 찾으려면 1을 사용합니다.

Linux VM에 정책 기반 라우팅 구성

기본 경로를 변경하는 동안 VM 연결이 끊어지지 않도록 하려면 직렬 콘솔을 사용하세요.

  • ifconfig를 사용하여 각 보조 인터페이스에 정책 라우팅을 구성합니다. 기본 인터페이스(nic0)는 경로가 구성되었으므로 기본 인터페이스를 구성하지 마세요.

    sudo ifconfig NIC IP_ADDRESS netmask NETMASK broadcast IP_ADDRESS mtu 1430
    echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables
    sudo ip route add GATEWAY src IP_ADDRESS dev NIC table rt1
    sudo ip route add default via GATEWAY dev NIC table rt1
    sudo ip rule add from IP_ADDRESS/PREFIX_LENGTH table rt1
    sudo ip rule add to IP_ADDRESS/PREFIX_LENGTH  table rt1
    

    다음을 바꿉니다.

    • NIC: 경로를 추가하려는 인터페이스입니다. (예: eth1)
    • IP_ADDRESS: 인터페이스에 구성된 IP 주소입니다.
    • NETMASK: 인터페이스의 이름입니다(예: 255.255.255.255).
    • GATEWAY: 인터페이스의 기본 게이트웨이 IP 주소입니다.
    • PREFIX_LENGTH: 구성된 IP 주소의 프리픽스 길이입니다.

Ubuntu 버전 18.04 이상에서 정책 기반 라우팅 구성

Ubuntu 18.04 LTS 이상의 기본 네트워크 구성 유틸리티로 ifupdown에서 Netplan으로 전환하면 ifconfig 패키지가 사전 설치되지 않습니다. 또한 Netplan의 네트워크 구성 파일에 대한 변경사항은 Compute Engine VM 재부팅 시 유지되지 않습니다.

  1. VM 시작 시 각 네트워크 인터페이스의 라우팅 테이블을 설정하는 시작 스크립트를 만듭니다. 시작 스크립트를 만드는 방법을 자세히 알아보세요.

    파티션이 마운트된 후에만 실행되므로 VM에 파일 공유를 마운트하는 경우에는 시작 스크립트를 사용할 수 없습니다. 이렇게 하면 시작 스크립트로 라우팅 테이블을 만들기 전에 파일 공유가 항상 기본 인터페이스에 마운트됩니다.

  2. 보조 네트워크 즉, nic0 이외의 인터페이스를 통해 VM에 파일 공유를 마운트하려면 파일 공유가 올바른 네트워크 인터페이스를 통해 마운트되도록 클라이언트 VM의 라우팅 정책을 구성해야 합니다. 이렇게 하려면 다음 파일을 수정하세요.

    • /etc/default/instance_configs.cfg에서 NetworkInterfacessetup 플래그를 false로 설정합니다.

      [NetworkInterfaces]
      dhclient_script = /sbin/google-dhclient-script
      dhcp_command =
      ip_forwarding = true
          setup = false
      

    • /etc/network/interfaces에서 관심 있는 인터페이스에 다음 줄을 추가합니다.

      auto eth1
      iface eth1 inet dhcp
          up ip route add filestore-reserved-address-range via default-gateway-of-nic-to-filestore
      

    다음을 바꿉니다.

    • filestore-reserved-address-range는 Compute Engine 인스턴스에서 사용하기 위해 예약된 주소 범위입니다.
    • default-gateway-of-nic-to-filestore는 Compute Engine 인스턴스와 공유되고, VPC 네트워크에 연결된 NIC의 기본 게이트웨이 IP 주소입니다.

    VM 인스턴스에 파일 공유를 마운트하는 방법에 대한 자세한 내용은 Compute Engine에 파일 공유 마운트를 참조하세요.

문제 해결하기

인터페이스가 여러 개 있는 VM을 만들 수 없음

다음 오류 메시지 중 하나가 표시될 수 있습니다.

  • Invalid value for field 'resource': ''. Too many network interfaces. The maximum number of network interfaces allowed for this machine type is.

    이 오류 메시지가 표시될 경우, 인스턴스 머신 유형에서 지원하는 최대 인터페이스보다 더 많은 인터페이스를 만들려고 시도한 것입니다. 인터페이스 최대 개수 표를 참조하세요.

  • Networks must be distinct for NICs attached to a VM.

    이 메시지가 표시될 경우, 동일한 네트워크에 여러 개의 인터페이스를 만들려고 시도한 것입니다. 각 네트워크 인터페이스는 서로 다른 VPC 네트워크에 연결되어야 합니다.

  • Subnetwork CIDR ranges must be non-overlapping for NICs attached to a VM.

    이 메시지가 표시될 경우, VM의 인터페이스와 연결된 여러 CIDR 범위가 겹치는 것입니다. 이러한 CIDR 범위에는 VM 인터페이스와 연결된 서브넷의 모든 기본 범위와 별칭 IP 범위에 사용된 보조 범위가 포함됩니다. 각 인터페이스는 다른 VPC 네트워크에 있는 서브넷에 연결되며, 이 서브넷이 다른 인터페이스의 서브넷과 겹치면 안 됩니다. 예를 들어 us-west1 리전에 인스턴스를 만들려는 경우에는 다음 명령어나 Google Cloud 콘솔을 사용하여 서브넷 기본 CIDR 범위를 확인할 수 있습니다.

    gcloud compute networks subnets list --regions us-west1
    NAME                REGION    NETWORK          RANGE
    default             us-west1  default          10.138.0.0/20
    overlapping-subnet  us-west1  test-network     10.138.8.0/24
    

    보조 서브넷 CIDR 범위를 확인하려면 다음 명령어 또는 Google Cloud 콘솔을 사용합니다.

    gcloud compute networks subnets describe overlapping-subnet --region us-west1
    
    ...
    ipCidrRange: 10.128.8.0/24
    ...
    secondaryIpRanges:
    - ipCidrRange: 10.138.8.0/24
      rangeName: conflicting-range
    
  • Multiple network interfaces are not supported on legacy networks.

    이 메시지가 표시될 경우, 이전 네트워크에 인스턴스를 만들려고 시도한 것입니다. 이전 네트워크에서는 인터페이스가 여러 개인 인스턴스가 지원되지 않습니다. 다음 명령어 또는 Google Cloud 콘솔을 사용하여 네트워크가 기존 네트워크인지 확인할 수 있습니다. 모드 필드는 네트워크의 유형을 나타냅니다.

    gcloud compute networks list
    NAME             MODE    IPV4_RANGE     GATEWAY_IPV4
    default          auto
    legacy-network   legacy  10.240.0.0/16  10.240.0.1
    test-network     custom
    

  • Required 'compute.instances.create' permission for 'projects/PROJECT_ID/zones/ZONE/instances/test-inst'

    이 메시지가 표시될 경우, 로그인한 계정에 인스턴스를 만드는 데 필요한 IAM 권한이 부여되지 않은 것입니다. 인스턴스 생성에 필요한 역할에 관한 자세한 내용은 IAM 권한을 참조하세요. 프로젝트와 연결된 IAM 정책이 OWNER, EDITOR, compute.instanceAdmin.v1 중 어느 역할을 부여하는지 확인할 수 있습니다. 공유 VPC에 인스턴스를 만들 경우, compute.networkUser 역할이 추가로 필요할 것입니다. 아래 예시에서는 email2@gmail.com 계정에 인스턴스를 만드는 데 필요한 IAM 권한이 부여되지 않았습니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소 IAM 가이드를 참조하세요.

    gcloud projects get-iam-policy PROJECT_ID
    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

    프로젝트 소유자나 편집자에게 OWNER, EDITOR, compute.instanceAdmin.v1 중 한 가지 역할을 부여해 달라고 요청할 수 있습니다. 인터페이스를 공유 VPC에 속한 서브넷과 연결하는 경우 compute.networkUser 역할도 필요할 것입니다.

    gcloud projects set-iam_policy --member user:email2@gmail.com --role roles/editor
    

보조 인터페이스의 내부 IP 주소에 연결할 수 없음

  • 방화벽 규칙에서 VM 보조 인터페이스에 대한 연결이 허용되는지 확인합니다. Google Cloud 콘솔에서 해당 VPC 네트워크를 클릭하거나 다음 gcloud 명령어를 사용하여 보조 인터페이스에 연결된 네트워크의 방화벽 규칙을 확인하면 이를 알 수 있습니다.

    gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
    
  • 인터넷 주소를 통해 보조 인터페이스에 연결하려고 하는지, 아니면 보조 인터페이스의 네트워크 외부에서 연결하려고 하는지 확인합니다. 해당 네트워크 내부에서만 인터페이스의 내부 IP에 연결할 수 있습니다. 네트워크 외부에서 인터페이스에 연결해야 한다면 보조 인터페이스에 외부 IP 주소를 할당해도 됩니다.

  • 보조 인터페이스가 연결된 서브넷 외부에서 보조 인터페이스의 내부 IP에 연결하려고 하는지, 동일한 네트워크의 다른 서브넷에서 연결하려고 하는지, 아니면 피어링된 네트워크에서 연결하려고 하는지 확인합니다. 인스턴스당 여러 개의 네트워크 인터페이스는 인터페이스가 여러 개인 VM 인스턴스와 VPC 피어링 간의 상호작용에 대해 설명합니다. 인터페이스의 서브넷 외부에서 보조 인터페이스에 연결하려면 VM에 경로를 구성해야 합니다. DHCP가 VM에 기본 경로를 프로그래밍하는 방법에 대한 자세한 내용은 다중 네트워크 인터페이스의 DHCP 동작을 참조하세요.

  • IPv6 주소에 액세스하려고 하는 경우 보조 인터페이스의 IPv6 주소에 연결할 수 없음도 참조하세요.

외부 IP 주소를 사용하여 보조 인터페이스에 연결할 수 없음

DHCP 서버는 VM의 기본 네트워크 인터페이스에서만 기본 경로를 프로그래밍합니다. 외부 IP를 사용하여 보조 인터페이스에 연결하는 방법은 두 가지가 있습니다. 네트워크 외부에서만 보조 네트워크 인터페이스에 연결해야 한다면 해당 네트워크 인터페이스에 기본 경로를 설정할 수 있습니다. 그렇지 않다면 정책 라우팅 구성하기를 통해 소스 기반 정책 라우팅을 사용하여 VM에 별도의 라우팅 테이블을 구성할 수 있습니다.

IPv6 주소에 액세스하려고 하는 경우 보조 인터페이스의 IPv6 주소에 연결할 수 없음도 참조하세요.

보조 인터페이스의 IPv6 주소에 연결할 수 없음

IPv6 주소에 액세스하려고 하는 경우 VM에 google-guest-agent 버전 20220603.00 이상이 설치되어 있는지 확인합니다. google-guest-agent 버전 관리에 대한 자세한 내용은 게스트 환경을 참조하세요.

이전 버전의 google-guest-agent가 있으면 보조 인터페이스에서 IPv6 서브넷 경로를 수신하지 않습니다. 경로가 올바르게 구성되도록 게스트 에이전트를 업데이트하는 것이 좋습니다.

하지만 이 문제를 해결하려면 대신 시작 스크립트를 만들어 보조 인터페이스마다 다음과 같이 구성을 변경하면 됩니다.

sudo sysctl -w net.ipv6.conf.INTERFACE_NAME.accept_ra_rt_info_max_plen=128

INTERFACE_NAME을 인터페이스 이름으로 바꿉니다(예: eth1 또는 ens5).

/32 이외의 넷마스크를 사용할 때 연결 문제가 있음

기본적으로, 인스턴스 메타데이터 서버는 기본 게이트웨이에 대한 ARP 요청에만 응답합니다.

/32 이외의 넷마스크로 인터페이스를 구성하려면 플래그 --guest-os-features MULTI_IP_SUBNET을 사용하여 이미지를 만들고 이를 통해 인스턴스를 만들어야 합니다. 예를 들어 debian-9 기반 이미지를 사용하는 경우 다음 명령어를 사용하여 이미지를 만들 수 있습니다.

gcloud compute images create debian-9-multi-ip-subnet \
     --source-disk debian-9-disk \
     --source-disk-zone us-west1-a \
     --guest-os-features MULTI_IP_SUBNET

이미지에 구성된 게스트 기능을 보려면 게스트 이미지에서 gcloud compute images describe 명령어를 실행합니다.

gcloud compute images describe debian-9-multi-ip-subnet

커스텀 이미지 생성에 관한 자세한 내용은 커스텀 이미지 만들기, 삭제, 지원 중단을 참조하세요.

네트워크 인터페이스가 여러 개 있는 VM의 내부 호스트 이름을 확인할 수 없음

DNS 쿼리는 내부 호스트 이름으로 실행될 때 인스턴스의 기본 네트워크 인터페이스(nic0)로 확인됩니다.

nic0이 DNS 쿼리를 실행하는 인스턴스의 VPC 네트워크와 다른 VPC 네트워크에 연결된 경우 DNS 쿼리가 실패합니다. 내부 DNS는 지정된 VPC 네트워크 내에서만 확인됩니다. 자세한 내용은 다중 네트워크 인터페이스에서 DNS 변환을 참조하세요.

직렬 콘솔을 사용한 문제 해결

구성과 관련한 문제를 해결할 때 VM에서 직렬 콘솔을 사용 설정하는 것이 좋은 방법이 되기도 합니다. 직렬 콘솔을 사용한 문제 해결의 단계에 따라 직렬 콘솔에 대화형 디버깅을 사용 설정할 수 있습니다.