여러 IP 프로토콜에 외부 패스 스루 네트워크 부하 분산기 설정

이 가이드에서는 TCP, UDP, ESP, GRE, ICMP, ICMPv6 트래픽의 부하를 분산하는 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기를 만드는 방법을 설명합니다. TCP 또는 UDP가 아닌 IP 프로토콜을 사용하는 트래픽을 부하 분산하려면 이러한 구성을 사용하면 됩니다. 대상 풀 기반 외부 패스 스루 네트워크 부하 분산기는 이 기능을 지원하지 않습니다.

TCP 또는 UDP가 아닌 IP 프로토콜에 외부 패스 스루 네트워크 부하 분산기를 구성하려면 프로토콜이 L3_DEFAULT로 설정된 전달 규칙을 만듭니다. 이 전달 규칙은 프로토콜이 UNSPECIFIED로 설정된 백엔드 서비스를 가리킵니다.

이 예시에서는 외부 패스 스루 네트워크 부하 분산기 두 개를 사용하여 us-central1 리전의 영역별 관리형 인스턴스 그룹 두 개에 있는 백엔드 VM 간에 트래픽을 분산합니다. 두 부하 분산기 모두 동일한 외부 IP 주소로 트래픽을 수신합니다.

한 부하 분산기에는 프로토콜 TCP와 포트 80이 포함된 전달 규칙이 있고 다른 부하 분산기에는 프로토콜 L3_DEFAULT가 있는 전달 규칙이 있습니다. 포트 80의 IP 주소에 도착하는 TCP 트래픽은 TCP 전달 규칙에 의해 처리됩니다. TCP별 전달 규칙과 일치하지 않는 다른 모든 트래픽은 L3_DEFAULT 전달 규칙에 의해 처리됩니다.

영역별 관리형 인스턴스 그룹이 있는 외부 패스 스루 네트워크 부하 분산기
영역별 관리형 인스턴스 그룹이 있는 외부 패스 스루 네트워크 부하 분산기

이 시나리오에서는 정상 인스턴스에 트래픽을 분산합니다. 이를 지원하기 위해 트래픽이 정상 인스턴스에만 전송되도록 TCP 상태 점검을 만듭니다.

외부 패스 스루 네트워크 부하 분산기는 리전별 부하 분산기입니다. 모든 부하 분산기 구성요소가 동일한 리전에 있어야 합니다.

시작하기 전에

Google Cloud CLI 설치 이 도구에 대한 전체 개요는 gcloud CLI 개요를 참조하세요. 부하 분산과 관련된 명령어는 API 및 gcloud 참조에서 확인할 수 있습니다.

이전에 gcloud CLI를 실행한 적이 없으면 먼저 gcloud init 명령어를 실행하여 인증합니다.

이 가이드는 bash에 익숙한 개발자를 대상으로 합니다.

네트워크 및 서브넷 설정

이 페이지의 예시에서는 lb-network라는 커스텀 모드 VPC 네트워크를 사용합니다. IPv4 트래픽만 처리하려면 자동 모드 VPC 네트워크를 사용하면 됩니다. 하지만 IPv6 트래픽에는 커스텀 모드 서브넷이 필요합니다.

IPv6 트래픽에는 이중 스택 서브넷(stack-typeIPv4_IPv6로 설정됨)도 필요합니다. 커스텀 모드 VPC 네트워크에서 이중 스택 서브넷을 만들 때 서브넷에 IPv6 액세스 유형을 선택합니다. 이 예시에서는 서브넷의 ipv6-access-type 매개변수를 EXTERNAL로 설정합니다. 즉, 이 서브넷의 새 VM에 외부 IPv4 주소와 외부 IPv6 주소를 모두 할당할 수 있습니다.

이 예시에서 사용되는 백엔드 및 부하 분산기 구성요소는 다음 리전 및 서브넷에 있습니다.

  • 리전: us-central1
  • 서브넷: lb-subnet, 기본 IPv4 주소 범위 10.1.2.0/24. 서브넷에 구성할 IPv4 주소 범위를 선택하더라도 IPv6 주소 범위가 자동으로 할당됩니다. Google은 고정된 크기(/64)의 IPv6 CIDR 블록을 제공합니다.

