이 페이지에는 기본 애플리케이션 부하 분산기에 대한 두 가지 예시가 포함되어 있습니다.
전역 외부 애플리케이션 부하 분산기 및 리전별 외부 애플리케이션 부하 분산기의 트래픽 관리를 구성하려면 다음 페이지를 참조하세요.
시작하기 전에
- 외부 애플리케이션 부하 분산기의 트래픽 관리 개요 읽기
- URL 맵 API 숙지하기
쿼리 매개변수 기반 라우팅 설정
이 예시는 쿼리 매개변수를 사용하여 쿼리 문자열을 일치시켜 A/B 테스트를 수행하는 방법을 보여줍니다.
백엔드 인스턴스 그룹 두 개 추가
라우팅이 유용하려면 여러 백엔드가 있어야 합니다.
두 개의 백엔드를 설정하려면 VM이 두 인스턴스 그룹에 있어야 합니다. 이 가이드에서는 Apache가 실행 중인 Linux VM을 사용하여 관리형 인스턴스 그룹을 만들고 부하 분산을 설정하는 방법을 설명합니다.
관리형 인스턴스 그룹은 외부 HTTP 부하 분산기의 백엔드 서버를 실행하는 VM을 제공합니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다.
편의상 백엔드는 동일한 리전에 있습니다. 멀티 리전 설정을 원하는 경우 두 번째 리전의 인스턴스 템플릿을 설정해야 합니다.
콘솔
인스턴스 템플릿을 만듭니다. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.
- 인스턴스 템플릿 만들기를 클릭합니다.
- 이름에
lb-backend-template
를 입력합니다. - 부팅 디스크가 Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는
apt-get
처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. - 고급 옵션을 클릭합니다.
- 네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그에
allow-health-check
를 입력합니다.
- 네트워크 태그에
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
#! /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
만들기를 클릭합니다.
관리형 인스턴스 그룹을 만듭니다. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
- 인스턴스 그룹 만들기를 클릭합니다.
- 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
- 이름에
first-example-ig
를 입력합니다. - 위치에서 단일 영역을 선택합니다.
- 리전에서 원하는 리전을 선택합니다. 이 예시에서는
us-east1
을 사용합니다. - 영역에서
us-east1-b
를 선택합니다. - 인스턴스 템플릿에서 인스턴스 템플릿
lb-backend-template
을 선택합니다. - 최대 인스턴스 수에
2
를 입력합니다. - 자동 확장 모드에서
Off:do not autoscale
을 선택합니다. - 만들기를 클릭합니다.
이것과 같은 다른 관리형 인스턴스 그룹을 만듭니다. 두 번째 이름을 second-example-ig
로 지정하고 lb-backend-template
템플릿을 기반으로 합니다.
gcloud
인스턴스 템플릿을 만듭니다.
gcloud compute instance-templates create `lb-backend-template` \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --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'
템플릿을 기반으로 첫 번째 관리형 인스턴스 그룹을 만듭니다.
gcloud compute instance-groups managed create first-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-b
템플릿을 기반으로 두 번째 관리형 인스턴스 그룹을 만듭니다.
gcloud compute instance-groups managed create second-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-c
방화벽 규칙 구성
이 예시에서는 fw-allow-health-check
방화벽 규칙을 만듭니다.
Google Cloud 상태 점검 시스템(130.211.0.0/22
및 35.191.0.0/16
)의 트래픽을 허용하는 인그레스 규칙입니다. 이 예시에서는 대상 태그 allow-health-check
를 사용하여 VM을 식별합니다.
콘솔
- Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 정책으로 이동 - 방화벽 규칙 만들기를 클릭하여 두 번째 방화벽 규칙을 만듭니다.
fw-allow-health-check
의 이름을 입력합니다.- 네트워크에서
Default
를 선택합니다. - 대상에서 지정된 대상 태그를 선택합니다.
allow-health-check
로 대상 태그 필드를 채웁니다.- 소스 필터를 IPv4 범위로 설정합니다.
- 소스 IPv4 범위를
130.211.0.0/22
및35.191.0.0/16
으로 설정합니다. - 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택하고 포트 번호로
80
을 입력합니다. - 만들기를 클릭합니다.
gcloud
gcloud compute firewall-rules create fw-allow-health-check \ --network=default \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp
외부 IP 주소 예약
인스턴스가 준비되어 실행 중이므로 고객이 부하 분산기에 연결하는 데 사용하는 전역 고정 외부 IP 주소를 설정합니다.
콘솔
- Google Cloud 콘솔의 외부 IP 주소 페이지로 이동합니다.
외부 IP 주소 페이지로 이동 - 고정 주소 예약을 클릭하여 IPv4 주소를 예약합니다.
lb-ipv4-1
의 이름을 할당합니다.- 네트워크 등급을 표준으로 설정합니다.
- IP 버전을 IPv4로 설정합니다.
- 유형을 전역으로 설정합니다.
- 예약을 클릭합니다.
- 유형이 전역으로 설정되어 있는지 확인합니다.
- 예약을 클릭합니다.
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
예약된 IPv4 주소를 확인합니다.
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
부하 분산기 백엔드 설정
콘솔
Google Cloud 콘솔은 현재 헤더 기반 및 매개변수 기반 라우팅 설정을 지원하지 않습니다. 대신 gcloud
또는 API를 사용하세요.
gcloud
- 상태 확인을 만듭니다.
gcloud compute health-checks create http http-basic-check \ --port 80
- 첫 번째 백엔드 서비스를 만듭니다.
-
전역 외부 애플리케이션 부하 분산기의 경우 gcloud CLI 명령어를
load-balancing-scheme=EXTERNAL_MANAGED
와 함께 사용합니다. 이 설정은 고급 트래픽 관리 기능을 제공합니다. - 기본 애플리케이션 부하 분산기의 경우
load-balancing-scheme=EXTERNAL
을 사용합니다.
gcloud compute backend-services create service-a \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
-
전역 외부 애플리케이션 부하 분산기의 경우 gcloud CLI 명령어를
- 두 번째 백엔드 서비스를 만듭니다.
gcloud compute backend-services create service-b \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
- 첫 번째 인스턴스 그룹을 첫 번째 백엔드 서비스에 백엔드로 추가합니다.
gcloud compute backend-services add-backend service-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=first-example-ig \ --instance-group-zone=us-east1-b \ --global
- 두 번째 인스턴스 그룹을 두 번째 백엔드 서비스에 백엔드로 추가합니다.
gcloud compute backend-services add-backend service-b \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=second-example-ig \ --instance-group-zone=us-east1-c \ --global
URL 맵 만들기
콘솔
Google Cloud 콘솔은 현재 헤더 기반 및 매개변수 기반 라우팅 설정을 지원하지 않습니다. 대신 gcloud
또는 API를 사용하세요.
gcloud
YAML 파일
/tmp/web-map-http.yaml
을 만듭니다.PROJECT_ID
를 프로젝트 ID로 바꿉니다.defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a hostRules: - hosts: - '*' pathMatcher: path-matcher-1 name: web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http tests: - description: Test routing for query ABTest with A host: example.com path: /?ABTest=A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a expectedOutputUrl: http://example.com/?ABTest=A - description: Test routing for query ABTest with B host: example.com path: /?ABTest=B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b expectedOutputUrl: http://example.com/?ABTest=B
URL 맵의 유효성을 검사합니다.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
테스트를 통과하고 명령어가 성공 메시지를 출력하는 경우 변경사항을 URL 맵에 저장합니다.
URL 맵을 업데이트합니다.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
대상 프록시 및 전달 규칙 만들기
콘솔
Google Cloud 콘솔은 현재 헤더 기반 및 매개변수 기반 라우팅 설정을 지원하지 않습니다. 대신 gcloud
또는 API를 사용하세요.
gcloud
- 대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅합니다.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map-http
- 들어오는 요청을 프록시로 라우팅하는 전역 전달 규칙을 만듭니다.
-
전역 외부 애플리케이션 부하 분산기의 경우 gcloud CLI 명령어를
load-balancing-scheme=EXTERNAL_MANAGED
와 함께 사용합니다. 이 설정은 고급 트래픽 관리 기능을 제공합니다. - 기본 애플리케이션 부하 분산기의 경우
load-balancing-scheme=EXTERNAL
을 사용합니다.
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
-
전역 외부 애플리케이션 부하 분산기의 경우 gcloud CLI 명령어를
테스트
예약된 IPv4 주소를 확인합니다.
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
다음을 실행하여 이 설정을 테스트합니다.
curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B
브라우저에서 http://IP_ADDRESS?ABTest=A
및 http://IP_ADDRESS?ABTest=B
를 엽니다.
HTTP 헤더 기반 라우팅 설정
이 예시에서는 지능형 라우팅을 수행하기 위해 HTTP 헤더를 추가 및 삭제하는 방법을 보여줍니다.
시작하기 전에
기존의 외부 애플리케이션 부하 분산기를 사용하거나 새로 만들 수 있습니다.
이 기능은 모든 지원되는 백엔드 유형에 사용할 수 있습니다. 이 예시에서는 인스턴스 그룹에서 VM을 사용한다고 가정합니다.
간단한 부하 분산기를 설정하려면 위의 쿼리 매개변수 기반 예시를 참조하세요.
URL 맵 업데이트
콘솔
Google Cloud 콘솔은 현재 헤더 기반 및 매개변수 기반 라우팅 설정을 지원하지 않습니다. 대신 gcloud
또는 API를 사용하세요.
gcloud
이 예시는 HTTP 요청 헤더를 사용하여 요청의 HTTP 헤더 값을 일치시켜 A/B 테스트를 수행하는 방법을 보여줍니다.
YAML 파일
/tmp/web-map-http.yaml
을 만듭니다.PROJECT_ID
를 프로젝트 ID로 바꿉니다.defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a kind: compute#urlMap name: web-map-http hostRules: - hosts: - '*' pathMatcher: path-matcher-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b tests: - description: Test routing for query ABTest with A host: example.com path: / headers: - name: ABTest value: A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - description: Test routing for query ABTest with B host: example.com path: / headers: - name: ABTest value: B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
URL 맵의 유효성을 검사합니다.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
테스트를 통과하고 명령어가 성공 메시지를 출력하는 경우 변경사항을 URL 맵에 저장합니다.
URL 맵을 업데이트합니다.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
테스트
연결된 부하 분산기의 IPv4 주소로 다음을 실행하여 이 설정을 테스트합니다.
curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"