다중 네트워크 인터페이스 개요 및 예

이 페이지에서는 가상 머신(VM) 인스턴스의 다중 네트워크 인터페이스에 대해 간략히 설명하고 다중 네트워크 인터페이스의 작동 방식 및 샘플 구성을 제공합니다. 다중 인터페이스를 사용하는 구성을 만드는 방법은 다중 네트워크 인터페이스 만들기를 참조하세요.

개요

GCP(Google Cloud Platform) VPC 네트워크는 기본적으로 격리되어 있는 사설 네트워크 도메인입니다. 네트워크에는 전역 범위와 리전 서브넷이 포함됩니다. VPC 네트워크 내부의 VM 인스턴스는 방화벽 규칙에서 허용하는 한 내부 IP 주소를 통해 서로 통신할 수 있습니다. 하지만 VPC 피어링 또는 VPN과 같은 방법을 설정하지 않는 한 네트워크 사이에 내부 IP 주소 통신은 허용되지 않습니다.

VPC 네트워크의 모든 인스턴스에는 기본 네트워크 인터페이스가 있습니다. VM에 연결되는 추가 네트워크 인터페이스를 만들 수 있습니다. 다중 네트워크 인터페이스를 사용하면 인스턴스가 여러 VPC 네트워크에 직접 연결되는 구성을 만들 수 있습니다. 이러한 각 인터페이스에는 내부 IP 주소가 있어야 하며, 각 인터페이스에 외부 IP 주소를 지정할 수도 있습니다. 각 인스턴스는 인스턴스 유형에 따라 최대 8개의 인터페이스를 포함할 수 있습니다. 자세한 내용은 인터페이스 최대 개수를 참조하세요.

일반적으로 부하 분산, IDS/IPS(침입 감지 및 방지), WAF(웹 애플리케이션 방화벽) 또는 WAN 최적화를 수행하는 네트워크 어플라이언스로 인스턴스를 구성하려는 경우 다중 인터페이스가 필요할 수 있습니다. 또한 인스턴스에서 실행 중인 애플리케이션에 데이터 영역 트래픽과 관리 영역 트래픽의 구분과 같은 트래픽 구분이 필요한 경우에도 다중 네트워크 인터페이스가 유용합니다.

사용 사례

