여러 프로토콜의 VM 인스턴스 그룹 백엔드를 사용하여 내부 패스 스루 네트워크 부하 분산기 설정

이 페이지에서는 여러 프로토콜의 트래픽 부하를 분산하도록 내부 패스 스루 네트워크 부하 분산기를 만드는 방법을 설명합니다.

TCP 및 UDP를 포함하여 여러 프로토콜에 부하 분산기를 구성하려면 L3_DEFAULT로 설정된 프로토콜을 사용하여 전달 규칙을 만듭니다. 이 전달 규칙은 프로토콜이 UNSPECIFIED로 설정된 백엔드 서비스를 가리킵니다.

이 예시에서는 내부 패스 스루 네트워크 부하 분산기 하나를 사용하여 us-west1 리전의 백엔드 VM에 트래픽을 분산합니다. 부하 분산기에는 TCP, UDP, ICMP, ICMPv6, SCTP, ESP, AH, GRE를 처리하도록 프로토콜 L3_DEFAULT가 포함된 전달 규칙이 포함됩니다.

단일 영역 인스턴스 그룹에 대한 연결 분산을 관리하는 백엔드 서비스를 사용하여 프로토콜을 기준으로 IPv4 및 IPv6 트래픽 부하를 분산합니다.
여러 프로토콜의 내부 패스 스루 네트워크 부하 분산기(확대하려면 클릭)

시작하기 전에

  • Google Cloud CLI를 설치합니다. 이 도구에 대한 전체 개요는 gcloud CLI 개요를 참조하세요. API 및 gcloud CLI 참조에서 부하 분산과 관련된 명령어를 확인할 수 있습니다. 이전에 gcloud CLI를 실행한 적이 없으면 먼저 gcloud init 명령어를 실행하여 인증합니다.
  • bash에 대해 알아봅니다.

권한

이 가이드를 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

L3_DEFAULT 트래픽 부하 분산기 설정

이 섹션의 단계에서는 다음 구성을 설명합니다.

  • lb-network라는 커스텀 모드 VPC 네트워크를 사용하는 예시입니다. IPv4 트래픽만 처리하려면 자동 모드 네트워크를 사용하면 됩니다. 하지만 IPv6 트래픽에는 커스텀 모드 서브넷이 필요합니다.
  • IPv4 트래픽에 필요한 단일 스택 서브넷입니다(stack-typeIPv4로 설정됨). 커스텀 모드 VPC 네트워크에서 단일 스택 서브넷을 만들 때 서브넷에 IPv4 서브넷 범위를 선택합니다. IPv6 트래픽의 경우 이중 스택 서브넷(stack-typeIPv4_IPv6로 설정됨)도 필요합니다. 커스텀 모드 VPC 네트워크에서 이중 스택 서브넷을 만들 때 서브넷에 IPv6 액세스 유형을 선택합니다. 이 예시에서는 서브넷의 ipv6-access-type 매개변수를 INTERNAL로 설정합니다. 즉, 이 서브넷의 새 VM에 내부 IPv4 주소와 내부 IPv6 주소를 모두 할당할 수 있습니다.
  • 백엔드 VM에 대한 수신 연결을 허용하는 방화벽 규칙
  • 이 예시에서 사용되는 백엔드 인스턴스 그룹과 부하 분산기 구성요소는 다음 리전 및 서브넷에 있습니다.
    • 리전: us-west1
    • 서브넷: lb-subnet, 기본 IPv4 주소 범위 10.1.2.0/24. 서브넷에 구성할 IPv4 주소 범위를 선택하더라도 IPv6 주소 범위가 자동으로 할당됩니다. Google은 고정된 크기(/64)의 IPv6 CIDR 블록을 제공합니다.
  • us-west1-a 영역의 관리형 인스턴스 그룹에 있는 백엔드 VM
  • 백엔드에 대한 연결을 테스트하는 클라이언트 VM
  • 다음 구성요소가 포함된 내부 패스 스루 네트워크 부하 분산기
    • 백엔드 서비스의 상태 점검
    • 영역 인스턴스 그룹에 대한 연결 분산을 관리하도록 프로토콜이 UNSPECIFIED로 설정된 us-west1 리전의 백엔드 서비스
    • 프로토콜이 L3_DEFAULT로 설정되고 포트가 ALL으로 설정된 전달 규칙

네트워크, 리전, 서브넷 구성