예시 네트워크 및 서브넷을 만들려면 다음 단계를 따르세요.

콘솔

IPv4 및 IPv6 트래픽을 모두 지원하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. VPC 네트워크 만들기를 클릭합니다.

  3. lb-network이름을 입력합니다.

  4. 서브넷 섹션에서 다음을 수행합니다.

    • 서브넷 생성 모드커스텀으로 설정합니다.
    • 새 서브넷 섹션에서 다음 필드를 구성하고 완료를 클릭합니다.
      • 이름: lb-subnet
      • 리전: us-central1
      • IP 스택 유형: IPv4 및 IPv6(이중 스택)
      • IPv4 범위: 10.1.2.0/24
        서브넷의 IPv4 주소 범위를 구성할 수 있지만 서브넷의 IPv6 주소 범위를 선택할 수는 없습니다. Google은 고정된 크기(/64)의 IPv6 CIDR 블록을 제공합니다.
      • IPv6 액세스 유형: 외부
  5. 만들기를 클릭합니다.

IPv4 트래픽만 지원하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. VPC 네트워크 만들기를 클릭합니다.

  3. lb-network이름을 입력합니다.

  4. 서브넷 섹션에서 다음을 수행합니다.

    • 서브넷 생성 모드커스텀으로 설정합니다.
    • 새 서브넷 섹션에서 다음 필드를 구성하고 완료를 클릭합니다.
      • 이름: lb-subnet
      • 리전: us-central1
      • IP 스택 유형: IPv4(단일 스택)
      • IPv4 범위: 10.1.2.0/24
  5. 만들기를 클릭합니다.

gcloud

  1. 커스텀 모드 VPC 네트워크를 만듭니다.

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. lb-network 네트워크 내에서 us-central1 리전의 백엔드에 대한 서브넷을 만듭니다.

    IPv4 및 IPv6 트래픽 모두의 경우 다음 명령어를 사용하여 이중 스택 서브넷을 만듭니다.

    gcloud compute networks subnets create lb-subnet \
      --stack-type=IPV4_IPv6 \
      --ipv6-access-type=EXTERNAL \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

    IPv4 트래픽 전용의 경우 다음 명령어를 사용합니다.

    gcloud compute networks subnets create lb-subnet \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

영역별 관리형 인스턴스 그룹 만들기

이 부하 분산 시나리오에서는 Compute Engine 영역별 관리형 인스턴스 그룹 2개를 만들고 각 인스턴스에 Apache 웹 서버를 설치합니다.

IPv4 및 IPv6 트래픽을 모두 처리하려면 백엔드 VM을 이중 스택으로 구성합니다. VM의 stack-typeIPv4_IPv6로 설정합니다. VM은 서브넷에서 ipv6-access-type 설정(이 예시에서는 EXTERNAL)도 상속합니다. IPv6 요구사항에 대한 자세한 내용은 외부 패스 스루 네트워크 부하 분산기 개요: 전달 규칙을 참조하세요.

기존 VM을 백엔드로 사용하려면 gcloud compute instances network-interfaces update 명령어를 사용하여 VM을 이중 스택으로 업데이트합니다.

외부 패스 스루 네트워크 부하 분산기에 백엔드 VM으로 참여하는 인스턴스는 적절한 Linux 게스트 환경, Windows 게스트 환경 또는 기타 동일한 기능을 제공하는 프로세스를 실행해야 합니다.

포트 80에서 TCP 트래픽에 대한 인스턴스 그룹 만들기