개별 인스턴스가 2개 이상의 VPC 네트워크에 액세스해야 하지만, 두 네트워크에 직접 연결하지는 않으려는 경우 다중 네트워크 인터페이스를 사용할 수 있습니다.

  • 네트워크 및 보안 기능: 다중 네트워크 인터페이스는 가상화된 네트워크 어플라이언스가 다중 네트워크 인터페이스로 구성된 부하 분산기, NAT(네트워크 주소 변환) 서버, 프록시 서버로 작동할 수 있게 해줍니다. 자세한 내용은 예 1: 네트워크 및 보안 가상 어플라이언스를 참조하세요.

  • 경계 및 DMZ 격리: 계층형 네트워크 아키텍처에서 중요한 권장사항은 공개용 서비스를 내부 네트워크 및 해당 서비스에서 격리하는 것입니다. 다중 네트워크 인터페이스를 사용하면 인스턴스에 개별 네트워크 인터페이스를 두고, 이 중 하나로 공개용 트래픽을 수신하고, 다른 하나는 액세스 제어가 보다 제한적인 백엔드 비공개 트래픽을 처리하는 구성을 만들 수 있습니다.

    인터넷에서 연결할 수 있는 모든 리소스는 내부 네트워크 및 해당 서비스와 구분되어야 합니다. 이렇게 하면 보안 위반이 발생할 수 있는 범위와 손상 정도가 크게 제한됩니다. 예를 들어 애플리케이션 서버가 상주하는 중간 등급 네트워크에 연결되는 두 번째 네트워크 인터페이스를 각 웹 서버에 배치할 수 있습니다. 또한 데이터베이스 서버가 상주하는 백엔드 네트워크를 사용하여 애플리케이션 서버 네트워크를 이중으로 구성할 수 있습니다. 이중 네트워크로 구성된 각 인스턴스는 프런트 엔드의 요청을 수신 및 처리하고, 백엔드 연결을 시작한 후, 백엔드 네트워크의 서버로 요청을 전송합니다.

    인터페이스를 공개용 하나와 비공개용 하나로 별도 구성하여 각 인터페이스에 방화벽 규칙 및 액세스 제어를 개별적으로 적용하고 공개 도메인에서 비공개 도메인으로의 통신에 보안 기능을 강제 적용할 수 있습니다. 자세한 내용은 예 2: 공유 VPC 네트워크 시나리오에서 제3자 어플라이언스 사용을 참조하세요.

  • 개별 인터페이스 간 대역폭 격리: 여기에는 제어 영역과 데이터 영역 사이의 대기 행렬 문제 방지가 포함됩니다. 네트워크 인터페이스를 사용하여 관리, 제어, 저장, 데이터 영역 네트워크를 구분할 수 있습니다. 일부 애플리케이션에서는 하트비트 신호와 같은 제어가 매우 중요합니다. 이러한 애플리케이션에서는 제어를 데이터 경로 인터페이스와 격리하여 트래픽이 급증하거나 트래픽이 정체될 때를 대비해서 최소한의 대역폭을 사용할 수 있도록 보장하는 것이 좋습니다. 이 시나리오에서는 제어 트래픽을 다른 트래픽과 구분하기 위해 전용 가상 인터페이스를 사용합니다. 각 인터페이스에는 하나의 가상 대기열이 포함됩니다. 가상 대기열은 하나의 VPC 네트워크에서 발생하는 대역폭 급증 및 DDoS 공격이 다른 VPC 네트워크에 영향을 주지 못하도록 방지합니다. 이러한 인터페이스별 가상 대기열은 또한 대기 행렬 막힘을 방지하고 인스턴스 CPU가 각 I/O 인터페이스에 고르게 분산될 수 있게 해줍니다. 자세한 내용은 예 3: SaaS 아키텍처에서 관리 및 데이터 영역 인터페이스 구분을 참조하세요.

구성 예

이 섹션에서는 다중 네트워크 인터페이스 사용 방법에 대한 몇 가지 일반적인 예를 살펴봅니다.

예 1: 네트워크 및 보안 가상 어플라이언스

WAF, 보안 애플리케이션 수준 방화벽, WAN 가속기와 같은 네트워크 및 보안 가상 어플라이언스는 일반적으로 다중 가상 인터페이스를 사용하여 구성됩니다. 각 다중 인터페이스는 고유한 비공개 IP 주소 및 선택적인 고유한 공개 IP 주소를 사용하여 구성됩니다.

아래 그림은 일반적인 설정을 보여줍니다. 여기에서는 공개 연결에서 비공개 연결로 가는 경로에 가상 네트워크 어플라이언스를 구성합니다. 이렇게 하면 애플리케이션 수준의 가상화된 방화벽 적용 지점을 통해 공개 외부 클라이언트에서 비공개 VPC 네트워크로만 트래픽이 전달될 수 있습니다. 이러한 애플리케이션 수준 방화벽은 가상 머신 위에 적용됩니다.

사용 사례 1: 다중 인터페이스로 인스턴스 프로비저닝 및 구성(확대하려면 클릭)
사용 사례 1: 다중 인터페이스로 인스턴스 프로비저닝 및 구성(확대하려면 클릭)

예 1의 인스턴스 프로비저닝 및 구성

다음 섹션에서는 subnet0, subnet1, subnet2가 이미 존재하고 중첩 범위가 없다고 가정합니다. 이 예에서는 VM 어플라이언스를 구성하기 위해 다음 명령어를 사용합니다.