내부 IPv6 범위로 서브넷을 구성하려면 Virtual Private Cloud(VPC) 네트워크 ULA 내부 IPv6 범위를 사용 설정합니다. 내부 IPv6 서브넷 범위는 이 범위에서 할당됩니다. 네트워크 및 서브넷 예시를 만들려면 다음 단계를 따르세요.

콘솔

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

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

    VPC 네트워크로 이동

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

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

  4. 이 네트워크에서 서브넷에 내부 IPv6 주소 범위를 구성하려면 다음 단계를 수행합니다.

    1. VPC 네트워크 ULA 내부 IPv6 범위에서 사용 설정됨을 선택합니다.
    2. 내부 IPv6 범위 할당에 대해 자동 또는 수동을 선택합니다.
  5. 서브넷 생성 모드커스텀을 선택합니다.

  6. 새 서브넷 섹션에서 서브넷에 다음 구성 매개변수를 지정합니다.

    1. 이름lb-subnet를 입력합니다.
    2. 리전에서 us-west1을 선택합니다.
    3. 이중 스택 서브넷을 만들려면 IP 스택 유형IPv4 및 IPv6(이중 스택)을 선택합니다.
    4. IPv4 범위10.1.2.0/24를 입력합니다.
    5. IPv6 액세스 유형에서 내부를 선택합니다.
  7. 완료를 클릭합니다.

  8. 만들기를 클릭합니다.

IPv4 트래픽을 지원하려면 다음 단계를 수행합니다.

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

    VPC 네트워크로 이동

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

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

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

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

gcloud

IPv4 및 IPv6 트래픽 모두의 경우 다음 명령어를 사용합니다.

  1. 새 커스텀 모드 VPC 네트워크를 만들려면 gcloud compute networks create 명령어를 실행합니다.

    이 네트워크의 서브넷에서 내부 IPv6 범위를 구성하려면 --enable-ula-internal-ipv6 플래그를 사용합니다. 이 옵션은 내부 IPv6 서브넷 범위에 대해 Google Cloud에서 사용되는 fd20::/20 범위 내에서 /48 ULA 프리픽스를 할당합니다.

    gcloud compute networks create lb-network \
     --subnet-mode=custom \
     --enable-ula-internal-ipv6
    
  2. lb-network 내에서 us-west1 리전의 백엔드에 대한 서브넷을 만듭니다.

    서브넷을 만들려면 gcloud compute networks subnets create 명령어를 실행합니다.

    gcloud compute networks subnets create lb-subnet \
     --network=lb-network \
     --range=10.1.2.0/24 \
     --region=us-west1 \
     --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL
    

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

  1. 커스텀 VPC 네트워크를 만들려면 gcloud compute networks create 명령어를 사용합니다.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. lb-network 네트워크 내 us-west1 리전에 백엔드의 서브넷을 만들려면 gcloud compute networks subnets create 명령어를 사용합니다.

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

API

IPv4 및 IPv6 트래픽 모두의 경우 다음 명령어를 사용합니다.

  1. 새 커스텀 모드 VPC 네트워크를 만듭니다. networks.insert 메서드에 대해 POST 요청을 실행합니다.

    이 네트워크의 서브넷에서 내부 IPv6 범위를 구성하려면 enableUlaInternalIpv6true로 설정합니다. 이 옵션은 내부 IPv6 서브넷 범위에 대해 Google에서 사용하는 fd20::/20 범위 내에서 /48 범위를 할당합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
      "autoCreateSubnetworks": false,
      "name": "lb-network",
      "mtu": MTU,
      "enableUlaInternalIpv6": true,
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: VPC 네트워크가 만들어진 프로젝트의 ID
    • MTU: 네트워크의 최대 전송 단위입니다. MTU는 1460(기본값) 또는 1500이 될 수 있습니다. MTU를 1500으로 설정하기 전에 최대 전송 단위 개요를 검토합니다.
  2. subnetworks.insert 메서드에 대해 POST 요청을 실행합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    {
    "ipCidrRange": "10.1.2.0/24",
    "network": "lb-network",
    "name": "lb-subnet"
    "stackType": IPV4_IPV6,
    "ipv6AccessType": Internal
    }
    

IPv4 트래픽 전용의 경우 다음 단계를 수행합니다.

  1. networks.insert 메서드에 대해 POST 요청을 실행합니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
    "name": "lb-network",
    "autoCreateSubnetworks": false
    }
    
  2. subnetworks.insert 메서드POST 요청을 두 번 수행합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
    {
    "name": "lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "ipCidrRange": "10.1.2.0/24",
    "privateIpGoogleAccess": false
    }
    

