이 가이드에서는 리전 백엔드 서비스를 사용하여 각 가상 머신(VM) 인스턴스에서 가중치가 적용된 외부 패스 스루 네트워크 부하 분산기 배포를 만드는 방법을 안내합니다.
이 튜토리얼에서는 VM 인스턴스가 3개 있는 인스턴스 그룹을 만들고 각 인스턴스에 가중치를 할당합니다. 백엔드 상태 가중치를 보고하는 HTTP 상태 점검을 만듭니다. 가중치가 적용된 부하 분산은 지역 부하 분산기 정책이 WEIGHTED_MAGLEV
인 백엔드 서비스에서 사용 설정됩니다.
시작하기 전에
- 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기 개요를 읽습니다.
Google Cloud CLI 설치 이 도구에 대한 전체 개요는 gcloud CLI 개요를 참조하세요. API 및 gcloud CLI 참조에서 부하 분산과 관련된 명령어를 확인할 수 있습니다.
이전에 Google Cloud CLI를 실행한 적이 없다면 먼저
gcloud init
를 실행하여 인증하세요.Compute API를 사용 설정합니다.
gcloud services enable compute.googleapis.com
VPC 네트워크, 서브넷, 방화벽 규칙 만들기
부하 분산기의 백엔드 VM에 대한 연결을 허용하는 VPC 네트워크, 서브넷, 인그레스 허용 방화벽 규칙을 만듭니다.
VPC 네트워크 및 서브넷을 만듭니다.
a. VPC 네트워크를 만들기 위해
gcloud compute networks create
명령어를 실행합니다.gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. 이 예시에서 서브넷의 기본 IPv4 주소 범위는
10.10.0.0/24
입니다. 서브넷을 만들려면gcloud compute networks subnets create
명령어를 실행합니다.gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
다음을 바꿉니다.
NETWORK_NAME
: 만들려는 VPC 네트워크의 이름SUBNET_NAME
: 만들려는 서브네트워크의 이름
대상 TCP 포트 80 및 443으로 전송된 패킷을 백엔드 VM으로 전달할 수 있는 인그레스 허용 방화벽 규칙을 만듭니다. 이 예시에서 방화벽 규칙은 모든 소스 IP 주소의 연결을 허용합니다. 방화벽 규칙은
network-lb-tag
네트워크 태그가 있는 VM에 적용됩니다.방화벽 규칙을 만들려면
gcloud compute firewall-rules create
명령어를 실행합니다.gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
FIREWALL_RULE_NAME
을 만들려는 방화벽 규칙의 이름으로 바꿉니다.
VM 인스턴스 만들기 및 가중치 할당
VM 인스턴스를 3개 만들고 가중치를 할당합니다.
HTTP 응답으로
X-Load-Balancing-Endpoint-Weight
헤더에 가중치를 반환하도록 백엔드 VM 인스턴스 3개를 구성합니다. 이 튜토리얼에서는 첫 번째 백엔드 인스턴스는 가중치 0을 보고하도록, 두 번째 백엔드 인스턴스는 가중치 100을 보고하도록, 세 번째 백엔드 인스턴스는 가중치 900을 보고하도록 구성합니다.인스턴스를 만들려면
gcloud compute instances create
명령어를 실행합니다.gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
인스턴스 그룹 만들기
이 튜토리얼에서는 3개의 VM 인스턴스(instance-0
, instance-100
, instance-900
)가 모두 포함된 비관리형 인스턴스 그룹을 만드는 방법을 설명합니다.
인스턴스 그룹을 만들려면
gcloud compute instance-groups unmanaged create
명령어를 실행하세요.gcloud compute instance-groups unmanaged create INSTANCE_GROUP \ --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
INSTANCE_GROUP
을 만들려는 인스턴스 그룹의 이름으로 바꿉니다.
HTTP 상태 점검 만들기
이 튜토리얼에서는 백엔드 VM 가중치가 포함된 HTTP 응답을 읽기 위해 HTTP 상태 점검을 만드는 방법을 제공합니다.
HTTP 상태 점검을 만들려면
gcloud compute health-checks create
명령어를 실행합니다.gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
HTTP_HEALTH_CHECK_NAME
을 만들려는 HTTP 상태 점검의 이름으로 바꿉니다.
백엔드 서비스 만들기
다음 예시에서는 가중치가 적용된 부하 분산을 사용하도록 구성된 리전 외부 백엔드 서비스를 만드는 방법을 설명합니다.
HTTP 상태 점검으로 백엔드 서비스를 만들고 지역 부하 분산기 정책을
WEIGHTED_MAGLEV
로 설정합니다.백엔드 서비스를 만들려면
gcloud compute backend-services create
명령어를 실행합니다.gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
BACKEND_SERVICE_NAME
을 만들려는 백엔드 서비스의 이름으로 바꿉니다.
인스턴스 그룹을 백엔드 서비스에 추가합니다.
인스턴스 그룹을 추가하려면
gcloud compute backend-services add-backend
명령어를 실행합니다.gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
부하 분산기의 리전 외부 IP 주소를 예약합니다.
하나 이상의 IP 주소를 예약하려면
gcloud compute addresses create
명령어를 실행합니다.gcloud compute addresses create ADDRESS_NAME \ --region us-central1
ADDRESS_NAME
을 만들려는 IP 주소의 이름으로 바꿉니다.결과를 보려면
compute addresses describe
명령어를 사용합니다. 예약된 고정 외부 IP 주소(IP_ADDRESS
)를 확인합니다.gcloud compute addresses describe ADDRESS_NAME
예약된 리전 외부 IP 주소
IP_ADDRESS
를 사용하여 전달 규칙을 만듭니다. 백엔드 서비스에 전달 규칙을 연결합니다.전달 규칙을 만들려면
gcloud compute forwarding-rules create
명령어를 실행합니다.gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
다음을 바꿉니다.
FORWARDING_RULE
: 만들려는 전달 규칙의 이름IP_ADDRESS
: 인스턴스에 할당할 IP 주소. 주소 이름이 아닌 예약된 고정 외부 IP 주소를 사용합니다.
백엔드 서비스 API를 사용하여 백엔드 가중치 확인
백엔드 가중치가 HTTP 상태 점검에 올바르게 보고되는지 확인합니다.
백엔드 서비스에서 백엔드 가중치를 (상태와 함께) 가져오려면
gcloud compute backend-services get-health
명령어를 실행합니다.gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region=us-central1
출력은 다음과 같습니다.
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth