네트워크 인터페이스가 여러 개인 인스턴스 만들기

이 페이지에서는 다중 네트워크 인터페이스로 가상 머신(VM)을 구성하는 방법을 설명합니다.

기본적으로 VPC 네트워크의 각 인스턴스에는 기본 네트워크 인터페이스가 하나씩 있습니다. 네트워크 인터페이스를 추가로 만들려면 여기에 나와 있는 안내를 따르세요. 각 인터페이스가 서로 다른 VPC 네트워크에 연결되어 해당 인스턴스가 GCP(Google Cloud Platform) 내 여러 VPC 네트워크에 액세스할 수 있습니다. 동일한 VPC 네트워크에 여러 네트워크 인터페이스를 연결할 수는 없습니다.

추가 네트워크 인터페이스가 필요하지 않다면 인스턴스 만들기 및 시작의 안내를 따르세요.

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

사양

요구사항

  • 인스턴스를 만들 때 네트워크 인터페이스를 하나만 구성할 수 있습니다.
  • 단일 인스턴스에 구성된 각 네트워크 인터페이스는 다른 VPC 네트워크에 연결되어야 하고, 각 인터페이스는 IP 범위가 다른 인터페이스의 서브넷과 중복되지 않는 서브넷에 속해야 합니다.
  • 인스턴스를 만들기 전에 다중 인터페이스를 연결할 추가 VPC 네트워크가 있어야 합니다. 추가 VPC 네트워크 생성에 관한 안내는 VPC 네트워크 사용을 참조하세요.
  • 인스턴스를 삭제하지 않고 네트워크 인터페이스를 삭제할 수는 없습니다.
  • 각 인스턴스에는 네트워크 인터페이스가 적어도 하나 이상 있어야 합니다. 인스턴스당 네트워크 인터페이스의 최대 개수는 8개이며, 이는 인스턴스의 머신 유형에 따라 다릅니다.
    • nic0은 필수이며 인스턴스 생성 시 구성해야 합니다.
    • nic1~nic7은 선택 사항이지만 마찬가지로 인스턴스 생성 시 구성해야 합니다.
    • 자세한 내용은 인터페이스 최대 개수를 참조하세요.
  • 필요할 경우 각 인터페이스에 외부 IP 주소를 지정할 수 있습니다.
  • GCP의 DHCP 서버는 기본 경로(RFC 3442, '클래스 없는 정적 경로')를 기본 NIC인 nic0으로만 전송합니다. 다른 NIC에 기본 경로가 필요하면 인스턴스에서 이를 구성해야 합니다. 인스턴스에서 기본 경로를 변경할 때는 VM에 대한 연결이 끊어지지 않도록 직렬 콘솔을 사용합니다.
  • 공유 VPC 네트워크에 다중 네트워크 인터페이스를 사용할 수 있습니다. VM은 기본 네트워크 인터페이스에서만 다른 프로젝트의 공유 네트워크에 연결할 수 있습니다. 따라서 특정 서비스 프로젝트에 VM이 있다면 해당 VM이 기본 인터페이스에서만 공유 네트워크에 연결할 수 있고 다른 모든 인터페이스는 동일한 서비스 프로젝트의 로컬 네트워크에 연결해야 합니다. 호스트 프로젝트에 VM이 있다면 해당 VM의 네트워크 인터페이스가 호스트 프로젝트의 모든 네트워크에 연결할 수 있습니다.

제한사항

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

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

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

  • 프로젝트 소유자 또는 편집자 역할
  • compute.instanceAdmin.v1 역할

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

공유 VPC 환경에서 다중 인터페이스가 포함된 인스턴스와 인스턴스 템플릿 생성 및 삭제: 프로젝트 수준에서 소유자, 편집자 또는 compute.instanceAdmin.v1 역할을 부여받은 사용자는 다중 인터페이스가 포함된 인스턴스를 만들 수 있습니다. 공유 VPC 호스트 프로젝트의 서브넷과 연결된 인터페이스가 있는 경우 공유 VPC 호스트 프로젝트 수준이나 공유 VPC 서브넷 수준의 compute.networkUser 역할도 필요합니다.

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

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

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

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

  • 서브넷에서 할당된 비공개 기본 IP 주소로 각 네트워크 인터페이스를 구성해야 합니다.
    • 단일 인스턴스의 각 인터페이스에 할당되는 비공개 기본 주소는 서로 달라야 합니다.
  • 또한 필요할 경우 고유한 공개 IP 주소로 각 가상 인터페이스를 구성할 수 있으며, 이러한 공개 IP 주소는 임시 또는 예약된 주소일 수 있습니다.

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

  • 인스턴스당 허용되는 가상 인터페이스의 최대 개수는 8개입니다.
  • 인스턴스 1개에 허용되는 인터페이스의 개수는 인스턴스의 머신 유형과 vCPU의 개수에 따라 달라집니다.

