고급 VPC 개념

이 페이지에서는 VPC(가상 사설 클라우드) 네트워크에 대해 자세히 살펴봅니다. 본편인 VPC 네트워크 개요를 아직 살펴보지 않았다면 해당 내용을 먼저 검토하세요.

고급 VPC 네트워킹 세부정보

본 섹션은 VPC 네트워킹에 관한 몇 가지 상세한 세부정보를 제공합니다. 일반적인 사용 시에는 읽지 않아도 되지만 VPC 네트워킹의 작동 원리에 대한 더 상세한 정보를 확인하려면 읽어 보세요. 아래의 그림은 해당 섹션의 추가 정보를 통해 상세하게 설명합니다.

VPC 네트워크에 관한 상세한 다이어그램

처리 주체와 처리 대상

내부적으로 시스템의 여러 부분에서 여러 가지 VPC 네트워킹 기능을 처리합니다. 그 중에는 문서화가 잘 되어 있는 표준 네트워킹 기능도 있고 VPC 네트워크에만 해당되는 기능도 있습니다. 사용자가 구성할 수 있는 기능도 있고 그렇지 않은 기능도 있습니다. VPC 네트워크는 Linux의 VIRTIO 네트워크 모듈을 사용하여 이더넷 카드 및 라우터 기능을 모델링하지만 ARP 조회와 같은 더 높은 수준의 네트워킹 스택은 표준 네트워킹 소프트웨어를 사용하여 처리됩니다.

ARP 조회
인스턴스 커널이 ARP 요청을 실행하고 VPC 네트워크가 ARP 응답을 실행합니다. MAC 주소와 IP 주소 사이의 매핑은 인스턴스 커널을 통해 처리됩니다.
MAC 조회 테이블, IP 조회 테이블, 활성 연결 테이블
이러한 테이블은 기준 VPC 네트워크에서 호스팅되므로 검사하거나 구성할 수 없습니다.
DNS 서버

각 인스턴스의 메타데이터 서버가 DNS 서버 역할을 합니다. 이는 모든 VPC 네트워크 IP 주소에 대한 DNS 항목을 로컬 VPC 네트워크에 저장하고 Google의 공개 DNS 서버에 VPC 네트워크 외부 항목을 호출합니다. 사용자는 이 DNS 서버를 구성할 수 없습니다. 각 인스턴스의 DHCP 클라이언트는 해당 인스턴스의 /etc/resolv.conf 파일을 관리하도록 구성되어 있습니다.

DHCP 정책을 수정하여 사용자의 검색 도메인이나 네임서버를 인스턴스의 /etc/resolv.conf에 추가할 수 있습니다. 많은 Linux 배포판에서 /etc/dhcp/dhclient.conf를 통해 이러한 수정이 지속되도록 허용합니다. 자세한 내용은 내부 DNS 문서를 참조하세요.

VPC 네트워크와 외부 사이의 패킷 처리

VPC 네트워크로 들어오거나 VPC 네트워크에서 나가는 패킷은 방화벽 규칙, 외부 IP 조회 테이블, 활성 연결 테이블과 패킷을 대조하는 네트워크 코드를 통해 처리됩니다. 또한 VPC 네트워크는 VPC 네트워크를 드나드는 패킷에 대해 NAT를 수행하기도 합니다.

인스턴스를 통해 수신되는 패킷

이러한 패킷은 수신된 후 인스턴스 커널을 통해 일반적인 방식으로 스트림으로 전환됩니다.

인스턴스를 통해 전송되는 패킷

패킷은 인스턴스 커널을 통해 일반적인 방식으로 전송됩니다. 인터페이스 및 네트워크 기능은 VIRTIO 네트워크 모듈을 사용하여 모델링됩니다.

연결의 구체적인 단계

여기서는 인스턴스가 VPC 네트워크 호출을 실행할 때 어떤 일이 일어나는지 더 자세히 설명합니다.