방화벽 규칙 구성

이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.

  • fw-allow-lb-access: VPC 네트워크의 모든 대상에 적용되는 인그레스 규칙으로, 10.1.2.0/24 범위의 소스에서 들어오는 트래픽을 허용합니다. 이 규칙에서는 서브넷에 위치하는 모든 클라이언트에서 들어오는 트래픽을 허용합니다.

  • fw-allow-lb-access-ipv6: VPC 네트워크의 모든 대상에 적용되는 인그레스 규칙으로, 서브넷에 구성된 IPv6 범위의 소스에서 오는 트래픽을 허용합니다. 이 규칙에서는 서브넷에 위치하는 모든 클라이언트에서 들어오는 IPv6 트래픽을 허용합니다.

  • fw-allow-ssh: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로, TCP 포트 22에서 임의의 주소로부터 수신되는 SSH 연결을 허용합니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작할 시스템의 IP 범위만 지정할 수도 있습니다. 이 예시에서는 allow-ssh 대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.

  • fw-allow-health-check: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 점검 시스템(130.211.0.0/2235.191.0.0/16)의 트래픽을 허용합니다. 이 예시에서는 allow-health-check 대상 태그를 사용하여 적용해야 할 인스턴스를 식별합니다.

  • fw-allow-health-check-ipv6: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 점검 시스템(2600:2d00:1:b029::/64)의 트래픽을 허용합니다. 이 예시에서는 allow-health-check-ipv6 대상 태그를 사용하여 적용해야 할 인스턴스를 식별합니다.

이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. IPv4 TCP, UDP, ICMP 트래픽이 백엔드 인스턴스 그룹 ig-a에 도달하도록 허용하려면 다음 안내를 따르세요.

    • 방화벽 규칙 만들기를 클릭합니다.
    • 이름: fw-allow-lb-access
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 네트워크의 모든 인스턴스
    • 소스 필터: IPv4 범위
    • 소스 IPv4 범위: 10.1.2.0/24
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택합니다.
      • TCP를 선택하고 ALL를 입력합니다.
      • UDP를 선택합니다.
      • 기타를 선택하고 ICMP를 입력합니다.
  3. 만들기를 클릭합니다.

  4. 들어오는 SSH 연결을 허용하려면 다음 안내를 따르세요.

    • 방화벽 규칙 만들기를 클릭합니다.
    • 이름: fw-allow-ssh
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-ssh
    • 소스 필터: IPv4 범위
    • 소스 IPv4 범위: 0.0.0.0/0
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택한 후 tcp:22를 입력합니다.
  5. 만들기를 클릭합니다.

  6. IPv6 TCP, UDP, ICMP 트래픽이 백엔드 인스턴스 그룹 ig-a에 도달하도록 허용하려면 다음 안내를 따르세요.

    • 방화벽 규칙 만들기를 클릭합니다.
    • 이름: fw-allow-lb-access-ipv6
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 네트워크의 모든 인스턴스
    • 소스 필터: IPv6 범위
    • 소스 IPv6 범위: lb-subnet에서 할당된 IPV6_ADDRESS
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택합니다.
      • TCP를 선택하고 0-65535를 입력합니다.
      • UDP를 선택합니다.
      • 기타를 선택하고 ICMPv6 프로토콜에 58을 입력합니다.
  7. 만들기를 클릭합니다.

  8. Google Cloud IPv6 상태 점검을 허용하려면 다음 안내를 따르세요.

    • 방화벽 규칙 만들기를 클릭합니다.
    • 이름: fw-allow-health-check-ipv6
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-health-check-ipv6
    • 소스 필터: IPv6 범위
    • 소스 IPv6 범위: 2600:2d00:1:b029::/64
    • 프로토콜 및 포트: 모두 허용
  9. 만들기를 클릭합니다.

  10. Google Cloud IPv4 상태 점검을 허용하려면 다음 안내를 따르세요.

    • 방화벽 규칙 만들기를 클릭합니다.
    • 이름: fw-allow-health-check
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-health-check
    • 소스 필터: IPv4 범위
    • 소스 IPv4 범위: 130.211.0.0/2235.191.0.0/16
    • 프로토콜 및 포트: 모두 허용
  11. 만들기를 클릭합니다.