gcloud compute instances create vm-appliance \
    --network-interface subnet=subnet0,no-address \
    --network-interface subnet=subnet1 \
    --network-interface subnet=subnet2,no-address \
    --machine-type n1-standard-4

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

  • nic0은 subnet0에 연결되고 공개 IP 주소가 없습니다.
  • nic1은 subnet1에 연결되고 임시 공개 IP 주소가 하나 있습니다.
  • nic2는 subnet2에 연결되고 공개 IP 주소가 없습니다.

예 2: 공유 VPC 네트워크 시나리오에서 제3자 어플라이언스 사용

이 설정은 여러 프로젝트에서 호스팅되는 작업 부하 또는 애플리케이션에 중앙 집중식 제3자 어플라이언스의 단일 집합을 공유하려고 할 때 유용합니다. 아래 표시된 예에는 여러 서비스 프로젝트에서 호스팅되는 App1, App2, App3, App4라는 고유한 애플리케이션 4개가 있습니다. 모든 인터넷 수신으로부터 이를 보호하고, 공유 VPC 호스트 프로젝트에 중앙 집중식으로 배치된 제3자 어플라이언스에서 송신 트래픽을 조사 및 필터링하려고 합니다.

사용 사례 2: 제3자 어플라이언스가 사용된 공유 VPC 예(확대하려면 클릭)
사용 사례 2: 제3자 어플라이언스가 사용된 공유 VPC 예(확대하려면 클릭)

예 2의 VM과 네트워크 인터페이스 프로비저닝 및 구성

이 예에서는 VM 및 네트워크 인터페이스를 만들기 위해 다음 명령어를 사용합니다.

VM 어플라이언스를 만들려는 경우:

gcloud compute instances create VM-appliance \
    --network-interface subnet=subnet-dmz,address='reserved-address' \
    --network-interface subnet=subnet-1,no-address \
    --network-interface subnet=subnet-2,no-address \
    --network-interface subnet=subnet-3,no-address \
    --network-interface subnet=subnet-4,no-address \
    --machine-type=n1-standard-4

이렇게 하면 네트워크 인터페이스 5개가 포함된 인스턴스가 생성됩니다.

  • nic0은 정적 주소 'reserved-address'를 사용하여 network-dmz의 일부인 subnet-dmz에 연결됩니다.
  • nic1은 공개 IP를 사용하지 않고 network-1의 일부인 subnet-1에 연결됩니다.
  • nic2는 공개 IP를 사용하지 않고 network-2의 일부인 subnet-2에 연결됩니다.
  • nic3은 공개 IP를 사용하지 않고 network-3의 일부인 subnet-3에 연결됩니다.
  • nic4는 공개 IP를 사용하지 않고 network-4의 일부인 subnet-4에 연결됩니다.

예 3: SaaS 아키텍처에서 관리 인터페이스와 데이터 영역 인터페이스 구분

여러 고객(테넌트)에게 제공하는 서비스를 GCP에서 운영할 경우, 별개의 관리 인터페이스를 사용하여 서비스를 관리할 수 있습니다. 관리 인터페이스를 사용하면 테넌트에서 사용되는 인터페이스에 관계없이 소프트웨어 업그레이드, 유지관리 절차, 문제 해결을 수행할 수 있습니다.

다음 다이어그램은 클라우드에서 호스팅되는 서비스를 보여줍니다. 서비스 생산자는 개별 VPC 네트워크에서 각 테넌트에 제공되는 서비스를 격리시킵니다. 즉, 각 테넌트에 대한 VPC 네트워크를 만들고 각 고객에게 서비스를 제공하기 위한 특정 인스턴스를 만듭니다. 예를 들어 테넌트 A에 서비스를 제공하기 위한 인스턴스를 만들고 네트워크 A에서 이러한 인스턴스를 격리하여, 테넌트 A의 온프레미스 머신은 서비스에 액세스할 수 있지만 나머지 테넌트는 이 서비스에 액세스할 수 없도록 합니다. 그런 다음 테넌트 B 및 테넌트 C에 대해서도 동일한 구성을 만듭니다.