일반적으로 n1-standard-x, n1-highmem-x, n1-highcpu-x, f1-micro, g1-small, 커스텀 VM에는 다음과 같은 규칙이 적용됩니다.

  • VM <= 2vCPU의 경우 네트워크 인터페이스 2개
  • VM > 2vCPU의 경우 vCPU당 네트워크 인터페이스 1개(VM당 네트워크 인터페이스의 최대 한도는 8개)

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

인스턴스 유형 vCPU 개수 가상 NIC 개수
n1-standard-x, n1-highmem-x, n1-highcpu-x, n1-highmem-x, n1-highcpu-x 'x' 값으로 명시됨. 'x' 값에 NIC 1개(NIC 최소 2개, 최대 8개)
f1-micro vCPU 0.2개 NIC 2개
g1-small vCPU 0.5개 NIC 2개
커스텀 인스턴스 vCPU 1개~64개까지 구성 가능 vCPU당 NIC 1개(NIC 최소 2개, 최대 8개)

다중 네트워크 인터페이스가 포함된 가상 머신 인스턴스 만들기

단일 인터페이스가 포함된 인스턴스를 만드는 방법은 종전과 동일합니다. 인스턴스 생성에 관한 일반 안내는 인스턴스 만들기 및 시작을 참조하세요.

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

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

첫 번째로 생성되는 인터페이스는 항상 nic0이며 기본 인터페이스입니다. 이 점은 GCP 네트워킹의 다른 몇 가지 측면에서 중요합니다. 예를 들어, 부하 분산은 nic0만 지원합니다.

콘솔


  1. Google Cloud Platform Console에서 인스턴스 만들기 페이지로 이동합니다.
    인스턴스 만들기 페이지로 이동
  2. 인스턴스 이름, 영역, 머신 유형, 인스턴스의 기타 기본적인 측면에 관한 섹션을 작성합니다.
  3. 관리디스크 탭의 필드를 작성합니다.
  4. 네트워킹 탭에서 네트워크 인터페이스 추가를 클릭합니다.
  5. 네트워크를 선택합니다.
  6. VPC 네트워크에 여러 개의 서브넷이 있는 경우, 그 중 하나를 선택합니다.
  7. 인터페이스에 커스텀 내부 IP 주소를 할당하려면 내부 IP 드롭다운 메뉴에서 커스텀을 선택한 다음 IP 주소를 입력합니다.
  8. 외부 IP 주소를 사용하지 않으려면 외부 IP 드롭다운 메뉴에서 없음을 선택합니다.
  9. 정적 외부 IP 주소를 할당하려면 외부 IP 드롭다운 메뉴에서 새 정적 IP를 선택하고 이름설명을 입력하고 예약을 클릭합니다.
  10. IP 전달을 사용 설정하려면 IP 전달 드롭다운 메뉴에서 사용을 선택합니다.
  11. 네트워크 인터페이스를 추가하려면 네트워크 인터페이스 추가를 클릭하고 위의 5~10단계를 수행합니다.

gcloud

instances create 명령어를 사용하여 새 인스턴스에 네트워크 인터페이스를 만듭니다. 각 인터페이스에 --network-interface 플래그를 포함한 후 적절한 네트워킹 키를 추가합니다(예: ([network | subnet], private-network-ip, address)).

이 스니펫은 인스턴스를 만들 때 지정할 수 있는 여러 가지 매개변수 중 하나인 --network-interface 플래그만 보여줍니다. 그 밖의 플래그에 대한 자세한 내용은 gcloud 참조 문서에서 instances create 명령어를 참조하세요. 필요한 개수의 네트워크 인터페이스를 지원하는 머신 유형을 확인하려면 네트워크 인터페이스의 최대 개수 표를 참조하세요.

gcloud compute instances create [INSTANCE_NAME] --machine-type=[MACHINE_TYPE] \
    [--network-interface
        [network=[NETWORK_NAME]; default="default" | subnet=[SUBNET]]
        [address=[ADDRESS] | no-address]
        [private-network-ip=[PRIVATE_NETWORK_IP]]
    ...]

네트워크 인터페이스가 3개인 인스턴스를 만들기 위한 명령어 샘플:

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

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

  • 모두 기본값으로 설정된 nic0. 기본 VPC 네트워크와 연결되고, 자동으로 할당되는 비공개 IP 주소와 임시 공개 IP 주소가 지정됨.
  • nic1은 net1-subnet-a에 속하고 내부 IP 주소는 10.128.0.2, 정적 외부 IP 주소는 35.237.93.110
  • nic2는 net2-subnet-b에 속하고 내부 IP 주소는 10.129.0.2이며 공개 IP 주소는 없음

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

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