gcloud

  1. IPv4 TCP 트래픽이 백엔드 인스턴스 그룹 ig-a에 도달하도록 허용하려면 다음 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. 네트워크 태그 allow-ssh를 사용하여 VM에 대한 SSH 연결을 허용하는 fw-allow-ssh 방화벽 규칙을 만듭니다. source-ranges를 생략하면 Google Cloud는 모든 소스를 의미하는 것으로 규칙을 해석합니다.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. IPv6 트래픽이 백엔드 인스턴스 그룹 ig-a에 도달하도록 허용하려면 다음 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=IPV6_ADDRESS \
        --rules=all
    

    IPV6_ADDRESSlb-subnet에서 할당된 IPv6 주소로 바꿉니다.

  4. fw-allow-health-check 방화벽 규칙을 만들어 Google Cloud 상태 점검을 허용합니다.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    
  5. fw-allow-health-check-ipv6 규칙을 만들어 Google Cloud IPv6 상태 점검을 허용합니다.

    gcloud compute firewall-rules create fw-allow-health-check-ipv6 \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-health-check-ipv6 \
       --source-ranges=2600:2d00:1:b029::/64 \
       --rules=tcp,udp,icmp
    

API

  1. fw-allow-lb-access 방화벽 규칙을 만들려면 firewalls.insert 메서드에 대해 POST 요청을 실행합니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-lb-access",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "10.1.2.0/24"
    ],
    "allPorts": true,
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  2. firewalls.insert 메서드POST 요청을 전송하여 fw-allow-lb-access-ipv6 방화벽 규칙을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
     "name": "fw-allow-lb-access-ipv6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "priority": 1000,
     "sourceRanges": [
       "IPV6_ADDRESS"
     ],
     "allPorts": true,
     "allowed": [
       {
          "IPProtocol": "tcp"
        },
        {
          "IPProtocol": "udp"
        },
        {
          "IPProtocol": "58"
        }
     ],
     "direction": "INGRESS",
     "logConfig": {
        "enable": false
     },
     "disabled": false
    }
    

    IPV6_ADDRESSlb-subnet에서 할당된 IPv6 주소로 바꿉니다.

  3. fw-allow-ssh 방화벽 규칙을 만들려면 firewalls.insert 메서드에 대해 POST 요청을 실행합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-ssh",
         "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "0.0.0.0/0"
    ],
    "targetTags": [
      "allow-ssh"
    ],
    "allowed": [
     {
       "IPProtocol": "tcp",
       "ports": [
         "22"
       ]
     }
    ],
    "direction": "INGRESS",
    "logConfig": {
     "enable": false
    },
    "disabled": false
    }
    
  4. fw-allow-health-check 방화벽 규칙을 만들려면 firewalls.insert 메서드에 대해 POST 요청을 실행합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
    ],
    "targetTags": [
      "allow-health-check"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  5. firewalls.insert 메서드POST 요청을 전송하여 fw-allow-health-check-ipv6 방화벽 규칙을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check-ipv6",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "2600:2d00:1:b029::/64"
    ],
    "targetTags": [
      "allow-health-check-ipv6"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    

백엔드 VM 및 인스턴스 그룹 만들기

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

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

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

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

설명 편의를 위해 백엔드 VM에서 Debian GNU/Linux 10을 실행합니다.

인스턴스 그룹 만들기

콘솔

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

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

    인스턴스 템플릿으로 이동

    1. 인스턴스 템플릿 만들기를 클릭합니다.
    2. 이름vm-a1를 입력합니다.
    3. 부팅 디스크가 Debian GNU/Linux 12(bookworm)와 같은 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. 네트워크 태그allow-sshallow-health-check-ipv6를 추가합니다.
      2. 네트워크 인터페이스에서 기본 인터페이스를 클릭하고 다음 필드를 구성합니다.
        • 네트워크: lb-network
        • 서브네트워크: lb-subnet
        • IP 스택 유형: IPv4 및 IPv6(이중 스택)
    7. 만들기를 클릭합니다.

IPv4 트래픽을 지원하려면 다음 단계를 수행합니다.

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

    인스턴스 템플릿으로 이동

  2. 인스턴스 템플릿 만들기를 클릭합니다.

    1. 이름vm-a1를 입력합니다.
    2. 부팅 디스크가 Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다.
    3. 고급 옵션 섹션을 펼칩니다.
    4. 관리 섹션을 펼친 후 시작 스크립트 필드에 다음 스크립트를 복사합니다. 또한 시작 스크립트가 포트 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
      
    5. 네트워킹 섹션을 펼친 후 다음을 지정합니다.

      1. 네트워크 태그allow-sshallow-health-check를 추가합니다.
      2. 네트워크 인터페이스에서 기본 인터페이스를 클릭하고 다음 필드를 구성합니다.
        • 네트워크: lb-network
        • 서브네트워크: lb-subnet
        • IP 스택 유형: IPv4(단일 스택)
    6. 만들기를 클릭합니다.

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

    인스턴스 그룹으로 이동

    1. 인스턴스 그룹 만들기를 클릭합니다.
    2. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
    3. 이름ig-a를 입력합니다.
    4. 위치에서 단일 영역을 선택합니다.
    5. 리전으로 us-west1을 선택합니다.
    6. 영역으로 us-west1-a를 선택합니다.
    7. 인스턴스 템플릿에서 vm-a1을 선택합니다.
    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 vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPv4_IPv6 \
        --tags=allow-ssh \
        --image-family=debian-12 \
        --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 vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --tags=allow-ssh \
        --image-family=debian-12 \
        --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-a \
        --zone us-west1-a \
        --size 2 \
        --template vm-a1
    

api

IPv4 및 IPv6 트래픽을 모두 처리하려면 다음 단계를 수행합니다.

  1. instances.insert 메서드POST 요청을 전송하여 VM을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check-ipv6",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4_IPV6",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    

IPv4 트래픽을 처리하려면 다음 단계를 수행합니다.

  1. instances.insert 메서드POST 요청을 전송하여 VM을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    
  2. instanceGroups.insert 메서드POST 요청을 전송하여 인스턴스 그룹을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups
    
    {
    "name": "ig-a",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
    }
    
  3. instanceGroups.addInstances 메서드POST 요청을 전송하여 인스턴스를 각 인스턴스 그룹에 추가합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances
    
    {
    "instances": [
    {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1"
    }
    ]
    }
    

클라이언트 VM 만들기

다음 예시에서는 백엔드(서버) VM과 동일한 리전에 클라이언트 VM을 만듭니다. 클라이언트는 부하 분산기 구성의 유효성을 검사하고 테스트 섹션의 설명대로 예상되는 동작을 보여줍니다.

IPv4 및 IPv6 트래픽의 경우 다음 안내를 따르세요.

콘솔

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

    VM 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.

  3. 이름vm-client-ipv6로 설정합니다.

  4. 영역us-west1-a로 설정합니다.

  5. 고급 옵션 섹션을 펼친 후 다음과 같이 변경합니다.

    • 네트워킹을 펼친 후 네트워크 태그allow-ssh를 추가합니다.
    • 네트워크 인터페이스에서 수정을 클릭하고 다음과 같이 변경한 후 완료를 클릭합니다.
      • 네트워크: lb-network
      • 서브넷: lb-subnet
      • IP 스택 유형: IPv4 및 IPv6(이중 스택)
      • 기본 내부 IP: 임시(자동)
      • 외부 IP: 임시
  6. 만들기를 클릭합니다.

gcloud

클라이언트 VM은 부하 분산기와 동일한 리전의 어떤 영역에든 위치할 수 있으며 그 리전의 어떤 서브넷이든 사용할 수 있습니다. 다음 예시에서 클라이언트는 us-west1-a 영역에 위치하며 백엔드 VM과 동일한 서브넷을 사용합니다.

gcloud compute instances create vm-client-ipv6 \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --stack-type=IPV4_IPV6 \
    --tags=allow-ssh \
    --subnet=lb-subnet

api

instances.insert 메서드에 대해 POST 요청을 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client-ipv6",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

IPv4 트래픽의 경우 다음 안내를 따르세요.

콘솔

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

    VM 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.

  3. 이름vm-client를 입력합니다.

  4. 영역us-west1-a를 입력합니다.

  5. 고급 옵션 섹션을 펼칩니다.

  6. 네트워킹을 펼치고 다음 필드를 구성합니다.

    1. 네트워크 태그allow-ssh를 입력합니다.
    2. 네트워크 인터페이스에 다음을 선택합니다.
      • 네트워크: lb-network
      • 서브넷: lb-subnet
  7. 만들기를 클릭합니다.

gcloud

클라이언트 VM은 부하 분산기와 동일한 리전의 어떤 영역에든 위치할 수 있으며 그 리전의 어떤 서브넷이든 사용할 수 있습니다. 다음 예시에서 클라이언트는 us-west1-a 영역에 위치하며 백엔드 VM과 동일한 서브넷을 사용합니다.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert 메서드에 대해 POST 요청을 실행합니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances
 {
    "name": "vm-client",
    "tags": {
      "items": [
        "allow-ssh"
      ]
  },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
      {
        "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
        "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "external-nat",
            "networkTier": "PREMIUM"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "autoDelete": true,
        "deviceName": "vm-client",
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
          "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
          "diskSizeGb": "10"
        }
      }
    ],
    "scheduling": {
      "preemptible": false
     },
    "deletionProtection": false
  }
  