콘솔

  1. 인스턴스 템플릿을 만듭니다. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

    1. 인스턴스 템플릿 만들기를 클릭합니다.
    2. 이름ig-us-template-tcp-80를 입력합니다.
    3. 부팅 디스크가 Debian GNU/Linux 10(buster)과 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다.
    4. 네트워킹, 디스크, 보안, 관리, 단독 테넌시를 클릭합니다.
    5. 관리를 클릭하고 시작 스크립트 필드에 다음 스크립트를 복사합니다.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    6. 네트워킹을 클릭합니다.

      1. 네트워크 태그network-lb-tcp-80를 추가합니다.
      2. 네트워크 인터페이스에서 기본 인터페이스를 클릭하고 다음 필드를 구성합니다.
        1. 네트워크: lb-network
        2. 서브네트워크: lb-subnet
    7. 만들기를 클릭합니다.

  2. 관리형 인스턴스 그룹을 만듭니다. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹으로 이동

    1. 인스턴스 그룹 만들기를 클릭합니다.
    2. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
    3. 이름ig-us-tcp-80를 입력합니다.
    4. 위치에서 단일 영역을 선택합니다.
    5. 리전으로 us-central1을 선택합니다.
    6. 영역으로 us-central1-a를 선택합니다.
    7. 인스턴스 템플릿에서 ig-us-template-tcp-80을 선택합니다.
    8. 그룹에 만들 인스턴스의 수를 지정합니다.

      이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.

      • 자동 확장 모드에서 Off:do not autoscale을 선택합니다.
      • 최대 인스턴스 수2를 입력합니다.
    9. 만들기를 클릭합니다.

gcloud

이 가이드의 gcloud 안내에서는 Cloud Shell 또는 bash가 설치된 다른 환경을 사용한다고 가정합니다.

  1. gcloud compute instance-templates create 명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.

    IPv4 및 IPv6 트래픽을 모두 처리하려면 다음 명령어를 사용하세요.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    

    또는 IPv4 트래픽 전용 트래픽을 처리하려면 다음 명령어를 사용합니다.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create 명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template-tcp-80
    

포트 8080, UDP, ESP, ICMP 트래픽에 TCP용 인스턴스 그룹 만들기

콘솔

  1. 인스턴스 템플릿을 만듭니다. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

    1. 인스턴스 템플릿 만들기를 클릭합니다.
    2. 이름ig-us-template-l3-default를 입력합니다.
    3. 부팅 디스크가 Debian GNU/Linux 10(buster)과 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다.
    4. 네트워킹, 디스크, 보안, 관리, 단독 테넌시를 클릭합니다.
    5. 관리를 클릭하고 시작 스크립트 필드에 다음 스크립트를 복사합니다. 또한 시작 스크립트가 포트 80 대신 포트 8080에서 리슨하도록 Apache 서버를 구성합니다.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. 네트워킹을 클릭합니다.

      1. 네트워크 태그network-lb-l3-default를 추가합니다.
      2. 네트워크 인터페이스에서 기본 인터페이스를 클릭하고 다음 필드를 구성합니다.
        1. 네트워크: lb-network
        2. 서브네트워크: lb-subnet
    7. 만들기를 클릭합니다.

  2. 관리형 인스턴스 그룹을 만듭니다. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹으로 이동

    1. 인스턴스 그룹 만들기를 클릭합니다.
    2. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
    3. 이름ig-us-l3-default를 입력합니다.
    4. 위치에서 단일 영역을 선택합니다.
    5. 리전으로 us-central1을 선택합니다.
    6. 영역으로 us-central1-c를 선택합니다.
    7. 인스턴스 템플릿에서 ig-us-template-l3-default을 선택합니다.
    8. 그룹에 만들 인스턴스의 수를 지정합니다.

      이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.

      • 자동 확장 모드에서 Off:do not autoscale을 선택합니다.
      • 최대 인스턴스 수2를 입력합니다.
    9. 만들기를 클릭합니다.

gcloud

이 가이드의 gcloud 안내에서는 Cloud Shell 또는 bash가 설치된 다른 환경을 사용한다고 가정합니다.

  1. gcloud compute instance-templates create 명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.

    또한 시작 스크립트가 포트 80 대신 포트 8080에서 리슨하도록 Apache 서버를 구성합니다.

    IPv4 및 IPv6 트래픽을 모두 처리하려면 다음 명령어를 사용하세요.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
    systemctl restart apache2'
    

    또는 IPv4 트래픽만 처리하려면 다음 명령어를 사용합니다.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
    systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create 명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create ig-us-l3-default \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template-l3-default
    

방화벽 규칙 구성