인스턴스가 호출을 수행할 경우:

  1. 대상 주소가 인스턴스 이름이나 www.google.com과 같은 URL인 경우 인스턴스는 그 메타데이터 서버의 DNS 서비스를 호출하여 일치하는 IP 주소를 확인합니다. 인스턴스가 다른 DNS 서비스를 참조하도록 구성할 수 있지만 이렇게 하면 인스턴스 이름을 확인할 수 없습니다.
  2. 대상 IP 주소는 모든 인스턴스가 알고 있는 서브넷의 IP 주소 범위와 대조됩니다.

    1. IP 주소가 VPC 네트워크 외부에 있을 경우:

      1. 인스턴스가 패킷의 최종 대상으로 설정된 서브넷의 게이트웨이 MAC 주소로 패킷을 전송합니다. 게이트웨이의 MAC 주소를 확인하기 위해 인스턴스가 ARP 요청을 수행해야 할 수도 있습니다.

      2. VPC 네트워크가 IP 헤더를 다시 써서 인스턴스의 외부 IP 주소를 소스로 선언합니다. 인스턴스가 외부 IP 주소를 갖고 있지 않은 경우 호출이 허용되지 않고 VPC 네트워크가 발신자에게 알리지 않고 패킷을 삭제합니다.

      3. VPC 네트워크가 발신 패킷을 기록하고 소스와 대상을 활성 연결 테이블에 추가합니다.

      4. VPC 네트워크가 패킷을 그 대상으로 전송합니다.

      5. 대상이 패킷을 받은 후, 응답하기로 결정한 경우 응답합니다.

      6. VPC 네트워크가 이 응답을 수신하고 활성 연결 테이블을 참조하여 활성 연결임을 확인한 후 허용합니다. VPC 네트워크가 네트워크/외부 IP 조회 테이블을 참조하여 인스턴스의 외부 IP 주소를 일치하는 네트워크 주소로 대체하고 패킷을 소스 인스턴스로 전송합니다.

      7. 인스턴스가 패킷을 수신합니다.

    2. 대상 IP 주소가 VPC 네트워크 내부에 있을 경우:

      1. 인스턴스가 서브넷의 게이트웨이 MAC 주소로 패킷을 전송하도록 마스크 255.255.255.255를 사용한 IP로 구성됩니다. 게이트웨이의 MAC 주소를 확인하기 위해 인스턴스가 우선 ARP 요청을 수행해야 할 수도 있습니다.

      2. 프록시 ARP를 사용하는 VPC 네트워크가 대상 인스턴스의 MAC 주소로 응답합니다.

      3. GCP가 VPC 네트워크 내의 대상 IP로 패킷을 전달합니다.

      4. 대상 인스턴스가 패킷을 수신합니다. 대상 인스턴스가 수신 방화벽을 점검하여 이 패킷이 허용되는지 판단합니다. 허용되지 않는 경우 패킷이 자동으로 삭제됩니다. 허용되는 경우 인스턴스가 패킷을 처리합니다.

외부 인스턴스나 컴퓨터가 인스턴스를 호출할 경우:

  1. 외부의 호출자가 VPC 네트워크가 소유하는 인스턴스의 외부 IP 주소로 패킷을 전송합니다.

  2. VPC 네트워크가 이 패킷을 활성 연결 테이블과 비교하여 기존 연결인지 확인합니다.

    1. 기존 연결이 아닌 경우 VPC 네트워크는 이 연결을 허용하는 방화벽 규칙을 찾습니다.
    2. 방화벽 규칙이 없는 경우 VPC 네트워크는 발신자에게 알리지 않고 이 패킷을 삭제합니다.
  3. 기존 연결 또는 유효한 방화벽 규칙이 존재하는 경우 VPC 네트워크가 조회 테이블을 검토하여 외부 IP를 패킷에 있는 해당 내부 IP로 대체하고, 수신 패킷을 활성 연결 테이블에 기록하고, 패킷을 대상 인스턴스로 전송합니다.

  4. 패킷을 네트워크 범위 외부로 전송할 때는 IP 주소가 VPC 네트워크 IP 범위 외부에 있을 경우에 설명된 대로 인스턴스가 패킷을 수신하고 응답합니다.

  5. VPC 네트워크가 응답을 수신하고 활성 연결 테이블에서 일치하는 수신 요청을 찾아서 패킷을 허용합니다. 인스턴스의 내부 IP를 조회 테이블의 해당 외부 IP로 교체하여 소스 IP 주소를 수정한 후에 전송합니다.

VPC 네트워크 처리량 측정

가상 머신의 발신(송신) 트래픽에는 VM당 송신 처리량 한도가 적용됩니다. 이 한도는 VM의 vCPU 수에 2Gbps를 곱한 값이나 16Gbits/초(Gbps) 중 더 작은 값입니다. 이 한도는 초과해서는 안 되는 제한이며, 송신 트래픽의 실제 처리량을 나타내지는 않습니다. 트래픽에 항상 최대 처리량이 보장되는 것은 아니며, 이는 한도 외에도 많은 요인에 따라 달라집니다. 송신 처리량 한도에 대해 자세히 알아보세요.

이 한도와 관련하여 인스턴스의 성능을 측정하려면 PerfKitBenchMarker를 사용하여 인스턴스의 송신 처리량 성능을 측정합니다.

예를 들어, 로컬 컴퓨터에서 다음 명령어를 실행합니다. 이 명령어는 인스턴스를 만들고 성능을 측정합니다. 각 항목의 의미는 다음과 같습니다.

  • [MACHINE_TYPE]은 테스트하려는 머신 유형입니다(예: n1-standard-32).
  • [ZONE]은 인스턴스를 만들 영역입니다.
  • [NUMBER_OF_VCPUS]는 인스턴스의 vCPU 개수입니다(예: n1-standard-32 머신 유형의 경우 32).

단일 스트림 성능을 측정할 경우:

./pkb.py --cloud=GCP --machine_type=[MACHINE_TYPE] --benchmarks=iperf --ip_addresses=INTERNAL --zones=[ZONE]

멀티 스트림 성능을 측정할 경우:

./pkb.py --cloud=GCP --machine_type=[MACHINE_TYPE] --benchmarks=iperf --ip_addresses=INTERNAL --zones=[ZONE] --iperf_sending_thread_count=[NUMBER_OF_VCPUS]

다음 단계

  • VPC 개요에서 GCP VPC 네트워크에 관한 정보를 확인하세요.
  • VPC 네트워크를 만들고 수정하는 방법에 대한 안내는 VPC 사용을 참조하세요.
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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