부하 분산기 구성요소 구성

여러 프로토콜의 부하 분산기를 만듭니다.

gcloud

  1. 포트 80에 대한 HTTP 상태 점검을 만듭니다. 이 상태 점검은 ig-a 인스턴스 그룹의 백엔드 상태를 확인하는 데 사용됩니다.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. UNSPECIFIED로 설정된 프로토콜을 사용하여 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create be-ilb-l3-default \
        --load-balancing-scheme=internal \
        --protocol=UNSPECIFIED \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. 인스턴스 그룹을 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend be-ilb-l3-default \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. IPv6 트래픽의 경우: 지원되는 모든 IPv6 프로토콜 트래픽을 처리하도록 L3_DEFAULT로 설정된 프로토콜을 사용하여 전달 규칙을 만듭니다. 모든 포트를 L3_DEFAULT 전달 규칙으로 구성해야 합니다.

    gcloud compute forwarding-rules create fr-ilb-ipv6 \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --subnet=lb-subnet \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1 \
       --ip-version=IPV6
    
  5. IPv4 트래픽의 경우: 지원되는 모든 IPv4 프로토콜 트래픽을 처리하도록 L3_DEFAULT로 설정된 프로토콜을 사용하여 전달 규칙을 만듭니다. 모든 포트를 L3_DEFAULT 전달 규칙으로 구성해야 합니다. 10.1.2.99를 내부 IP 주소로 사용합니다.

    gcloud compute forwarding-rules create fr-ilb-l3-default \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --network=lb-network \
       --subnet=lb-subnet \
       --address=10.1.2.99 \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1
    