다음과 같이 방화벽 규칙을 만듭니다.

  • 외부 TCP 트래픽이 포트 80의 ig-us-tcp-80 인스턴스 그룹에 있는 백엔드 인스턴스에 도달하도록 허용하는 방화벽 규칙(대상 태그 network-lb-tcp-80 사용)입니다. IPv4 및 IPv6 트래픽을 허용하도록 별도의 방화벽 규칙을 만듭니다.
  • 다른 외부 트래픽(포트 8080, UDP, ESP, ICMP의 TCP)이 ig-us-l3-default 인스턴스 그룹의 백엔드 인스턴스에 도달하도록 허용하는 방화벽 규칙(대상 태그 network-lb-l3-default 사용)입니다. IPv4 및 IPv6 트래픽을 허용하도록 별도의 방화벽 규칙을 만듭니다.

이 예시에서는 모든 소스 범위의 트래픽이 구성된 포트의 백엔드 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다. 특히 상태 점검 프로브에 대해 별도의 방화벽 규칙을 만들려면 상태 점검 개요: 프로브 IP 범위 및 방화벽 규칙에 설명된 소스 IP 주소 범위를 사용합니다.

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
    방화벽 정책으로 이동
  2. IPv4 TCP 트래픽ig-us-tcp-80 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.
    1. 방화벽 규칙 만들기를 클릭합니다.
    2. allow-network-lb-tcp-80-ipv4이름을 입력합니다.
    3. 방화벽 규칙이 적용되는 네트워크를 선택합니다(기본값).
    4. 대상에서 지정된 대상 태그를 선택합니다.
    5. 대상 태그 필드에 network-lb-tcp-80를 입력합니다.
    6. 소스 필터IPv4 범위로 설정합니다.
    7. 소스 IPv4 범위0.0.0.0/0으로 설정하여 모든 소스의 트래픽을 허용합니다. 이렇게 하면 외부 트래픽 및 상태 점검 프로브가 백엔드 인스턴스에 도달할 수 있습니다.
    8. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다. TCP 체크박스를 선택하고 80을 입력합니다.
    9. 만들기를 클릭합니다. 콘솔에 새 방화벽 규칙이 표시되는 데 시간이 걸릴 수 있습니다. 또는 새로고침을 클릭해야 규칙을 볼 수 있는 경우도 있습니다.
  3. IPv4 UDP, ESP, ICMP 트래픽ig-us-l3-default 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.
    1. 방화벽 규칙 만들기를 클릭합니다.
    2. allow-network-lb-l3-default-ipv4이름을 입력합니다.
    3. 방화벽 규칙이 적용되는 네트워크를 선택합니다(기본값).
    4. 대상에서 지정된 대상 태그를 선택합니다.
    5. 대상 태그 필드에 network-lb-l3-default를 입력합니다.
    6. 소스 필터IPv4 범위로 설정합니다.
    7. 소스 IPv4 범위0.0.0.0/0으로 설정하여 모든 소스의 트래픽을 허용합니다. 이렇게 하면 외부 트래픽 및 상태 점검 프로브가 백엔드 인스턴스에 도달할 수 있습니다.
    8. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다.
      1. TCP 체크박스를 선택하고 8080을 입력합니다.
      2. UDP 체크박스를 선택합니다.
      3. 기타 체크박스를 선택하고 esp, icmp를 입력합니다.
    9. 만들기를 클릭합니다. 콘솔에 새 방화벽 규칙이 표시되는 데 시간이 걸릴 수 있습니다. 또는 새로고침을 클릭해야 규칙을 볼 수 있는 경우도 있습니다.
  4. IPv6 TCP 트래픽ig-us-tcp-80 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.
    1. 방화벽 규칙 만들기를 클릭합니다.
    2. allow-network-lb-tcp-80-ipv6이름을 입력합니다.
    3. 방화벽 규칙이 적용되는 네트워크를 선택합니다(기본값).
    4. 대상에서 지정된 대상 태그를 선택합니다.
    5. 대상 태그 필드에 network-lb-tcp-80를 입력합니다.
    6. 소스 필터IPv6 범위로 설정합니다.
    7. 소스 IPv6 범위::/0으로 설정하여 모든 소스의 트래픽을 허용합니다. 이렇게 하면 외부 트래픽 및 상태 점검 프로브가 백엔드 인스턴스에 도달할 수 있습니다.
    8. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다. TCP 옆의 체크박스를 클릭하고 80을 입력합니다.
    9. 만들기를 클릭합니다. 콘솔에 새 방화벽 규칙이 표시되는 데 시간이 걸릴 수 있습니다. 또는 새로고침을 클릭해야 규칙을 볼 수 있는 경우도 있습니다.
  5. IPv6 UDP, ESP, ICMPv6 트래픽ig-us-l3-default 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다. 이 방화벽 규칙에서는 TCP 상태 점검 프로브가 포트 8080의 인스턴스에 도달할 수도 있습니다.
    1. 방화벽 규칙 만들기를 클릭합니다.
    2. allow-network-lb-l3-default-ipv6이름을 입력합니다.
    3. 방화벽 규칙이 적용되는 네트워크를 선택합니다(기본값).
    4. 대상에서 지정된 대상 태그를 선택합니다.
    5. 대상 태그 필드에 network-lb-l3-default를 입력합니다.
    6. 소스 필터IPv6 범위로 설정합니다.
    7. 소스 IPv6 범위::/0으로 설정하여 모든 소스의 트래픽을 허용합니다. 이렇게 하면 외부 트래픽 및 상태 점검 프로브가 백엔드 인스턴스에 도달할 수 있습니다.
    8. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다.
      1. TCP 옆의 체크박스를 클릭하고 8080을 입력합니다.
      2. UDP 옆의 체크박스를 클릭합니다.
      3. 기타 옆의 체크박스를 클릭하고 esp, 58를 입력합니다.
    9. 만들기를 클릭합니다. 콘솔에 새 방화벽 규칙이 표시되는 데 시간이 걸릴 수 있습니다. 또는 새로고침을 클릭해야 규칙을 볼 수 있는 경우도 있습니다.