하지만 소프트웨어 업데이트를 수행하고, 지원을 제공하고, 문제를 해결하기 위해서는 각 테넌트의 GCP 호스팅 서비스에 액세스할 수 있어야 합니다. 이를 위해서는 각 인스턴스에 관리 인터페이스를 추가하고 이 인스턴스를 온프레미스 시설에 비공개로 연결된 관리 네트워크와 연결하면 됩니다.

사용 사례 3: SaaS 예(확대하려면 클릭)
사용 사례 3: SaaS 예(확대하려면 클릭)

테넌트 A의 인스턴스에는 테넌트 A의 네트워크에 속하는 인터페이스와 생산자(SaaS 제공자)의 관리 네트워크에 속하는 인터페이스가 포함됩니다. 마찬가지로 테넌트 B의 인스턴스에도 두 개의 인터페이스가 포함됩니다. 첫 번째 인터페이스는 테넌트 B의 네트워크에 포함되고 두 번째 인터페이스는 생산자(SaaS 제공자)의 관리 네트워크에 포함됩니다.

예 3의 인스턴스 프로비저닝 및 구성

이 예에서 테넌트 인스턴스를 구성하려면 다음 명령어 예를 사용합니다.

VM-A를 만들려는 경우:

gcloud compute instances create vm-a \
    --network-interface subnet=subnet-a,no-address \
    --network-interface subnet=subnet-mgmt,private-network-ip=198.168.0.2, \
    no-address

이렇게 하면 네트워크 인터페이스 2개가 포함된 인스턴스가 생성됩니다.

  • nic0은 network-a에 속하는 subnet-a에 연결됩니다.
  • nic1은 network-mgmt에 속하는 subnet-mgmt에 연결됩니다.

VM-B를 만들려는 경우:

gcloud compute instances create vm-b\
    --network-interface subnet=subnet-b,no-address \
    --network-interface subnet=subnet-mgmt,private-network-ip=198.168.0.3, \
    no-address

이렇게 하면 네트워크 인터페이스 2개가 포함된 인스턴스가 생성됩니다.

  • nic0은 network-b에 속하는 subnet-b에 연결됩니다.
  • nic1은 network-mgmt에 속하는 subnet-mgmt에 연결됩니다.

VM-C를 만들려는 경우:

gcloud compute instances create vm-c\
    --network-interface subnet=subnet-c,no-address \
    --network-interface subnet=subnet-mgmt,private-network-ip=198.168.0.4, \
    no-address

이렇게 하면 네트워크 인터페이스 2개가 포함된 인스턴스가 생성됩니다.

  • nic0은 network-c에 속하는 subnet-c에 연결됩니다.
  • nic1은 network-mgmt에 속하는 subnet-mgmt에 연결됩니다.

추가 운영 세부정보

공유 VPC 환경의 다중 네트워크 인터페이스

공유 VPC를 사용하면 클라우드 조직의 프로젝트 간에 VPC 네트워크를 공유할 수 있습니다.

공유 VPC를 사용하면 중앙 집중식 공유 VPC 호스트 프로젝트에서 호스팅되는 공유 VPC 네트워크와 연결된 인스턴스를 만들 수 있습니다. 공유 VPC 네트워크 구성에 대한 자세한 내용은 공유 VPC 프로비저닝을 참조하세요.

다중 네트워크 인터페이스로 인스턴스를 만들 때 인스턴스 또는 인스턴스 템플릿은 특정 인터페이스를 프로젝트의 로컬 서브넷에 연결할 수 있으며, 다른 인터페이스를 공유 VPC 네트워크에 연결할 수 있습니다.

하나 이상의 인터페이스가 공유 VPC 네트워크에 연결된 인스턴스를 만들려면 공유 VPC 호스트 프로젝트에 compute.networkUser 역할이 있어야 합니다.

다중 네트워크 인터페이스에서 DNS 확인