API

  1. regionHealthChecks.insert 메서드에 POST 요청을 전송하여 상태 점검을 만듭니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
    
    {
    "name": "hc-http-80",
    "type": "HTTP",
    "httpHealthCheck": {
     "port": 80
    }
    }
    
  2. regionBackendServices.insert 메서드에 POST 요청을 전송하여 리전 백엔드 서비스를 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    
    {
    "name": "be-ilb-l3-default",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UNSPECIFIED",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  3. IPv6 트래픽의 경우: forwardingRules.insert 메서드에 POST 요청을 전송하여 전달 규칙을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-ipv6",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "ipVersion": "IPV6",
    "networkTier": "PREMIUM"
    }
    
  4. IPv4 트래픽의 경우: forwardingRules.insert 메서드POST 요청을 전송하여 전달 규칙을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-l3-default",
    "IPAddress": "10.1.2.99",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "networkTier": "PREMIUM"
    }
    

부하 분산기 테스트

다음 테스트에서는 부하 분산기 구성 유효성을 검사하고 예상되는 동작을 확인하는 방법을 보여줍니다.

클라이언트 VM의 연결 테스트

이 테스트에서는 별도의 클라이언트 VM에서 부하 분산기에 연결합니다. 즉, 부하 분산기의 백엔드 VM에서 연결하는 것이 아닙니다.

gcloud:IPv6

  1. 클라이언트 VM 인스턴스에 연결합니다.

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. IPv6 전달 규칙 fr-ilb-ipv6를 설명합니다. 설명의 IPV6_ADDRESS를 확인합니다.

    gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
    
  3. IPv6 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다. fr-ilb-ipv6 전달 규칙의 IPV6_ADDRESS를 임시 IPv6 주소로 바꿉니다.

    curl -m 10 -s http://IPV6_ADDRESS:80
    

    예를 들어 할당된 IPv6 주소가 [fd20:1db0:b882:802:0:46:0:0/96]:80이면 명령어는 다음과 같습니다.

    curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
    