gcloud

  1. IPv4 TCP 트래픽ig-us-tcp-80 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. IPv4 UDP, ESP, ICMP 트래픽ig-us-l3-default 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다. 이 방화벽 규칙에서는 TCP 상태 점검 프로브가 포트 8080의 인스턴스에 도달할 수도 있습니다.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. IPv6 TCP 트래픽ig-us-tcp-80 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. IPv6 UDP, ESP, ICMPv6 트래픽ig-us-l3-default 인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다. 이 방화벽 규칙에서는 TCP 상태 점검 프로브가 포트 8080의 인스턴스에 도달할 수도 있습니다.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

부하 분산기 구성

다음으로, 부하 분산기를 설정합니다. 포트 80에서 TCP 트래픽을 처리하는 부하 분산기 하나와 포트 8080, UDP, ESP, ICMP 트래픽에서 TCP를 처리하는 부하 분산기 하나를 구성합니다. 두 부하 분산기 모두 전달 규칙과 동일한 외부 IP 주소를 사용합니다.

부하 분산기를 구성하면 백엔드 VM 인스턴스에서 구성된 고정 외부 IP 주소를 대상으로 하는 패킷을 수신합니다. Compute Engine에서 제공하는 이미지를 사용하는 경우 IP 주소를 처리하도록 인스턴스가 자동으로 구성됩니다. 다른 이미지를 사용하는 경우 이 주소를 eth0의 별칭 또는 각 인스턴스의 루프백으로 구성해야 합니다.

콘솔