관리형 인스턴스 그룹 내의 모든 인스턴스는 하나의 서브넷으로 제한됩니다. 비관리형 인스턴스 그룹 내의 모든 인스턴스는 부하 분산에 사용되었을 경우 하나의 서브넷으로 제한됩니다. 자세한 내용은 VPC 네트워크부하 분산 문서를 참조하세요.

이 같은 제한 때문에 인터페이스는 인스턴스당 하나씩만 존재합니다. GCP는 인스턴스 내의 유일한 인터페이스와 연결된 서브넷에 기초하여 유효성 검사를 수행합니다.

관리형 인스턴스 그룹 또는 비관리형 인스턴스 그룹 내의 인스턴스에 여러 개의 인터페이스를 구성할 경우, GCP는 기본 nic0 인터페이스에 이러한 조건이 적합한지 계속해서 검사합니다.

다중 인터페이스가 포함된 인스턴스 템플릿 만들기

인스턴스당 하나의 인터페이스를 사용하는 인스턴스 템플릿을 만드는 과정은 바뀌지 않고 그대로이며 gcloud 참조의 instance-templates create 명령어 부분에 설명되어 있습니다.

하나의 인스턴스 템플릿에 여러 개의 네트워크 인터페이스를 구성하려면 만들려는 각 네트워크 인터페이스에 --network-interface 플래그를 설정합니다.


gcloud compute instance-templates create NAME [--description DESCRIPTION] \
    [--network-interface [network NETWORK; default="default" | subnet SUBNET][address ADDRESS| no-address] \
    [--network-interface [network NETWORK; default="default" | subnet SUBNET][address ADDRESS | no-address] \
    .....

각 인터페이스에 network, subnet, address와 같은 네트워킹 키를 할당할 수 있습니다.

예를 들어, 다음과 같은 명령어를 실행할 경우 각 인스턴스에 네트워크 인터페이스 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`

이 인터페이스는 다음과 같습니다.

  • nic0은 net0-subnet-a에 속하고 자동으로 할당되는 공개 IP 주소가 지정됨
  • nic1은 net1-subnet-b에 속하고 공개 IP 주소가 지정되지 않음
  • nic2는 net2-subnet-c에 속하고 공개 IP 주소가 지정되지 않음

플래그와 구문에 대한 자세한 내용은 instance-templates create 명령어를 참조하세요.

정책 라우팅 구성하기

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

다중 인터페이스가 있는 Linux 기반 인스턴스의 경우, 다음 단계에 따라 정책 라우팅을 구성합니다.

  1. 다중 네트워크 인터페이스로 구성된 인스턴스에 연결합니다.

    gcloud compute ssh multinic-vm
    
  2. nic1에 ifconfig로 정책 라우팅을 구성합니다. 아래의 예는 GCP가 nic1에 내부 IP 주소 192.168.0.2를 할당하였고 서브넷 기본 게이트웨이는 192.168.0.1이라고 가정한 것입니다.

    sudo ifconfig eth1 192.168.0.2 netmask 255.255.255.255 broadcast 192.168.0.2 mtu 1430
    sudo echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables # (sudo su - first if permission denied)
    sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1 table rt1
    sudo ip route add default via 192.168.0.1 dev eth1 table rt1
    sudo ip rule add from 192.168.0.2/32 table rt1
    sudo ip rule add to 192.168.0.2/32 table rt1
    
  3. 인스턴스의 추가 인터페이스(nic2, nic3.... nic7)에 2단계의 명령어를 반복합니다.

문제해결

인터페이스가 여러 개인 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 Platform Console을 사용하여 서브넷의 기본 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 Platform Console을 사용합니다.

    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 Platform Console을 사용하여 네트워크가 이전 네트워크인지 확인할 수 있습니다. 모드 필드는 네트워크의 유형을 나타냅니다.

    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 Platform Console에서 해당 VPC 네트워크를 클릭하거나 다음 gcloud 명령어를 사용하여 보조 인터페이스에 연결된 네트워크의 방화벽 규칙을 확인하면 이를 알 수 있습니다.

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

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

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

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

/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에서 직렬 콘솔을 사용 설정하는 것이 좋은 방법이 되기도 합니다. 직렬 콘솔과 상호작용의 단계에 따라 직렬 콘솔에 상호작용 디버깅을 사용 설정할 수 있습니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...