gcloud:IPv4

  1. 클라이언트 VM 인스턴스에 연결합니다.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. IPv4 전달 규칙 fr-ilb를 설명합니다.

    gcloud compute forwarding-rules describe fr-ilb --region=us-west1
    
  3. curl을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다. 다른 백엔드 VM에서 응답을 볼 수 있도록 요청을 반복합니다. 응답을 생성하는 VM의 이름은 각 백엔드 VM에 있는 /var/www/html/index.html 콘텐츠에 따라 HTML 응답에 텍스트로 표시됩니다. 예상 응답은 Page served from: vm-a1과 같습니다.

    curl http://10.1.2.99
    

    전달 규칙은 포트 8053을 제공하도록 구성됩니다. 해당 포트로 트래픽을 전송하려면 다음과 같이 IP 주소 다음에 콜론(:)과 포트 번호를 추가합니다.

    curl http://10.1.2.99:80
    

부하 분산기의 IP 주소 핑

이 테스트는 예상되는 동작을 보여줍니다. 부하 분산기의 IP 주소를 핑할 수 있습니다.

gcloud:IPv6

  1. 클라이언트 VM 인스턴스에 연결합니다.

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. 부하 분산기의 IPv6 주소에 핑을 시도합니다. fr-ilb-ipv6 전달 규칙의 IPV6_ADDRESS를 임시 IPv6 주소로 바꿉니다.

    이 예시에서는 응답이 표시되고 ping 명령어가 작동합니다.

    ping6 IPV6_ADDRESS
    

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

    ping6 2001:db8:1:1:1:1:1:1
    

    출력은 다음과 비슷합니다.

    @vm-client: ping IPV6_ADDRESS
    PING IPV6_ADDRESS (IPV6_ADDRESS) 56(84) bytes of data.
    64 bytes from IPV6_ADDRESS: icmp_seq=1 ttl=64 time=1.58 ms
    

gcloud:IPv4

  1. 클라이언트 VM 인스턴스에 연결합니다.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. 부하 분산기의 IPv4 주소에 핑을 시도합니다. 이 예시에서는 응답이 표시되고 ping 명령어가 작동합니다.

    ping 10.1.2.99
    

    출력은 다음과 같습니다.

    @vm-client: ping 10.1.2.99
    PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data.
    64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms
    64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms
    64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
    

추가 구성 옵션

이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.

예시에 고정 내부 IP 주소를 예약할 수 있습니다. 이 구성을 사용하면 여러 내부 전달 규칙에서 서로 다른 프로토콜과 포트로 동일한 IP 주소를 사용할 수 있습니다. 예시 부하 분산기의 백엔드는 계속 리전 us-west1에 있어야 합니다.

다음 다이어그램에서는 이 예시의 아키텍처를 보여줍니다.

단일 영역 인스턴스 그룹에 대한 연결 분산을 관리하는 백엔드 서비스를 사용하여 프로토콜을 기준으로 트래픽을 부하 분산합니다.
고정 내부 IP 주소를 사용하는 여러 프로토콜에 대한 내부 패스 스루 네트워크 부하 분산기(확대하려면 클릭).

다음 전달 규칙 구성을 사용하는 것이 좋을 수도 있습니다.

  • 포트가 여러 개 있는 전달 규칙:

    • 포트가 80,8080인 프로토콜 TCP
    • 포트가 ALL인 프로토콜 L3_DEFAULT
  • 모든 포트를 포함하는 전달 규칙:

    • 포트가 ALL인 프로토콜 TCP
    • 포트가 ALL인 프로토콜 L3_DEFAULT

고정 내부 IPv4 주소 예약

10.1.2.99의 고정 내부 IP 주소를 예약하고 --purpose 플래그를 SHARED_LOADBALANCER_VIP로 설정합니다. 여러 전달 규칙에서 같은 내부 IP 주소를 사용할 수 있도록 --purpose 플래그가 필요합니다.

gcloud

gcloud compute addresses create 명령어를 사용합니다.

gcloud compute addresses create internal-lb-ipv4 \
    --region us-west1 \
    --subnet lb-subnet \
    --purpose SHARED_LOADBALANCER_VIP \
    --addresses 10.1.2.99

API

addresses.insert 메서드를 호출합니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses

요청 본문에는 addressType(INTERNAL이어야 함), 주소의 name, IP 주소가 속한 subnetwork가 있어야 합니다. address10.1.2.99로 지정해야 합니다.