gcloud

  1. 정적 외부 IP 주소를 예약합니다.

    IPv4 트래픽: 부하 분산기의 고정 외부 IP 주소를 만듭니다.

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    IPv6 트래픽: 부하 분산기의 고정 외부 IPv6 주소 범위를 만듭니다. 사용되는 서브넷은 외부 IPv6 서브넷 범위를 갖는 이중 스택 서브넷이어야 합니다.

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. 포트 80에 대한 TCP 상태 점검을 만듭니다. 이 상태 점검은 ig-us-tcp-80 인스턴스 그룹의 백엔드 상태를 확인하는 데 사용됩니다.

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. 포트 8080에 대한 TCP 상태 점검을 만듭니다. 이 상태 점검은 ig-us-l3-default 인스턴스 그룹의 백엔드 상태를 확인하는 데 사용됩니다.

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. 포트 80의 TCP 트래픽에 대한 첫 번째 부하 분산기를 만듭니다.

    1. TCP로 설정된 프로토콜을 사용하여 백엔드 서비스를 만듭니다.

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. 백엔드 인스턴스 그룹을 백엔드 서비스에 추가합니다.

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. IPv4 트래픽: 포트 80에서 들어오는 TCP 트래픽을 백엔드 서비스로 라우팅하는 전달 규칙을 만듭니다. TCP는 기본 전달 규칙 프로토콜이며 명시적으로 설정할 필요가 없습니다.

      1단계에서 예약된 IP 주소를 부하 분산기의 고정 외부 IP 주소로 사용합니다.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. IPv6 트래픽: 포트 80에서 들어오는 TCP 트래픽을 백엔드 서비스로 라우팅하는 전달 규칙을 만듭니다. TCP는 기본 전달 규칙 프로토콜이며 명시적으로 설정할 필요가 없습니다.

      1단계에서 예약된 IPv6 주소 범위를 부하 분산기의 고정 외부 IP 주소로 사용합니다. 사용되는 서브넷은 외부 IPv6 서브넷 범위를 갖는 이중 스택 서브넷이어야 합니다.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. TCP(포트 8080), UDP, ESP, ICMP 트래픽용 두 번째 부하 분산기를 만듭니다.

    1. UNSPECIFIED로 설정된 프로토콜을 사용하여 백엔드 서비스를 만듭니다.

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. 백엔드 인스턴스 그룹을 백엔드 서비스에 추가합니다.

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. IPv4 트래픽: 프로토콜이 L3_DEFAULT로 설정된 전달 규칙을 만들어 지원되는 남은 모든 IP 프로토콜 트래픽(포트 8080의 TCP, UDP, ESP, ICMP)을 처리합니다. 모든 포트를 L3_DEFAULT 전달 규칙으로 구성해야 합니다.

      이전 부하 분산기에 사용한 것과 동일한 외부 IPv4 주소를 사용합니다.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. IPv6 트래픽: 프로토콜이 L3_DEFAULT로 설정된 전달 규칙을 만들어 지원되는 남은 모든 IP 프로토콜 트래픽(포트 8080의 TCP, UDP, ESP, ICMP)을 처리합니다. 모든 포트를 L3_DEFAULT 전달 규칙으로 구성해야 합니다.

      1단계에서 예약된 IPv6 주소 범위를 부하 분산기의 고정 외부 IP 주소로 사용합니다. 사용되는 서브넷은 외부 IPv6 서브넷 범위를 갖는 이중 스택 서브넷이어야 합니다.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

부하 분산기 테스트

부하 분산 서비스를 구성했으므로 이제 부하 분산기의 외부 IP 주소로 트래픽을 전송할 수 있으며 트래픽이 백엔드 인스턴스로 분산되는 것을 볼 수 있습니다.

부하 분산기의 외부 IP 주소 조회

콘솔

  1. 고급 부하 분산 페이지에서 전달 규칙 탭으로 이동합니다.
    전달 규칙 탭으로 이동
  2. 부하 분산기에서 사용하는 전달 규칙을 찾습니다.
  3. IP 주소 열에서 각 IPv4 및 IPv6 전달 규칙에 나열된 외부 IP 주소를 기록해 둡니다.

gcloud: IPv4

부하 분산기에서 사용하는 전달 규칙의 외부 IP 주소를 확인하려면 다음 명령어를 입력합니다.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv4 \
    --region us-central1

이 예시에서는 두 IPv4 전달 규칙 모두에 동일한 IP 주소를 사용하므로 forwarding-rule-l3-default-ipv4를 사용해도 적합합니다.

gcloud: IPv6

부하 분산기에서 사용하는 forwarding-rule-tcp-80-ipv6 전달 규칙의 외부 IPv6 주소를 확인하려면 다음 명령어를 입력합니다.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv6 \
    --region us-central1

이 예시에서는 두 IPv6 전달 규칙 모두에 동일한 IP 주소를 사용하므로 forwarding-rule-l3-default-ipv6를 사용해도 적합합니다.

부하 분산기로 트래픽 전송