내부 DNS 쿼리가 인스턴스 호스트 이름으로 작성된 경우, 해당 인스턴스의 기본 이름(nic0)이 확인됩니다. 인스턴스의 nic0 인터페이스가 내부 DNS 쿼리를 실행하는 인스턴스의 VPC 네트워크와 다른 VPC 네트워크에 속하는 경우, 쿼리가 실패합니다.

비공개 Compute Engine DNS 레코드는 인터페이스별로 생성되지 않습니다.

다중 네트워크 인터페이스의 DHCP 동작

기본 다중 인터페이스 구성에서 OS는 DHCP를 사용하도록 구성됩니다. 각 다중 인터페이스의 DHCP 및 ARP 동작은 단일 인터페이스가 있는 인스턴스의 DHCP 및 ARP와 동일합니다.

DHCP를 사용하는 다중 인터페이스 인스턴스에서 모든 인터페이스는 인터페이스가 있는 서브넷의 경로를 가져옵니다. 또한 인스턴스는 기본 인터페이스인 eth0과 연결된 단일 기본 경로를 가져옵니다. 수동으로 다르게 구성되지 않은 한, 직접 연결된 서브넷을 제외한 모든 대상의 인스턴스에서 나가는 모든 트래픽은 eth0의 기본 경로를 통해 인스턴스에서 나갑니다.

이 샘플에서 기본 인터페이스 eth0은 기본 경로(default via 10.138.0.1 dev eth0)를 가져오고, eth0eth1 인터페이스 모두 해당 서브넷의 경로를 가져옵니다.

instance-1:~$ ip route
default via 10.138.0.1 dev eth0
10.137.0.0/20 via 10.137.0.1 dev eth1
10.137.0.1 dev eth1 scope link
10.138.0.0/20 via 10.138.0.1 dev eth0
10.138.0.1 dev eth0 scope link

자세한 내용은 정책 라우팅 구성을 참조하세요.

다중 네트워크 인터페이스를 사용하는 정적 경로

정적 경로는 VPC 네트워크별로 적용되거나, 구성된 네트워크 태그와 일치하는 VPC 네트워크 내의 특정 인스턴스에 적용됩니다.

각 VPC 네트워크는 서로 다른 경로 집합을 가질 수 있습니다. 다중 인터페이스로 인스턴스를 구성할 때, 각 인터페이스는 서로 다른 VPC 네트워크에 속합니다. 따라서 각 인터페이스와 연결된 트래픽은 인터페이스가 속하는 VPC 네트워크 경로의 영향을 받습니다.

다중 네트워크 인터페이스가 포함된 인스턴스에서 경로에 태그 사용

경로에 태그를 사용하도록 선택할 경우, 태그가 인스턴스 수준에서 적용되므로 가상 머신 인스턴스의 모든 인스턴스에 태그가 적용됩니다. 이것이 바람직하지 않은 경우에는 특정 VPC 네트워크의 경로에 특정 태그만 사용되도록 구성을 설정하여 해당 태그만 특정 VPC 네트워크와 연결된 인터페이스에 적용되도록 합니다.

다중 네트워크 인터페이스가 포함된 부하 분산기

인스턴스 그룹 또는 대상 풀과 같은 부하 분산 백엔드에 다중 네트워크 인터페이스가 포함된 경우, 부하 분산기가 백엔드 인스턴스의 기본 인터페이스에만 트래픽을 전송합니다.

이는 GCP에서 지원되는 모든 유형의 부하 분산기에 적용됩니다.

다중 네트워크 인터페이스가 포함된 방화벽 규칙

다음과 같은 조합으로 정의된 특정 트래픽만 허용하도록 방화벽 규칙을 구성할 수 있습니다.

  • 소스 IP 범위, 허용되는 IP 주소 블록 또는 소스 태그의 목록, 허용되는 인스턴스 집합
  • 대상 프로토콜 및 포트

방화벽 규칙은 VPC 네트워크별로 적용되거나, 구성된 대상 태그와 일치하는 VPC 네트워크 내 특정 인스턴스에 적용됩니다.

