이 문서에서는 TCP, UDP, ESP, GRE, ICMP, ICMPv6 트래픽의 부하를 분산하는 전역 외부 패스 스루 네트워크 부하 분산기를 만드는 방법을 보여줍니다.
이러한 구성을 사용하여 다음 작업을 할 수 있습니다.
TCP 또는 UDP가 아닌 IP 프로토콜을 사용하는 트래픽을 부하 분산합니다.
단일 부하 분산기로 여러 프로토콜을 제공합니다. 예를 들어 IPsec 서비스는 일반적으로 ESP 및 UDP 기반 IKE와 NAT-T 트래픽 조합을 처리합니다.
시작하기 전에
설정이 다음 기본 요건을 충족하는지 확인합니다.
Google Cloud CLI 설치
이 가이드의 안내에서는 Google Cloud CLI를 사용하여 전역 외부 패스 스루 네트워크 부하 분산기를 구성합니다. 설치하려면 gcloud CLI 설치를 참고하세요.
필요한 역할
프로젝트 생성자에게는 소유자 역할(roles/owner)이 부여됩니다. 기본적으로 소유자 역할 (roles/owner) 또는 편집자 역할 (roles/editor)에는 이 문서를 따르는 데 필요한 권한이 포함됩니다.
프로젝트 생성자가 아니면 프로젝트에서 적합한 주 구성원에 대해 필수 권한을 부여해야 합니다. 예를 들어 주 구성원은 Google 계정 (최종 사용자)이거나 서비스 계정일 수 있습니다.
VM 인스턴스 그룹 백엔드를 사용하여 전역 외부 패스스루 네트워크 로드 밸런서를 구성하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
VPC 네트워크, 서브넷, 부하 분산 구성요소 만들기: Compute 네트워크 관리자 역할 (
roles/compute.networkAdmin) -
방화벽 규칙 만들기: Compute 보안 관리자 역할 (
roles/compute.securityAdmin) -
VM 인스턴스 만들기: Compute 인스턴스 관리자 역할 (
roles/compute.instanceAdmin)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
Cloud Load Balancing의 역할 및 권한에 대한 자세한 내용은 역할 및 권한을 참고하세요. 전달 규칙에 대한 조건부 권한 부여로 IAM 정책을 정의하는 방법에 대한 자세한 내용은 전달 규칙에 대한 IAM 조건을 참고하세요.
설정 개요
다음 다이어그램은 동일한 IP 주소 쌍에 대해 서로 다른 IP 프로토콜 및 포트 집합을 제공하는 두 개의 전역 외부 패스 스루 네트워크 부하 분산기를 보여줍니다. 전역 외부 패스 스루 네트워크 부하 분산기의 작동 방식을 이해하려면 개요 가이드의 아키텍처 섹션을 참고하세요.
포트 80의
TCP부하 분산기이 부하 분산기의 전달 규칙은 포트
80에 도착하는TCP트래픽만 캡처하도록 구성되어 있습니다.- 패킷이 전달 규칙 IP 주소에 도착하면Google Cloud 에서 먼저
TCP패킷인지, 대상 포트가 정확히80인지 확인합니다. - 이러한 조건이 충족되면 이 패킷은 이 특정
TCP전달 규칙에 의해 캡처되고 참조된 백엔드 서비스를 기반으로 백엔드로 라우팅됩니다.
- 패킷이 전달 규칙 IP 주소에 도착하면Google Cloud 에서 먼저
TCP:8080및UDP트래픽용L3_DEFAULT부하 분산기이 부하 분산기의 전달 규칙은
L3_DEFAULT프로토콜을 사용하며 모든 포트에서 트래픽을 허용하도록 구성되어 있습니다. 이 설정에서 두 번째 규칙은 첫 번째 전달 규칙이 처리하지 않는 트래픽 (예: UDP, ICMP, 포트 80 이외의 모든 TCP 트래픽)을 처리하는 포괄적인 규칙으로 작동합니다.- 패킷이 포트 80에 도착하는 특정 TCP 트래픽 규칙과 일치하지 않는 전달 규칙 IP 주소에 도착하면 (예: UDP 트래픽, ICMP 핑 또는 포트 8080 또는 443의 TCP 트래픽인 경우) 이 패킷은
L3_DEFAULT전달 규칙에 의해 캡처됩니다. TCP:8080및UDP트래픽만 백엔드 VM 인스턴스에 도달하도록 허용하는 방화벽 규칙을 추가합니다. 따라서L3_DEFAULT전달 규칙이 모든 포트에서 모든 IP 프로토콜 트래픽을 캡처하더라도 방화벽 규칙은 부하 분산 트래픽을TCP:8080및UDP트래픽으로 제한합니다.- 그런 다음 패킷은 참조된 백엔드 서비스를 기반으로 백엔드로 라우팅됩니다.
Google Cloud 는 동일한 IP 주소의
L3_DEFAULT규칙을 통해 나머지 트래픽이 흐르도록 하기 전에 포트80의 더 구체적인TCP규칙에 우선순위를 부여합니다.- 패킷이 포트 80에 도착하는 특정 TCP 트래픽 규칙과 일치하지 않는 전달 규칙 IP 주소에 도착하면 (예: UDP 트래픽, ICMP 핑 또는 포트 8080 또는 443의 TCP 트래픽인 경우) 이 패킷은
네트워크 및 서브넷 설정
이 예시에서는 서로 다른 두 리전에 서브넷이 있는 lb-network라는 커스텀 모드 VPC 네트워크를 사용합니다.
다음 표에는 부하 분산기 트래픽 유형, 백엔드 VM 네트워크 인터페이스, VPC 서브넷 스택 유형 간의 호환성이 요약되어 있습니다. 전역 외부 패스 스루 네트워크 부하 분산기 아키텍처 가이드에 설명된 백엔드 VM의 VPC 서브넷과의 네트워크 인터페이스 호환성 요구사항을 숙지해야 합니다.
| 부하 분산기 트래픽 유형 | 백엔드 VM 네트워크 인터페이스의 스택 유형 | VPC 서브넷의 스택 유형 |
|---|---|---|
| IPv4 트래픽만 | IPV4_ONLY |
IPV4_ONLY 또는 IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv6 트래픽만 | IPV6_ONLY |
IPV6_ONLY 또는 IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4 및 IPv6 트래픽 | IPV4_IPV6 |
IPV4_IPV6 |
이 예시에서 사용되는 백엔드는 다음 리전 및 서브넷에 있습니다. 서브넷에 구성할 IPv4 주소 범위를 선택할 수 있지만 Google Cloud 는 전체 서브넷에 /64 IPv6 주소 범위를 자동으로 할당합니다.
리전:
us-west1- 서브넷: 기본 IPv4 주소 범위가 10.1.2.0/24인
lb-subnet-us.
- 서브넷: 기본 IPv4 주소 범위가 10.1.2.0/24인
리전:
europe-west2- 서브넷: 기본 IPv4 주소 범위가 10.1.3.0/24인
lb-subnet-eu.
- 서브넷: 기본 IPv4 주소 범위가 10.1.3.0/24인
gcloud
VPC 네트워크를 만듭니다. 이 예시에서 VPC 네트워크 이름은
lb-network입니다.gcloud compute networks create lb-network --subnet-mode=custom
VPC 네트워크 (
lb-network) 내에서 두 리전에 서브넷을 만듭니다.us-west1리전의 백엔드에 대해lb-subnet-us이라는 서브넷을 만듭니다.IPv4 전용 서브넷을 만들려면 다음 명령어를 사용합니다.
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1이중 스택 서브넷을 만들려면 다음 명령어를 사용합니다.
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1IPv6 전용 서브넷을 만들려면 다음 명령어를 사용합니다.
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --region=us-west1europe-west2리전의 백엔드에 대해lb-subnet-eu이라는 서브넷을 만듭니다.IPv4 전용 서브넷을 만들려면 다음 명령어를 사용합니다.
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2이중 스택 서브넷을 만들려면 다음 명령어를 사용합니다.
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2IPv6 전용 서브넷을 만들려면 다음 명령어를 사용합니다.
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2
전역 외부 IP 주소 예약
각 가용성 그룹에서 하나씩 두 개의 전역 외부 IP 주소를 예약합니다. 설정 개요에 표시된 대로 두 개의 전역 외부 패스 스루 네트워크 부하 분산기는 동일한 IP 주소 쌍을 공유합니다.
전역 외부 패스스루 네트워크 부하 분산기의 경우 전달 규칙 IP 주소가 VPC 서브넷에서 완전히 분리됩니다. IP 주소는 Google 소유 전역 외부 IP 주소 풀 또는 서로 다른 가용성 그룹의 BYOIP 전역 외부 IPv4 공개 위임 프리픽스에 속하며 VPC 서브넷과 연결되지 않습니다.
IPv6 전달 규칙을 구성하면 전달 규칙 IP 주소가 /96 접두사로 할당됩니다.
gcloud
IPv4 트래픽:
가용성 그룹 0에서
lb-ipv4-ag0라는 첫 번째 전역 외부 IP 주소를 예약합니다.gcloud beta compute addresses create lb-ipv4-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV4가용성 그룹 1에서 두 번째 전역 외부 IP 주소
lb-ipv4-ag1를 예약합니다.gcloud beta compute addresses create lb-ipv4-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV4
IPv6 트래픽:
가용성 그룹 0에서
lb-ipv6-ag0라는 첫 번째 전역 외부 IP 주소를 예약합니다.gcloud beta compute addresses create lb-ipv6-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV6가용성 그룹 1에서 두 번째 전역 외부 IP 주소
lb-ipv6-ag1를 예약합니다.gcloud beta compute addresses create lb-ipv6-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV6
포트 80에서 TCP 트래픽에 대한 부하 분산기 구성
이 섹션의 단계에 따라 포트 80에서 TCP 트래픽을 캡처하는 전역 외부 패스 스루 네트워크 부하 분산기를 구성합니다.
TCP:80 트래픽만 허용하는 방화벽 규칙 만들기
프로덕션 환경을 안전하게 구성하려면 다음 두 개의 별도 방화벽 규칙을 만들어야 합니다.
다음으로부터 인그레스 트래픽을 허용하도록 구성된 상태 점검 방화벽 규칙
- Google의 상태 점검 IP 범위
- 상태 점검에 구성된 IP 프로토콜 및 포트
다음으로부터의 인그레스 트래픽을 허용하도록 구성된 사용자 트래픽 방화벽 규칙
- 부하 분산기에 액세스해야 하는 특정 클라이언트 소스 IP 범위
- 전달 규칙에 구성된 IP 프로토콜 및 포트
다음에 유의하세요.
애플리케이션이 제한 없이 모든 인터넷 사용자를 지원하는 경우 IPv4 트래픽에는
0.0.0.0/0, IPv6 트래픽에는::/0소스 IP 범위를 구성합니다.부하 분산 IP 프로토콜 및 포트를 프로브하도록 상태 점검을 구성한 경우 상태 점검 및 사용자 트래픽 방화벽 규칙을 병합하여 단일 방화벽 규칙을 구성할 수 있습니다.
gcloud
모든 소스 범위의 TCP 트래픽이 포트 80의 백엔드 VM 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다. 이 포트와 프로토콜은 부하 분산과 상태 점검 모두에 사용됩니다.
모든 IPv4 트래픽을 허용하려면 다음 명령어를 실행합니다.
gcloud compute firewall-rules create allow-traffic-tcp-80-ipv4 \ --network=lb-network \ --target-tags=allow-traffic-tcp-80 \ --allow=tcp:80 \ --source-ranges=0.0.0.0/0모든 IPv6 트래픽을 허용하려면 다음 명령어를 실행합니다.
gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \ --network=lb-network \ --target-tags=allow-traffic-tcp-80 \ --allow=tcp:80 \ --source-ranges=::/0
백엔드 VM 인스턴스 만들기
이 부하 분산 예시에서는 us-west1-a 및 europe-west2-a 영역에 관리형 인스턴스 그룹을 만듭니다. 관리형 인스턴스 그룹은 부하 분산기의 백엔드 서버를 호스팅하는 VM 인스턴스로 구성됩니다. 데모를 위해 백엔드는 포트 80에서 Apache 서버를 실행합니다.
클라이언트 요청에 응답하여 자체 호스트 이름을 제공합니다.
인스턴스 그룹은 백엔드 VM을 만드는 데 사용되는 인스턴스 템플릿을 참조합니다.
다음 표에는 부하 분산기 트래픽 유형, 백엔드 VM 네트워크 인터페이스, VPC 서브넷 스택 유형 간의 호환성이 요약되어 있습니다. 전역 외부 패스 스루 네트워크 부하 분산기 아키텍처 가이드에 설명된 백엔드 VM의 VPC 서브넷과의 네트워크 인터페이스 호환성 요구사항을 숙지해야 합니다.
| 부하 분산기 트래픽 유형 | 백엔드 VM 네트워크 인터페이스의 스택 유형 | VPC 서브넷의 스택 유형 |
|---|---|---|
| IPv4 트래픽만 | IPV4_ONLY |
IPV4_ONLY 또는 IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv6 트래픽만 | IPV6_ONLY |
IPV6_ONLY 또는 IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4 및 IPv6 트래픽 | IPV4_IPV6 |
IPV4_IPV6 |
인스턴스 템플릿 만들기
이 예에서는 us-west1 및 europe-west2 리전에 리전 인스턴스 템플릿을 만듭니다.
gcloud
us-west1리전에서 인스턴스 템플릿을 만듭니다.IPv4 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-tcp-80 \ --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 systemctl restart apache2'이중 스택 네트워크 인터페이스를 사용하여 백엔드 VM을 만들려면 다음 명령어를 사용하세요.
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-tcp-80 \ --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 systemctl restart apache2'IPv6 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-tcp-80 \ --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 systemctl restart apache2'europe-west2리전에서 인스턴스 템플릿을 만듭니다.IPv4 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-tcp-80 \ --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 systemctl restart apache2'이중 스택 네트워크 인터페이스를 사용하여 백엔드 VM을 만들려면 다음 명령어를 사용하세요.
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-tcp-80 \ --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 systemctl restart apache2'IPv6 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-tcp-80 \ --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 systemctl restart apache2'
영역 관리형 인스턴스 그룹 만들기
이 예시에서는 영역 관리형 인스턴스 그룹을 두 개 만듭니다. 하나는 us-west1-a 영역에, 다른 하나는 europe-west2-a 영역에 만듭니다.
gcloud
us-west1-a영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create ig-us-tcp-80 \ --template=ig-template-us-tcp-80 \ --size=2 \ --zone=us-west1-a
europe-west2-a영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create ig-eu-tcp-80 \ --template=ig-template-eu-tcp-80 \ --size=2 \ --zone=europe-west2-a
Cloud Load Balancing 구성요소 만들기
전역 외부 패스 스루 네트워크 부하 분산기의 Cloud Load Balancing 구성요소를 만들려면 다음 단계를 따르세요.
gcloud
TCP:80프로브를 생성하도록 구성된 TCP 상태 점검을 만듭니다.gcloud compute health-checks create tcp hc-tcp-80 \ --global \ --port=80
EXTERNAL_PASSTHROUGH부하 분산 스키마를 사용하여 전역 백엔드 서비스를 만듭니다.gcloud beta compute backend-services create lb-backend-service-tcp-80 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
백엔드 서비스에 인스턴스 그룹을 백엔드로 추가합니다.
us-west1-a영역의 인스턴스 그룹을 백엔드 서비스에 추가합니다.gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \ --instance-group=ig-us-tcp-80 \ --instance-group-zone=us-west1-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globaleurope-west2-a영역의 인스턴스 그룹을 백엔드 서비스에 추가합니다.gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \ --instance-group=ig-eu-tcp-80 \ --instance-group-zone=europe-west2-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalTCP:80트래픽을 처리하는 전역 전달 규칙을 만듭니다.전달 규칙의 IP 버전이 백엔드 VM 네트워크 인터페이스의 스택 유형과 일치하는지 확인합니다.
전달 규칙은 각 가용성 그룹의 IP 주소를 참조합니다.
IPv4 트래픽:
gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service-tcp-80 \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
IPv6 트래픽:
gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service-tcp-80 \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
TCP:8080 및 UDP 트래픽용 부하 분산기 구성
이 섹션의 단계에 따라 TCP:8080 및 UDP 트래픽을 처리하도록 전역 외부 패스 스루 네트워크 부하 분산기를 구성합니다.
TCP:8080 및 UDP 트래픽만 허용하는 방화벽 규칙 만들기
프로덕션 환경을 안전하게 구성하려면 다음 두 개의 별도 방화벽 규칙을 만들어야 합니다.
다음으로부터 인그레스 트래픽을 허용하도록 구성된 상태 점검 방화벽 규칙
- Google의 상태 점검 IP 범위
- 상태 점검에 구성된 IP 프로토콜 및 포트
다음으로부터의 인그레스 트래픽을 허용하도록 구성된 사용자 트래픽 방화벽 규칙
- 부하 분산기에 액세스해야 하는 특정 클라이언트 소스 IP 범위
- 전달 규칙에 구성된 IP 프로토콜 및 포트
다음에 유의하세요.
애플리케이션이 제한 없이 모든 인터넷 사용자를 지원하는 경우 IPv4 트래픽에는
0.0.0.0/0, IPv6 트래픽에는::/0소스 IP 범위를 구성합니다.부하 분산 IP 프로토콜 및 포트를 프로브하도록 상태 점검을 구성한 경우 상태 점검 및 사용자 트래픽 방화벽 규칙을 병합하여 단일 방화벽 규칙을 구성할 수 있습니다.
gcloud
모든 소스 범위의 TCP:8080 및 UDP 트래픽이 백엔드 VM 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.
이러한 프로토콜은 부하 분산에 사용되며 TCP 포트 8080은 상태 점검에도 사용됩니다.
IPv4 트래픽이
ig-us-l3-default및ig-eu-l3-default인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \ --network=lb-network \ --target-tags=allow-traffic-l3-default \ --allow=tcp:8080,udp \ --source-ranges=0.0.0.0/0IPv6 트래픽이
ig-us-l3-default및ig-eu-l3-default인스턴스 그룹의 백엔드에 도달하도록 허용하려면 다음 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create allow-traffic-l3-default-ipv6 \ --network=lb-network \ --target-tags=allow-traffic-l3-default \ --allow=tcp:8080,udp \ --source-ranges=::/0
백엔드 VM 인스턴스 만들기
이 부하 분산 예시에서는 us-west1-a 및 europe-west2-a 영역에 관리형 인스턴스 그룹을 만듭니다. 관리형 인스턴스 그룹은 부하 분산기의 백엔드 서버를 호스팅하는 VM 인스턴스로 구성됩니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다. 또한 시작 스크립트는 Apache 서버가 포트 80 대신 포트 8080에서 리슨하도록 구성합니다.
인스턴스 그룹은 백엔드 VM을 만드는 데 사용되는 인스턴스 템플릿을 참조합니다.
다음 표에는 부하 분산기 트래픽 유형, 백엔드 VM 네트워크 인터페이스, VPC 서브넷 스택 유형 간의 호환성이 요약되어 있습니다. 전역 외부 패스 스루 네트워크 부하 분산기 아키텍처 가이드에 설명된 백엔드 VM의 VPC 서브넷과의 네트워크 인터페이스 호환성 요구사항을 숙지해야 합니다.
| 부하 분산기 트래픽 유형 | 백엔드 VM 네트워크 인터페이스의 스택 유형 | VPC 서브넷의 스택 유형 |
|---|---|---|
| IPv4 트래픽만 | IPV4_ONLY |
IPV4_ONLY 또는 IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv6 트래픽만 | IPV6_ONLY |
IPV6_ONLY 또는 IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4 및 IPv6 트래픽 | IPV4_IPV6 |
IPV4_IPV6 |
인스턴스 템플릿 만들기
이 예에서는 us-west1 및 europe-west2 리전에 리전 인스턴스 템플릿을 만듭니다.
gcloud
us-west1리전에서 인스턴스 템플릿을 만듭니다.IPv4 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-l3-default \ --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'이중 스택 네트워크 인터페이스를 사용하여 백엔드 VM을 만들려면 다음 명령어를 사용하세요.
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-l3-default \ --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'IPv6 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-l3-default \ --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'europe-west2리전에서 인스턴스 템플릿을 만듭니다.IPv4 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-l3-default \ --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'이중 스택 네트워크 인터페이스를 사용하여 백엔드 VM을 만들려면 다음 명령어를 사용하세요.
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-l3-default \ --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'IPv6 전용 네트워크 인터페이스로 백엔드 VM을 만들려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-l3-default \ --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'
영역 관리형 인스턴스 그룹 만들기
이 예시에서는 영역 관리형 인스턴스 그룹을 두 개 만듭니다. 하나는 us-west1-a 영역에, 다른 하나는 europe-west2-a 영역에 만듭니다.
gcloud
us-west1-a영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create ig-us-l3-default \ --template=ig-template-us-l3-default \ --size=2 \ --zone=us-west1-a
europe-west2-a영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create ig-eu-l3-default \ --template=ig-template-eu-l3-default \ --size=2 \ --zone=europe-west2-a
Cloud Load Balancing 구성요소 만들기
전역 외부 패스 스루 네트워크 부하 분산기의 Cloud Load Balancing 구성요소를 만들려면 다음 단계를 따르세요.
gcloud
TCP:8080프로브를 생성하도록 구성된 TCP 상태 점검을 만듭니다.gcloud compute health-checks create tcp hc-tcp-8080 \ --global \ --port=8080
EXTERNAL_PASSTHROUGH부하 분산 스키마를 사용하여 전역 백엔드 서비스를 만듭니다.gcloud beta compute backend-services create lb-backend-service-l3-default \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-8080 \ --global
백엔드 서비스에 인스턴스 그룹을 백엔드로 추가합니다.
us-west1-a영역의 인스턴스 그룹을 백엔드 서비스에 추가합니다.gcloud beta compute backend-services add-backend lb-backend-service-l3-default \ --instance-group=ig-us-l3-default \ --instance-group-zone=us-west1-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globaleurope-west2-a영역의 인스턴스 그룹을 백엔드 서비스에 추가합니다.gcloud beta compute backend-services add-backend lb-backend-service-l3-default \ --instance-group=ig-eu-l3-default \ --instance-group-zone=europe-west2-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalip-protocol필드가L3_DEFAULT로 설정된 전역 전달 규칙을 만들어 모든 IP 프로토콜 트래픽 (포트 80 이외의 TCP 트래픽, UDP, ESP, ICMP)을 처리합니다. IPv4 및 IPv6 트래픽을 모두 처리하려면 전달 규칙을 두 개 만들어야 합니다.전달 규칙의 IP 버전이 백엔드 VM 네트워크 인터페이스의 스택 유형과 일치하는지 확인합니다.
전달 규칙은 각 가용성 그룹의 IP 주소를 참조합니다.
IPv4 트래픽:
gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=L3_DEFAULT \ --ports=all \ --backend-service=lb-backend-service-l3-default \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
IPv6 트래픽:
gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=L3_DEFAULT \ --ports=all \ --backend-service=lb-backend-service-l3-default \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
부하 분산기 테스트
부하 분산 서비스를 구성했으므로 이제 부하 분산기의 외부 IP 주소로 트래픽을 전송할 수 있으며 트래픽이 백엔드 인스턴스로 분산되는 것을 볼 수 있습니다.
부하 분산기의 외부 IP 주소 가져오기
전달 규칙에 연결된 예약된 IP 주소를 가져옵니다. 두 부하 분산기의 전달 규칙은 동일한 IP 주소 쌍을 사용하므로
lb-forwarding-rule-tcp-80-ipv4또는lb-forwarding-rule-l3-default-ipv4를 사용하여 외부 IP 주소를 볼 수 있습니다.gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \ --global이렇게 하면 각 가용성 그룹에 대해 하나씩 두 개의 IP 주소가 반환됩니다. 다음 단계에서 이러한 IP 주소를
IP_ADDRESS_AVAILABILITY_GROUP_0및IP_ADDRESS_AVAILABILITY_GROUP_1로 참조합니다.
부하 분산기로 트래픽 전송
이 절차는 외부 트래픽을 부하 분산기로 전송합니다. 다음 테스트를 실행하여 포트 80의 TCP 트래픽이 ig-us-tcp-80 또는 ig-eu-tcp-80 인스턴스 그룹에 의해 부하 분산되고 다른 모든 트래픽(TCP:8080 및 UDP)이 ig-us-l3-default 또는 ig-eu-l3-default 인스턴스 그룹에 의해 부하 분산되고 있는지 확인합니다.
포트 80에서 TCP 요청을 사용하여 동작 확인
포트 80에서 TCP를 통해
curl을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다.IPv4 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.
while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0; done
curl명령어에서 반환된 텍스트를 확인합니다. 텍스트에는 응답을 생성하는 백엔드 VM의 이름이 표시됩니다(예:Page served from: VM_NAME).ig-us-tcp-80또는ig-eu-tcp-80인스턴스 그룹의 인스턴스에서만 응답이 발생합니다.포트 80에서 부하 분산기의 IP 주소로 전송된 TCP 트래픽이
TCP전달 규칙에 의해 처리됨을 보여줍니다.
포트 8080에서 TCP 요청을 사용하여 동작 확인
포트 8080에서 TCP를 통해 curl을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다.
IPv4 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.
while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
curl명령어에서 반환된 텍스트를 확인합니다.ig-us-l3-default또는ig-eu-l3-default인스턴스 그룹의 인스턴스에서만 응답이 발생합니다.포트 8080에서 부하 분산기의 IP 주소로 전송된 TCP 트래픽이
L3_DEFAULT전달 규칙에 의해 처리됨을 보여줍니다.
부하 분산기의 IP 주소에 대한 로컬 라우팅 테이블 확인
백엔드 VM의 로컬 라우팅 테이블에는 전역 외부 패스 스루 네트워크 부하 분산기의 IP 주소가 포함됩니다.
백엔드 VM의 로컬 경로를 확인하려면 SSH를 사용하여 백엔드 VM에 연결하고 다음 명령어를 실행합니다.
ip route list table local
출력은 다음과 같습니다.
local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 local 136.124.69.214 dev ens4 proto 66 scope host local 136.124.83.205 dev ens4 proto 66 scope host
앞의 예시에서 136.124.69.214 및 136.124.83.205는 부하 분산기의 전달 규칙에 할당된 IP 주소입니다. VM의 로컬 라우팅 테이블에 있는 local 136.124.69.214 dev ens4 proto 66 scope host 및 local 136.124.83.205
dev ens4 proto 66 scope host 줄 항목을 통해 부하 분산기의 IP 주소로 지정된 패킷이 백엔드에서 허용될 수 있습니다. Google Cloud 게스트 환경은 이 항목 추가를 담당합니다.
백엔드 VM의 로컬 라우팅 테이블 항목은 로컬 호스트 전달을 위해 패킷을 수락하며, 여기서 네트워크 스택은 수신 대기 애플리케이션에 패킷을 전달합니다. 그런 다음 애플리케이션의 응답 패킷이 클라이언트로 직접 전송됩니다.
부하 분산기의 IP 주소는 VM의 네트워크 인터페이스에 실제로 구성되지 않습니다. 이를 확인하려면 다음 명령어를 실행합니다.
ip addr list
출력은 다음과 같습니다. IP 주소 (136.124.69.214 및 136.124.83.205)가 로컬 라우팅 테이블에 표시되지만 네트워크 인터페이스에 구성되지 않습니다.
1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens4: mtu 1460 qdisc fq_codel state UP group default qlen 1000 link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff altname enp0s4 inet 10.1.2.13/32 metric 100 scope global dynamic ens4 valid_lft 84283sec preferred_lft 84283sec inet6 fe80::4001:aff:fe01:20d/64 scope link valid_lft forever preferred_lft forever