이 절차는 외부 트래픽을 부하 분산기로 전송합니다. 다음 테스트를 실행하여 포트 80의 TCP 트래픽이 ig-us-tcp-80 인스턴스 그룹에 의해 부하 분산되고 다른 모든 트래픽(포트 8080의 TCP, UDP, ESP, ICMP)이 ig-us-l3-default 인스턴스 그룹에 의해 처리되고 있는지 확인합니다.

포트 80에서 TCP 요청을 사용하여 동작 확인

  1. 포트 80에서 TCP를 통해 curl을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다.

    • IPv4 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.

      $ while true; do curl -m1 IP_ADDRESS; done
      
    • IPv6 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.

      $ while true; do curl -m1 http://IPV6_ADDRESS; done
      

      예를 들어 할당된 IPv6 주소가 [2001:db8:1:1:1:1:1:1/96]이면 명령어는 다음과 같습니다.

      $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. curl 명령어에서 반환된 텍스트를 확인합니다. 응답을 생성하는 백엔드 VM의 이름은 해당 텍스트에 표시됩니다(예: Page served from: VM_NAME). ig-us-tcp-80 인스턴스 그룹의 인스턴스에서만 응답이 발생해야 합니다.

    처음에 응답이 성공하지 못하면 구성이 완전히 로드되고 인스턴스가 정상으로 표시될 때까지 30초 정도 기다린 다음 다시 시도합니다.

포트 8080에서 TCP 요청을 사용하여 동작 확인

포트 8080에서 TCP를 통해 curl을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다.

  • IPv4 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.

    $ while true; do curl -m1 IPV4_ADDRESS:8080; done
    
  • IPv6 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.

    $ while true; do curl -m1 http://IPV6_ADDRESS; done
    

    예를 들어 할당된 IPv6 주소가 [2001:db8:1:1:1:1:1:1/96]이면 명령어는 다음과 같습니다.

    $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

curl 명령어에서 반환된 텍스트를 확인합니다. ig-us-l3-default 인스턴스 그룹의 인스턴스에서만 응답이 발생해야 합니다.

포트 8080에서 부하 분산기의 IP 주소로 전송된 모든 트래픽이 ig-us-l3-default 인스턴스 그룹의 백엔드에서만 처리됨을 보여줍니다.

ICMP 요청을 사용하여 동작 확인

ICMP 트래픽의 동작을 확인하려면 tcpdump 명령어의 출력을 캡처하여 ig-us-l3-default 인스턴스 그룹의 백엔드 VM만 부하 분산기로 전송되는 ICMP 요청을 처리하는지 확인합니다.

  1. SSH를 통해 백엔드 VM에 연결합니다.

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

    2. 가상 머신 인스턴스 목록에서 연결할 인스턴스 행의 SSH를 클릭합니다.

  2. tcpdump를 사용하여 ICMP 트래픽 리슨을 시작하려면 다음 명령어를 실행합니다.

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    SSH 창을 열어 둡니다.

  3. 4개의 백엔드 VM 모두에 1단계와 2단계를 반복합니다.

  4. 부하 분산기에 ICMP 요청을 수행합니다.

    IPv4 응답을 테스트하려면 ping을 사용하여 부하 분산기의 IPv4 주소에 연결합니다.

    ping IPV4_ADDRESS
    

    IPv6 응답을 테스트하려면 ping6을 사용하여 부하 분산기의 IPv6 주소에 연결합니다.

    ping6 IPV6_ADDRESS
    

    예를 들어 할당된 IPv6 주소가 [2001:db8:1:1:1:1:1:1/96]이면 명령어는 다음과 같습니다.

    ping6 2001:db8:1:1:1:1:1:1
    
  5. VM마다 열린 SSH 창으로 돌아가서 tcpdump 캡처 명령어를 중지합니다. Ctrl+C를 사용하면 됩니다.

  6. 각 VM에 대해 tcpdump 명령어의 출력을 icmpcapture.pcap 파일에서 확인합니다.

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    ig-us-l3-default 인스턴스 그룹의 백엔드 VM에서는 다음과 같은 파일 항목이 표시됩니다.

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    ig-us-tcp-80 인스턴스 그룹의 백엔드 VM에서는 수신된 패킷이 없고 파일이 비어 있어야 합니다.

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

다음 단계