각 VPC 네트워크는 서로 다른 방화벽 규칙 집합을 포함할 수 있습니다. 다중 인터페이스로 인스턴스를 구성할 때, 각 인터페이스는 서로 다른 VPC 네트워크에 속합니다. 각 인스턴스는 인스턴스가 속하는 VPC 네트워크에 적용되는 방화벽 규칙의 제한을 받습니다.

다중 네트워크 인터페이스가 포함된 인스턴스에서 방화벽에 태그 사용

방화벽 규칙 구현을 위해 태그를 사용하기로 결정한 경우 태그가 인스턴스 수준에서 적용되며 인스턴스의 모든 인터페이스에 적용된다는 사실을 유의하세요. 이것이 바람직하지 않은 경우에는 특정 VPC 네트워크의 경로와 방화벽 규칙에 특정 태그만 사용되도록 구성을 설정하여 해당 태그만 특정 VPC 네트워크와 연결된 인터페이스에 적용되도록 합니다.

예를 들어 태그에 VPC 네트워크 이름을 사용할 경우, 해당 태그가 적용되는 VPC 네트워크를 사용자가 명확하게 식별할 수 있고 인터페이스도 명확하게 식별할 수 있습니다.

특정 VPC 네트워크를 식별하는 태그 이름을 선택한 다음에는 해당 특정 VPC 네트워크에 적용되는 방화벽 규칙에만 태그를 사용합니다.

예를 들어 network1network2라는 2개의 VPC 네트워크가 있는 다음 시나리오를 살펴보세요. vm-1 인스턴스는 서로 다른 2개의 인터페이스를 통해 VPC 네트워크에 연결됩니다. 즉, nic0network1과 연결되고 nic1network2와 연결됩니다.

아래 그림은 이 설정을 보여줍니다.

방화벽에서 태그 사용(확대하려면 클릭)
방화벽에서 태그 사용(확대하려면 클릭)

이 시나리오에서는 다음 방화벽 규칙을 적용합니다.

  1. network1의 모든 인스턴스가 VM1에서 오는 SSH 연결만 수락합니다.
  2. network2의 모든 인스턴스가 VM1에서 오는 HTTP/HTTPS 연결만 수락합니다.

이 규칙을 설정하려면 다음 안내를 따르세요.

  1. network1의 모든 인스턴스가 VM1에서 오는 SSH 연결만 수락합니다.

    1. Network1에서만 사용하려는 VM1에 태그를 적용합니다. 이 예에서 태그는 vm1-network1-foo입니다.

      gcloud compute instances add-tags vm1 \
          --tags vm1-network1-foo
      
    2. vm1-network1-foo 태그를 소스 태그로 사용하여 ssh(tcp, 포트 22)를 허용하도록 network1의 방화벽 규칙을 구성합니다.

      gcloud compute firewall-rules create allow-ssh-from-vm1 \
          --allow tcp:22 \
          --network network1 \
          --source-tags vm1-network1-foo
      
  2. network2의 모든 인스턴스가 VM1에서 오는 HTTP/HTTPS 연결만 수락합니다.

    1. Network2에서만 사용하려는 VM1에 태그를 적용합니다. 이 예에서는 vm1-network2-foo가 사용됩니다.

      gcloud compute instances add-tags vm1 \
          --tags vm1-network2-foo
      
    2. vm1-network2-foo 태그를 소스 태그로 사용하여 http 및 https(tcp, 포트 80,443)를 허용하도록 Network2의 방화벽 규칙을 구성합니다.

      gcloud compute firewall-rules create allow-http-https-from-vm1 \
          --allow tcp:80,443 \
          --network network2\
          --source-tags vm1-network2-foo
      
방화벽 규칙(확대하려면 클릭)
방화벽 규칙(확대하려면 클릭)

다음 단계

네트워크 인터페이스가 여러 개인 인스턴스 만들기를 읽어보세요.

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

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