{
  "addressType": "INTERNAL",
  "name": "internal-lb-ipv4",
  "subnetwork": "regions/us-west1/subnetworks/lb-subnet",
  "purpose": "SHARED_LOADBALANCER_VIP",
  "address": "10.1.2.99"
}

부하 분산기 구성요소 구성

다음 구성요소로 부하 분산기 3개를 구성합니다.

  • 첫 번째 부하 분산기에는 프로토콜이 TCP이고 포트가 80인 전달 규칙이 있습니다. 포트 80의 내부 IP 주소에 도착하는 TCP 트래픽은 TCP 전달 규칙에서 처리됩니다.
  • 두 번째 부하 분산기에는 프로토콜이 UDP이고 포트가 53인 전달 규칙이 있습니다. 포트 53에서 내부 IP 주소에 도착하는 UDP 트래픽은 UDP 전달 규칙에서 처리됩니다.
  • 세 번째 부하 분산기에는 프로토콜이 L3_DEFAULT이고 포트가 ALL인 전달 규칙이 있습니다. TCP 또는 UDP 전달 규칙과 일치하지 않는 다른 모든 트래픽은 L3_DEFAULT 전달 규칙에서 처리됩니다.
  • 부하 분산기 3개 모두 해당 전달 규칙에서 동일한 고정 내부 IP 주소(internal-lb-ipv4)를 공유합니다.

첫 번째 부하 분산기 만들기

포트 80의 TCP 트래픽에 대한 첫 번째 부하 분산기를 만듭니다.

gcloud

  1. TCP 트래픽에 대한 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. 인스턴스 그룹을 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. 백엔드 서비스에 대한 전달 규칙을 만듭니다. 내부 IP 주소에 고정 예약 내부 IP 주소(internal-lb-ipv4)를 사용합니다.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

  1. regionBackendServices.insert 메서드POST 요청을 전송하여 리전 백엔드 서비스를 만듭니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "TCP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    

  2. Create the forwarding rule by making a POST request to the forwardingRules.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "TCP",
    "ports": [
     "80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
    "networkTier": "PREMIUM"
    }
    

두 번째 부하 분산기 만들기

포트 53에서 UDP 트래픽에 대한 두 번째 부하 분산기를 만듭니다.

gcloud

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

    gcloud compute backend-services create be-ilb-udp \
        --load-balancing-scheme=internal \
        --protocol=UDP \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. 인스턴스 그룹을 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend be-ilb-udp \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. 백엔드 서비스에 대한 전달 규칙을 만듭니다. 내부 IP 주소에 고정 예약 내부 IP 주소(internal-lb-ipv4)를 사용합니다.

    gcloud compute forwarding-rules create fr-ilb-udp \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=UDP \
        --ports=53 \
        --backend-service=be-ilb-udp \
        --backend-service-region=us-west1
    

API

  1. regionBackendServices.insert 메서드POST 요청을 전송하여 리전 백엔드 서비스를 만듭니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb-udp",
    "backends": [
     {
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
      "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UDP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  2. forwardingRules.insert 메서드POST 요청을 전송하여 전달 규칙을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-udp",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "UDP",
    "ports": [
     "53"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp",
    "networkTier": "PREMIUM"
    }
    

세 번째 부하 분산기 만들기

고정 예약 내부 IP 주소를 사용하는 세 번째 부하 분산기의 전달 규칙을 만듭니다.

gcloud

프로토콜이 L3_DEFAULT로 설정된 전달 규칙을 만들어 지원되는 다른 모든 IPv4 프로토콜 트래픽을 처리합니다. 고정 예약 내부 IP 주소(internal-lb-ipv4)를 내부 IP 주소로 사용합니다.

gcloud compute forwarding-rules create fr-ilb-l3-default \
    --region=us-west1 \
    --load-balancing-scheme=internal \
    --network=lb-network \
    --subnet=lb-subnet \
    --address=internal-lb-ipv4 \
    --ip-protocol=L3_DEFAULT \
    --ports=ALL \
    --backend-service=be-ilb-l3-default \
    --backend-service-region=us-west1

API

forwardingRules.insert 메서드POST 요청을 전송하여 전달 규칙을 만듭니다. PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-l3-default",
"IPAddress": "internal-lb-ipv4",
"IPProtocol": "L3_DEFAULT",
"ports": [
  "ALL"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
"networkTier": "PREMIUM"
}

부하 분산기 테스트

부하 분산기를 테스트하려면 이전 섹션의 단계를 수행합니다.

다음 단계