이 문서에서는 Compute Engine 가상 머신(VM) 인스턴스에서 실행되는 서비스의 리전 간 내부 애플리케이션 부하 분산기를 구성하는 방법을 설명합니다.
시작하기 전에
이 가이드를 진행하기 전에 다음 사항을 숙지하세요.
- 제한사항 섹션을 포함하는 내부 애플리케이션 부하 분산기 개요
- VPC 방화벽 규칙 개요
SSL 인증서 리소스 설정
다음 설명대로 인증서 관리자 SSL 인증서 리소스를 만듭니다.
- 전역 자체 관리형 인증서를 배포합니다.
- Certificate Authority Service 인스턴스에서 발급한 Google 관리 인증서를 만듭니다.
- DNS 승인을 사용하여 Google 관리 인증서를 만듭니다.
Google 관리형 인증서를 사용하는 것이 좋습니다.
권한
이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.
작업 | 필요한 역할 |
---|---|
네트워크, 서브넷, 부하 분산기 구성요소 만들기 | Compute 네트워크 관리자 |
방화벽 규칙 추가 및 삭제 | Compute 보안 관리자 |
인스턴스 만들기 | Compute 인스턴스 관리자 |
자세한 내용은 다음 가이드를 참조하세요.
설정 개요
다음 다이어그램과 같이 부하 분산기를 구성할 수 있습니다.
다이어그램에서 볼 수 있듯이 이 예시에서는 REGION_A
및 REGION_B
리전에 하나의 백엔드 서비스와 2개의 백엔드 관리형 인스턴스 그룹이 있는 VPC 네트워크에서 리전 간 내부 애플리케이션 부하 분산기를 만듭니다.
다이어그램에 표시된 항목은 다음과 같습니다.
다음 서브넷을 사용하는 VPC 네트워크:
- 서브넷
SUBNET_A
및REGION_A
의 프록시 전용 서브넷 - 서브넷
SUBNET_B
및REGION_B
의 프록시 전용 서브넷
리전 간 내부 애플리케이션 부하 분산기를 사용하는 VPC 네트워크의 각 리전에 프록시 전용 서브넷을 만들어야 합니다. 해당 리전의 프록시 전용 서브넷은 해당 리전의 모든 리전 간 내부 애플리케이션 부하 분산기 간에 공유됩니다. 부하 분산기에서 서비스의 백엔드로 보낸 패킷의 소스 주소는 프록시 전용 서브넷에서 할당됩니다. 이 예시에서
REGION_A
리전의 프록시 전용 서브넷의 기본 IP 주소 범위는10.129.0.0/23
이고REGION_B
의 기본 IP 주소 범위는 권장 서브넷 크기인10.130.0.0/23
입니다.- 서브넷
고가용성 설정에는
REGION_A
및REGION_B
리전에 Compute Engine VM 배포를 위한 관리형 인스턴스 그룹 백엔드가 있습니다. 한 리전의 백엔드가 다운되면 트래픽이 다른 리전으로 장애 조치됩니다.백엔드의 사용 및 상태를 모니터링하는 백엔드 서비스입니다.
URL 맵은 요청의 URL을 파싱하고 요청 URL의 호스트와 경로에 따라 특정 백엔드 서비스로 요청을 전달합니다.
사용자로부터 요청을 수신하여 URL 맵에 전달하는 전역 대상 HTTP 또는 HTTPS 프록시입니다. HTTPS의 경우 전역 SSL 인증서 리소스를 구성합니다. HTTPS 부하 분산을 구성할 경우 대상 프록시는 SSL 인증서를 사용하여 SSL 트래픽을 복호화합니다. 대상 프록시는 HTTP나 HTTPS를 사용하여 트래픽을 인스턴스에 전달할 수 있습니다.
각 수신 요청을 대상 프록시로 전달하기 위한 부하 분산기의 리전 내부 IP 주소가 있는 전역 전달 규칙입니다.
전달 규칙에 연결된 내부 IP 주소는 백엔드와 동일한 네트워크 및 리전의 모든 서브넷에서 가져올 수 있습니다. 다음 조건을 참고하세요.
- IP 주소는 백엔드 인스턴스 그룹과 동일한 서브넷에서 가져올 수 있지만 반드시 그럴 필요는 없습니다.
--purpose
플래그가GLOBAL_MANAGED_PROXY
로 설정된 예약된 프록시 전용 서브넷에서 IP 주소를 가져오면 안 됩니다.- 여러 전달 규칙에서 같은 내부 IP 주소를 사용하려면 IP 주소
--purpose
플래그를SHARED_LOADBALANCER_VIP
로 설정합니다.
선택사항:
GEO
유형의 DNS 라우팅 정책을 구성하여 클라이언트 트래픽을 클라이언트와 가장 가까운 리전의 부하 분산기 VIP로 라우팅합니다.
네트워크 및 서브넷 구성
VPC 네트워크 내에서 백엔드가 구성되는 각 리전에서 서브넷을 구성합니다. 또한 부하 분산기를 구성하려는 각 리전에 proxy-only-subnet
을 구성합니다.
이 예시에서는 다음 VPC 네트워크, 리전 및 서브넷을 사용합니다.
네트워크. 네트워크는 커스텀 모드 VPC 네트워크이며 이름은
NETWORK
입니다.백엔드용 서브넷.
REGION_A
리전에 있는SUBNET_A
라는 이름의 서브넷은 기본 IP 범위로10.1.2.0/24
를 사용합니다.REGION_B
리전에 있는SUBNET_B
라는 이름의 서브넷은 기본 IP 범위로10.1.3.0/24
를 사용합니다.
프록시용 서브넷.
REGION_A
리전에 있는PROXY_SN_A
라는 이름의 서브넷은 기본 IP 범위로10.129.0.0/23
을 사용합니다.REGION_B
리전에 있는PROXY_SN_B
라는 이름의 서브넷은 기본 IP 범위로10.130.0.0/23
을 사용합니다.
리전 간 내부 애플리케이션 부하 분산기는 VPC 내의 모든 영역에서 액세스할 수 있습니다. 따라서 모든 리전의 클라이언트가 부하 분산기 백엔드에 전역으로 액세스할 수 있습니다.
백엔드 서브넷 구성
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
네트워크의 이름을 입력합니다.
서브넷 섹션에서 서브넷 생성 모드를 커스텀으로 설정합니다.
부하 분산기의 백엔드에 대한 서브넷을 만듭니다. 새 서브넷 섹션에 다음 정보를 입력합니다.
- 서브넷 이름을 입력합니다.
- 리전으로 REGION_A를 선택합니다.
- IP 주소 범위로
10.1.2.0/24
를 입력합니다.
완료를 클릭합니다.
서브넷 추가를 클릭합니다.
부하 분산기의 백엔드에 대한 서브넷을 만듭니다. 새 서브넷 섹션에 다음 정보를 입력합니다.
- 서브넷 이름을 입력합니다.
- 리전으로 REGION_B를 선택합니다.
- IP 주소 범위로
10.1.3.0/24
를 입력합니다.
완료를 클릭합니다.
만들기를 클릭합니다.
gcloud
gcloud compute networks create
명령어를 사용하여 커스텀 VPC 네트워크를 만듭니다.gcloud compute networks create NETWORK \ --subnet-mode=custom
gcloud compute networks subnets create
명령어를 사용하여REGION_A
리전의NETWORK
네트워크에 서브넷을 만듭니다.gcloud compute networks subnets create SUBNET_A \ --network=NETWORK \ --range=10.1.2.0/24 \ --region=REGION_A
gcloud compute networks subnets create
명령어를 사용하여REGION_B
리전의NETWORK
네트워크에 서브넷을 만듭니다.gcloud compute networks subnets create SUBNET_B \ --network=NETWORK \ --range=10.1.3.0/24 \ --region=REGION_B
Terraform
VPC 네트워크를 만들려면 google_compute_network
리소스를 사용합니다.
lb-network-crs-reg
네트워크에 VPC 서브넷을 만들려면 google_compute_subnetwork
리소스를 사용합니다.
API
networks.insert
메서드에 대해 POST
요청을 실행합니다.
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "regional" }, "name": "NETWORK", "autoCreateSubnetworks": false }
subnetworks.insert
메서드에 대해 POST
요청을 실행합니다.
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks { "name": "SUBNET_A", "network": "projects/PROJECT_ID/global/networks/lb-network-crs-reg", "ipCidrRange": "10.1.2.0/24", "region": "projects/PROJECT_ID/regions/REGION_A", }
subnetworks.insert
메서드에 대해 POST
요청을 실행합니다.
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks { "name": "SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "ipCidrRange": "10.1.3.0/24", "region": "projects/PROJECT_ID/regions/REGION_B", }
프록시 전용 서브넷 구성
프록시 전용 서브넷은 Google Cloud에서 사용자를 대신하여 Envoy 프록시를 실행하는 데 사용하는 IP 주소 집합을 제공합니다. 프록시는 클라이언트의 연결을 종료하고 백엔드에 새 연결을 만듭니다.
이 프록시 전용 서브넷은 VPC 네트워크와 동일한 리전에 있는 모든 Envoy 기반 리전 부하 분산기에서 사용됩니다. 네트워크당 리전별 활성 프록시 전용 서브넷은 용도별로 하나만 있을 수 있습니다.
Console
Google Cloud 콘솔을 사용하는 경우에는 기다렸다가 나중에 부하 분산 페이지에서 프록시 전용 서브넷을 만들 수 있습니다.
지금 프록시 전용 서브넷을 만들려면 다음 단계를 사용합니다.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
- VPC 네트워크의 이름을 클릭합니다.
- 서브넷 탭에서 서브넷 추가를 클릭합니다.
- 프록시 전용 서브넷의 이름을 입력합니다.
- 리전으로 REGION_A를 선택합니다.
- 용도 목록에서 리전 간 관리형 프록시를 선택합니다.
- IP 주소 범위 필드에
10.129.0.0/23
을 입력합니다. - 추가를 클릭합니다.
REGION_B
에 프록시 전용 서브넷 만들기
- 서브넷 탭에서 서브넷 추가를 클릭합니다.
- 프록시 전용 서브넷의 이름을 입력합니다.
- 리전으로 REGION_B를 선택합니다.
- 용도 목록에서 리전 간 관리형 프록시를 선택합니다.
- IP 주소 범위 필드에
10.130.0.0/23
을 입력합니다. - 추가를 클릭합니다.
gcloud
gcloud compute networks subnets create
명령어로 프록시 전용 서브넷을 만드세요.
gcloud compute networks subnets create PROXY_SN_A \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION_A \ --network=NETWORK \ --range=10.129.0.0/23
gcloud compute networks subnets create PROXY_SN_B \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION_B \ --network=NETWORK \ --range=10.130.0.0/23
Terraform
lb-network-crs-reg
네트워크에 VPC 프록시 전용 서브넷을 만들려면 google_compute_subnetwork
리소스를 사용합니다.
API
subnetworks.insert
메서드로 프록시 전용 서브넷을 만드세요. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks { "name": " PROXY_SN_A", "ipCidrRange": "10.129.0.0/23", "network": "projects/PROJECT_ID/global/networks/NETWORK", "region": "projects/PROJECT_ID/regions/REGION_A", "purpose": "GLOBAL_MANAGED_PROXY", "role": "ACTIVE" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks { "name": "PROXY_SN_B", "ipCidrRange": "10.130.0.0/23", "network": "projects/PROJECT_ID/global/networks/NETWORK", "region": "projects/PROJECT_ID/regions/REGION_B", "purpose": "GLOBAL_MANAGED_PROXY", "role": "ACTIVE" }
방화벽 규칙 구성
이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.
fw-ilb-to-backends. 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로, TCP 포트
22
에서 임의의 주소로부터 수신되는 SSH 연결을 허용합니다. 이 규칙에 더 제한적인 소스 IP 주소 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작할 시스템의 IP 주소 범위만 지정할 수도 있습니다. 이 예시에서는 대상 태그allow-ssh
를 사용해서 방화벽 규칙이 적용되는 VM을 식별합니다.fw-healthcheck. 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 (
130.211.0.0/22
및35.191.0.0/16
에서) Google Cloud 상태 점검 시스템의 모든 TCP 트래픽을 허용합니다. 이 예시에서는load-balanced-backend
대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.fw-backends. 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 내부 애플리케이션 부하 분산기의 관리형 프록시로부터 포트
80
,443
,8080
으로의 TCP 트래픽을 허용합니다. 이 예시에서는 대상 태그load-balanced-backend
를 사용해서 방화벽 규칙이 적용되는 VM을 식별합니다.
이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.
대상 태그는 백엔드 인스턴스를 정의합니다. 대상 태그가 없으면 VPC 네트워크의 모든 백엔드 인스턴스에 방화벽 규칙이 적용됩니다. 백엔드 VM을 만들 때는 관리형 인스턴스 그룹 만들기에 나온 대로 지정된 대상 태그를 포함해야 합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭하여 수신 SSH 연결을 허용하는 규칙을 만듭니다.
- 이름:
fw-ilb-to-backends
- 네트워크: NETWORK
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-ssh
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
0.0.0.0/0
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
22
을 입력합니다.
- 이름:
만들기를 클릭합니다.
방화벽 규칙 만들기를 다시 한 번 클릭하여 Google Cloud 상태 점검을 허용하는 규칙을 만듭니다.
- 이름:
fw-healthcheck
- 네트워크: NETWORK
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
load-balanced-backend
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
130.211.0.0/22
및35.191.0.0/16
프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
80
을 입력합니다.
권장사항에 따라서 상태 확인에 사용되는 것과 일치하는 프로토콜 및 포트로 이러한 규칙을 제한합니다. 프로토콜 및 포트에
tcp:80
을 사용하면 Google Cloud가 포트80
에서 HTTP를 사용하여 VM에 연결할 수 있지만 포트443
에서 HTTPS를 사용하여 연결할 수는 없습니다.
- 이름:
만들기를 클릭합니다.
방화벽 규칙 만들기를 세 번째로 클릭하여 부하 분산기의 프록시 서버를 백엔드에 연결하도록 허용하는 규칙을 만듭니다.
- 이름:
fw-backends
- 네트워크: NETWORK
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
load-balanced-backend
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
10.129.0.0/23
및10.130.0.0/23
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 다음 포트 번호로
80, 443, 8080
을 입력합니다.
- 이름:
만들기를 클릭합니다.
gcloud
allow-ssh
네트워크 태그를 사용해 VM으로 가는 SSH 연결을 허용하는fw-ilb-to-backends
방화벽 규칙을 만듭니다.source-ranges
를 생략하면 Google Cloud는 모든 소스를 의미하는 것으로 규칙을 해석합니다.gcloud compute firewall-rules create fw-ilb-to-backends \ --network=NETWORK \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
fw-healthcheck
규칙을 만들어 Google Cloud 상태 점검을 허용합니다. 이 예시에서는 상태 점검 프로버의 모든 TCP 트래픽을 허용합니다. 그러나 필요에 따라 더 좁은 포트 집합을 구성할 수 있습니다.gcloud compute firewall-rules create fw-healthcheck \ --network=NETWORK \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=load-balanced-backend \ --rules=tcp
내부 애플리케이션 부하 분산기의 프록시를 백엔드에 연결하도록 허용하는
fw-backends
규칙을 만듭니다.source-ranges
를 프록시 전용 서브넷의 할당된 범위로 설정합니다(예시:10.129.0.0/23
및10.130.0.0/23
).gcloud compute firewall-rules create fw-backends \ --network=NETWORK \ --action=allow \ --direction=ingress \ --source-ranges=source-range \ --target-tags=load-balanced-backend \ --rules=tcp:80,tcp:443,tcp:8080
Terraform
방화벽 규칙을 만들려면 google_compute_firewall
리소스를 사용합니다.
API
firewalls.insert
메서드에 POST
요청을 수행하여 fw-ilb-to-backends
방화벽 규칙을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-ilb-to-backends", "network": "projects/PROJECT_ID/global/networks/NETWORK", "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS" }
firewalls.insert
메서드에 POST
요청을 수행하여 fw-healthcheck
방화벽 규칙을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-healthcheck", "network": "projects/PROJECT_ID/global/networks/NETWORK", "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp" } ], "direction": "INGRESS" }
firewalls.insert
메서드로 프록시 서브넷 내에서 TCP 트래픽을 허용하도록 fw-backends
방화벽 규칙을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-backends", "network": "projects/PROJECT_ID/global/networks/NETWORK", "sourceRanges": [ "10.129.0.0/23", "10.130.0.0/23" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] }, { "IPProtocol": "tcp", "ports": [ "443" ] }, { "IPProtocol": "tcp", "ports": [ "8080" ] } ], "direction": "INGRESS" }
관리형 인스턴스 그룹 만들기
이 섹션에서는 템플릿 및 관리형 인스턴스 그룹 생성 방법을 보여줍니다. 관리형 인스턴스 그룹은 리전 간 내부 애플리케이션 부하 분산기 예시의 백엔드 서버를 실행하는 VM 인스턴스를 제공합니다. 인스턴스 그룹에 HTTP 서비스를 정의하고 해당 포트에 포트 이름을 매핑할 수 있습니다. 부하 분산기의 백엔드 서비스가 트래픽을 이름이 지정된 포트로 전달합니다. 클라이언트에서 전송된 트래픽은 백엔드 서버로 부하 분산됩니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다.
콘솔
Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.
- 인스턴스 템플릿 만들기를 클릭합니다.
- 이름에
gil7-backendeast1-template
를 입력합니다. - 부팅 디스크가 Debian GNU/Linux 10(buster)과 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는
apt-get
처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. - 고급 옵션을 클릭합니다.
- 네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그에
allow-ssh
및load-balanced-backend
를 입력합니다. - 네트워크 인터페이스에 다음을 선택합니다.
- 네트워크: NETWORK
- 서브넷: SUBNET_B
- 네트워크 태그에
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl 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 systemctl restart apache2
만들기를 클릭합니다.
인스턴스 템플릿 만들기를 클릭합니다.
이름에
gil7-backendwest1-template
를 입력합니다.부팅 디스크가 Debian GNU/Linux 10(buster)과 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는
apt-get
처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다.고급 옵션을 클릭합니다.
네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그에
allow-ssh
및load-balanced-backend
를 입력합니다. - 네트워크 인터페이스에 다음을 선택합니다.
- 네트워크: NETWORK
- 서브넷: SUBNET_A
- 네트워크 태그에
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl 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 systemctl restart apache2
만들기를 클릭합니다.
Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
- 인스턴스 그룹 만들기를 클릭합니다.
- 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
- 이름에
gl7-ilb-mig-a
를 입력합니다. - 위치에서 단일 영역을 선택합니다.
- 리전에서 REGION_A을 선택합니다.
- 영역에서 ZONE_A를 선택합니다.
- 인스턴스 템플릿에서
gil7-backendwest1-template
을 선택합니다. 그룹에 만들 인스턴스의 수를 지정합니다.
이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.
- 자동 확장 모드에서
Off:do not autoscale
을 선택합니다. - 최대 인스턴스 수에
2
를 입력합니다.
원하는 경우 UI의 자동 확장 섹션에서 인스턴스 그룹을 구성하여 인스턴스 CPU 사용을 기준으로 인스턴스를 자동 추가 또는 삭제할 수 있습니다.
- 자동 확장 모드에서
만들기를 클릭합니다.
인스턴스 그룹 만들기를 클릭합니다.
새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
이름에
gl7-ilb-mig-b
를 입력합니다.위치에서 단일 영역을 선택합니다.
리전에서 REGION_B을 선택합니다.
영역에서 ZONE_B를 선택합니다.
인스턴스 템플릿에서
gil7-backendeast1-template
을 선택합니다.그룹에 만들 인스턴스의 수를 지정합니다.
이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.
- 자동 확장 모드에서
Off:do not autoscale
을 선택합니다. - 최대 인스턴스 수에
2
를 입력합니다.
원할 경우 UI의 자동 확장 섹션에서 인스턴스 그룹을 구성하여 인스턴스 CPU 사용량을 기준으로 인스턴스를 자동 추가 또는 삭제할 수 있습니다.
- 자동 확장 모드에서
만들기를 클릭합니다.
gcloud
이 가이드의 gcloud CLI 안내에서는 Cloud Shell 또는 bash가 설치된 다른 환경을 사용한다고 가정합니다.
gcloud compute instance-templates create
명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.gcloud compute instance-templates create gil7-backendwest1-template \ --region=REGION_A \ --network=NETWORK \ --subnet=SUBNET_A \ --tags=allow-ssh,load-balanced-backend \ --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://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
gcloud compute instance-templates create gil7-backendeast1-template \ --region=REGION_B \ --network=NETWORK \ --subnet=SUBNET_B \ --tags=allow-ssh,load-balanced-backend \ --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://169.254.169.254/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
명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create gl7-ilb-mig-a \ --zone=ZONE_A \ --size=2 \ --template=gil7-backendwest1-template
gcloud compute instance-groups managed create gl7-ilb-mig-b \ --zone=ZONE_B \ --size=2 \ --template=gil7-backendeast1-template
Terraform
인스턴스 템플릿을 만들려면 google_compute_instance_template
리소스를 사용합니다.
관리형 인스턴스 그룹을 만들려면 google_compute_instance_group_manager
리소스를 사용합니다.
API
instanceTemplates.insert
메서드로 인스턴스 템플릿을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"gil7-backendwest1-template", "properties":{ "machineType":"e2-standard-2", "tags":{ "items":[ "allow-ssh", "load-balanced-backend" ] }, "metadata":{ "kind":"compute#metadata", "items":[ { "key":"startup-script", "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\n vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\n echo \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/NETWORK", "subnetwork":"regions/REGION_A/subnetworks/SUBNET_A", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks":[ { "index":0, "boot":true, "initializeParams":{ "sourceImage":"projects/debian-cloud/global/images/family/debian-10" }, "autoDelete":true } ] } }
instanceGroupManagers.insert
메서드로 각 영역에 관리형 인스턴스 그룹을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "gl7-ilb-mig-a", "zone": "projects/PROJECT_ID/zones/ZONE_A", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/gil7-backendwest1-template", "baseInstanceName": "gl7-ilb-mig-b", "targetSize": 2 }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"gil7-backendeast1-template", "properties":{ "machineType":"e2-standard-2", "tags":{ "items":[ "allow-ssh", "load-balanced-backend" ] }, "metadata":{ "kind":"compute#metadata", "items":[ { "key":"startup-script", "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\n vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\n echo \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/NETWORK", "subnetwork":"regions/REGION_B/subnetworks/SUBNET_B", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks":[ { "index":0, "boot":true, "initializeParams":{ "sourceImage":"projects/debian-cloud/global/images/family/debian-10" }, "autoDelete":true } ] } }
instanceGroupManagers.insert
메서드로 각 영역에 관리형 인스턴스 그룹을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "gl7-ilb-mig-b", "zone": "projects/PROJECT_ID/zones/ZONE_B", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/gil7-backendwest1-template", "baseInstanceName": "gl7-ilb-mig-b", "targetSize": 2 }
부하 분산기 구성
이 예시에서는 다음 리전 간 내부 애플리케이션 부하 분산기 리소스를 만드는 방법을 보여줍니다.
- 전역 HTTP 상태 점검
- 관리형 인스턴스 그룹이 백엔드인 전역 백엔드 서비스
- URL 맵. 대상 HTTP(S) 프록시의 전역 URL 맵을 참조해야 합니다. 전역 URL 맵은 수신 URL의 호스트와 경로에 정의한 규칙에 따라 요청을 전역 백엔드 서비스로 라우팅합니다. 전역 URL 맵은 전역 대상 프록시 규칙에서 참조할 수 있습니다.
- 전역 SSL 인증서(HTTPS용)
- 전역 대상 프록시
리전 IP 주소가 있는 전역 전달 규칙 2개. 전달 규칙 IP 주소에
SUBNET_A
또는SUBNET_B
IP 주소 범위를 사용합니다. 프록시 전용 서브넷을 사용하려고 하면 전달 규칙 생성에 실패합니다.
콘솔
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에 내부를 선택하고 다음을 클릭합니다.
- 리전 간 또는 단일 리전 배포에서 리전 간 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
기본 구성
- 부하 분산기의 이름을 입력합니다.
- 네트워크에 NETWORK을 선택합니다.
2개의 전달 규칙으로 프런트엔드 구성
HTTP의 경우:
- 프런트엔드 구성을 클릭합니다.
- 전달 규칙의 이름을 제공합니다.
- 서브네트워크 리전 목록에서 REGION_A를 선택합니다.
프록시 전용 서브넷 예약
- 서브네트워크 목록에서 SUBNET_A를 선택합니다.
- IP 주소 목록에서 IP 주소 만들기를 클릭합니다. 고정 내부 IP 주소 예약 페이지가 열립니다.
- 고정 IP 주소의 이름을 입력합니다.
- 고정 IP 주소 목록에서 직접 선택을 선택합니다.
- 커스텀 IP 주소 필드에
10.1.2.99
를 입력합니다. - 예약을 선택합니다.
- 완료를 클릭합니다.
- 두 번째 전달 규칙을 추가하려면 프런트엔드 IP 및 포트 추가를 클릭합니다.
- 전달 규칙의 이름을 제공합니다.
- 서브네트워크 리전 목록에서 REGION_B를 선택합니다.
프록시 전용 서브넷 예약
- 서브네트워크 목록에서 SUBNET_B를 선택합니다.
- IP 주소 목록에서 IP 주소 만들기를 클릭합니다. 고정 내부 IP 주소 예약 페이지가 열립니다.
- 고정 IP 주소의 이름을 입력합니다.
- 고정 IP 주소 목록에서 직접 선택을 선택합니다.
- 커스텀 IP 주소 필드에
10.1.3.99
를 입력합니다. - 예약을 선택합니다.
- 완료를 클릭합니다.
HTTPS의 경우:
클라이언트와 부하 분산기 사이에 HTTPS를 사용하는 경우 프록시를 구성할 하나 이상의 SSL 인증서 리소스가 필요합니다.
all-regions
Google 관리 인증서를 만들려면 다음 문서를 참조하세요.
Google 관리 인증서를 만든 후 인증서를 대상 프록시에 직접 연결합니다. 인증서 맵은 리전 간 내부 애플리케이션 부하 분산기에서 지원되지 않습니다.
all-regions
자체 관리형 인증서를 만들려면 리전 자체 관리형 인증서 배포 문서를 참조하세요.
- 프런트엔드 구성을 클릭합니다.
- 전달 규칙의 이름을 제공합니다.
- 프로토콜 필드에서
HTTPS (includes HTTP/2)
를 선택합니다. - 포트가
443
으로 설정되었는지 확인합니다. - 서브네트워크 리전 목록에서 REGION_A를 선택합니다.
프록시 전용 서브넷 예약
- 서브네트워크 목록에서 SUBNET_A를 선택합니다.
- IP 주소 목록에서 IP 주소 만들기를 클릭합니다. 고정 내부 IP 주소 예약 페이지가 열립니다.
- 고정 IP 주소의 이름을 입력합니다.
- 고정 IP 주소 목록에서 직접 선택을 선택합니다.
- 커스텀 IP 주소 필드에
10.1.3.99
를 입력합니다. - 예약을 선택합니다.
- 인증서 추가 섹션에서 인증서를 선택합니다.
- 선택사항: 기본 SSL 인증서 외에 인증서를 추가하려면 다음 안내를 따르세요.
- 인증서 추가를 클릭합니다.
- 목록에서 인증서를 선택합니다.
- SSL 정책 목록에서 SSL 정책을 선택합니다. SSL 정책을 만들지 않았다면 기본 Google Cloud SSL 정책이 적용됩니다.
- 완료를 클릭합니다.
- 프런트엔드 구성의 이름을 입력합니다.
- 프로토콜 필드에서
HTTPS (includes HTTP/2)
를 선택합니다. - 포트가
443
으로 설정되었는지 확인합니다. - 서브네트워크 리전 목록에서 REGION_B를 선택합니다.
프록시 전용 서브넷 예약
- 서브네트워크 목록에서 SUBNET_B를 선택합니다.
- IP 주소 목록에서 IP 주소 만들기를 클릭합니다. 고정 내부 IP 주소 예약 페이지가 열립니다.
- 고정 IP 주소의 이름을 입력합니다.
- 고정 IP 주소 목록에서 직접 선택을 선택합니다.
- 커스텀 IP 주소 필드에
10.1.3.99
를 입력합니다. - 예약을 선택합니다.
- 인증서 추가 섹션에서 인증서를 선택합니다.
- 선택사항: 기본 SSL 인증서 외에 인증서를 추가하려면 다음 안내를 따르세요.
- 인증서 추가를 클릭합니다.
- 목록에서 인증서를 선택합니다.
- SSL 정책 목록에서 SSL 정책을 선택합니다. SSL 정책을 만들지 않았다면 기본 Google Cloud SSL 정책이 적용됩니다.
- 완료를 클릭합니다.
- 백엔드 구성을 클릭합니다.
- 백엔드 서비스 만들기 또는 선택 목록에서 백엔드 서비스 만들기를 클릭합니다.
- 백엔드 서비스의 이름을 입력합니다.
- 프로토콜에서 HTTP를 선택합니다.
- 이름이 지정된 포트에
http
를 입력합니다. - 백엔드 유형 목록에서 인스턴스 그룹을 선택합니다.
- 새 백엔드 섹션에서 다음을 수행합니다.
- 인스턴스 그룹 목록에서 REGION_A의
gl7-ilb-mig-a
를 선택합니다. - 포트 번호를
80
으로 설정합니다. - 완료를 클릭합니다.
- 다른 백엔드를 추가하려면 백엔드 추가를 클릭합니다.
- 인스턴스 그룹 목록에서 REGION_B의
gl7-ilb-mig-b
를 선택합니다. - 포트 번호를
80
으로 설정합니다. - 완료를 클릭합니다.
- 상태 점검 목록에서 상태 점검 만들기를 클릭합니다.
- 이름 필드에
global-http-health-check
를 입력합니다. - 프로토콜을
HTTP
로 설정합니다. - 포트를
80
으로 설정합니다. - 저장을 클릭합니다.
- 라우팅 규칙을 클릭합니다.
- 모드에서 단순한 호스트 및 경로 규칙을 선택합니다.
- 일치하지 않는 모든 호스트 및 일치하지 않는 모든 경로에 대해 하나의 백엔드 서비스만 있는지 확인합니다.
- 검토 및 완료를 클릭합니다.
- 부하 분산기 구성 설정을 검토합니다.
- 만들기를 클릭합니다.
두 번째 프런트엔드 구성 추가:
라우팅 규칙 구성
구성 검토
gcloud
gcloud compute health-checks create http
명령어로 HTTP 상태 점검을 정의하세요.gcloud compute health-checks create http global-http-health-check \ --use-serving-port \ --global
gcloud compute backend-services create
명령어로 백엔드 서비스를 정의합니다.gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --enable-logging \ --logging-sample-rate=1.0 \ --health-checks=global-http-health-check \ --global-health-checks \ --global
gcloud compute backend-services add-backend
명령어로 백엔드 서비스에 백엔드를 추가합니다.gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --balancing-mode=UTILIZATION \ --instance-group=gl7-ilb-mig-a \ --instance-group-zone=ZONE_A \ --global
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --balancing-mode=UTILIZATION \ --instance-group=gl7-ilb-mig-b \ --instance-group-zone=ZONE_B \ --global
gcloud compute url-maps create
명령어로 URL 맵을 만듭니다.gcloud compute url-maps create gl7-gilb-url-map \ --default-service=BACKEND_SERVICE_NAME \ --global
대상 프록시를 만듭니다.
HTTP의 경우:
gcloud compute target-http-proxies create
명령어를 사용하여 대상 프록시를 만듭니다.gcloud compute target-http-proxies create gil7-http-proxy \ --url-map=gl7-gilb-url-map \ --global
HTTPS의 경우:
Google 관리 인증서를 만들려면 다음 문서를 참조하세요.
Google 관리 인증서를 만든 후 인증서를 대상 프록시에 직접 연결합니다. 인증서 맵은 리전 간 내부 애플리케이션 부하 분산기에서 지원되지 않습니다.
자체 관리형 인증서를 만들려면 다음 문서를 참조하세요.
파일 경로를 변수 이름에 할당합니다.
export LB_CERT=PATH_TO_PEM_FORMATTED_FILE
export LB_PRIVATE_KEY=PATH_TO_LB_PRIVATE_KEY_FILE
gcloud beta certificate-manager certificates create
명령어를 사용하여 모든 리전 SSL 인증서를 만듭니다.gcloud certificate-manager certificates create gilb-certificate \ --private-key-file=$LB_PRIVATE_KEY \ --certificate-file=$LB_CERT \ --scope=all-regions
SSL 인증서를 사용하여
gcloud compute target-https-proxies create
명령어로 대상 프록시를 만듭니다.gcloud compute target-https-proxies create gil7-https-proxy \ --url-map=gl7-gilb-url-map \ --certificate-manager-certificates=gilb-certificate \ --global
REGION_B
리전에 VIP(10.1.2.99
)가 있는 전달 규칙과REGION_A
리전에 VIP(10.1.3.99
)가 있는 전달 규칙 두 개를 만듭니다. 자세한 내용은 고정 내부 IPv4 주소 예약을 참조하세요.커스텀 네트워크의 경우 전달 규칙에서 서브넷을 참조해야 합니다. 이때 참조할 서브넷은 프록시 서브넷이 아니라 VM 서브넷입니다.
HTTP의 경우:
올바른 플래그와 함께
gcloud compute forwarding-rules create
명령어를 사용하세요.gcloud compute forwarding-rules create FWRULE_A \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_A \ --subnet-region=REGION_A \ --address=10.1.2.99 \ --ports=80 \ --target-http-proxy=gil7-http-proxy \ --global
gcloud compute forwarding-rules create FWRULE_B \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_B \ --subnet-region=REGION_B \ --address=10.1.3.99 \ --ports=80 \ --target-http-proxy=gil7-http-proxy \ --global
HTTPS의 경우:
올바른 플래그와 함께
gcloud compute forwarding-rules create
명령어를 사용하세요.gcloud compute forwarding-rules create FWRULE_A \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_A \ --subnet-region=REGION_A \ --address=10.1.2.99 \ --ports=443 \ --target-https-proxy=gil7-https-proxy \ --global
gcloud compute forwarding-rules create FWRULE_B \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_B \ --subnet-region=REGION_B \ --address=10.1.3.99 \ --ports=443 \ --target-https-proxy=gil7-https-proxy \ --global
Terraform
상태 점검을 만들려면 google_compute_health_check
리소스를 사용합니다.
백엔드 서비스를 만들려면 google_compute_backend_service
리소스를 사용합니다.
URL 맵을 만들려면 google_compute_url_map
리소스를 사용합니다.
대상 HTTP 프록시를 만들려면 google_compute_target_http_proxy
리소스를 사용합니다.
전달 규칙을 만들려면 google_compute_forwarding_rule
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
API
healthChecks.insert
메서드에 POST
요청을 수행하여 상태 점검을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks { "name": "global-http-health-check", "type": "HTTP", "httpHealthCheck": { "portSpecification": "USE_SERVING_PORT" } }
backendServices.insert
메서드에 POST
요청을 수행하여 전역 백엔드 서비스를 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices { "name": "BACKEND_SERVICE_NAME", "backends": [ { "group": "projects/PROJECT_ID/zones/ZONE_A/instanceGroups/gl7-ilb-mig-a", "balancingMode": "UTILIZATION" }, { "group": "projects/PROJECT_ID/zones/ZONE_B/instanceGroups/gl7-ilb-mig-b", "balancingMode": "UTILIZATION" } ], "healthChecks": [ "projects/PROJECT_ID/regions/global/healthChecks/global-http-health-check" ], "loadBalancingScheme": "INTERNAL_MANAGED" }
urlMaps.insert
메서드에 POST
요청을 수행하여 URL 맵을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps { "name": "l7-ilb-map", "defaultService": "projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME" }
HTTP의 경우:
targetHttpProxies.insert
메서드에 POST
요청을 수행하여 대상 HTTP 프록시를 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxy { "name": "l7-ilb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map" }
forwardingRules.insert
메서드에 POST
요청을 수행하여 전달 규칙을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "FWRULE_A", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_A/subnetworks/SUBNET_A", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "gil7forwarding-rule-b", "IPAddress": "10.1.3.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_B/subnetworks/SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
HTTPS의 경우:
인증서 및 비공개 키 파일을 읽은 다음 SSL 인증서를 만듭니다. 다음 예시에서는 Python을 사용하여 이 작업을 수행하는 방법을 보여줍니다.
targetHttpsProxies.insert
메서드에 POST
요청을 수행하여 대상 HTTPS 프록시를 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxy { "name": "l7-ilb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map", "sslCertificates": /projects/PROJECT_ID/global/sslCertificates/SSL_CERT_NAME }
globalForwardingRules.insert
메서드에 POST
요청을 수행하여 전달 규칙을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "FWRULE_A", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpsProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_A/subnetworks/SUBNET_A", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "FWRULE_B", "IPAddress": "10.1.3.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpsProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_B/subnetworks/SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
부하 분산기 테스트
VM 인스턴스를 생성하여 연결 테스트
클라이언트 VM을 만듭니다.
gcloud compute instances create l7-ilb-client-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --network=NETWORK \ --subnet=SUBNET_A \ --zone=ZONE_A \ --tags=allow-ssh
gcloud compute instances create l7-ilb-client-b \ --image-family=debian-10 \ --image-project=debian-cloud \ --network=NETWORK \ --subnet=SUBNET_B \ --zone=ZONE_B \ --tags=allow-ssh
SSH를 사용하여 각 클라이언트 인스턴스에 연결합니다.
gcloud compute ssh l7-ilb-client-a --zone=ZONE_A
gcloud compute ssh l7-ilb-client-b --zone=ZONE_B
IP 주소가 호스트 이름을 제공하는지 확인합니다.
클라이언트 VM이 두 IP 주소 모두에 연결할 수 있는지 확인합니다. 이 명령어는 요청을 제공한 백엔드 VM의 이름을 반환합니다.
curl 10.1.2.99
curl 10.1.3.99
HTTPS 테스트의 경우
curl
을 다음 명령줄로 바꿉니다.curl -k 'https://test.example.com:443' --connect-to test.example.com:443:10.1.2.99:443
curl -k 'https://test.example.com:443' --connect-to test.example.com:443:10.1.3.99:443
-k
플래그로 인해 curl이 인증서 유효성 검사를 건너뜁니다.(선택사항) 구성된 DNS 레코드를 사용하여 클라이언트 VM과 가장 가까운 IP 주소를 확인합니다. 예를 들어 DNS_NAME은
service.example.com
일 수 있습니다.curl DNS_NAME
100개의 요청을 실행하고 부하 분산되었는지 확인
HTTP의 경우:
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl --silent 10.1.2.99)" done echo "" echo " Results of load-balancing to 10.1.2.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl --silent 10.1.3.99)" done echo "" echo " Results of load-balancing to 10.1.3.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
HTTPS의 경우:
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.2.99:443)" done echo "" echo " Results of load-balancing to 10.1.2.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.3.99:443)" done echo "" echo " Results of load-balancing to 10.1.3.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
장애 조치 테스트
REGION_B
의 백엔드가 비정상이거나 연결할 수 없는 경우REGION_A
리전의 백엔드로 장애 조치되는지 확인합니다. 장애 조치를 시뮬레이션하려면REGION_B
에서 모든 백엔드를 삭제합니다.gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \ --balancing-mode=UTILIZATION \ --instance-group=gl7-ilb-mig-b \ --instance-group-zone=ZONE_B
SSH를 사용하여 REGION_B의 클라이언트 VM에 연결합니다.
gcloud compute ssh l7-ilb-client-b \ --zone=ZONE_B
REGION_B
리전의 부하 분산된 IP 주소로 요청을 전송합니다. 명령어 결과에REGION_A
의 백엔드 VM의 응답이 표시됩니다.{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.3.99:443)" done echo "***" echo "*** Results of load-balancing to 10.1.3.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
추가 구성 옵션
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
세션 어피니티 사용 설정
이 절차에서는 백엔드 서비스가 생성된 쿠키 어피니티, 헤더 필드 어피니티 또는 HTTP 쿠키 어피니티를 사용하도록 예시 리전 내부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기의 백엔드 서비스를 업데이트하는 방법을 보여줍니다.
생성된 쿠키 어피니티가 사용 설정되면 부하 분산기는 첫 번째 요청에서 쿠키를 생성합니다. 동일한 쿠키를 사용하는 각 후속 요청의 경우 부하 분산기는 같은 백엔드 가상 머신(VM) 인스턴스 또는 엔드포인트로 요청을 전달합니다. 이 예시에서 쿠키 이름은 GCILB
입니다.
헤더 필드 어피니티가 사용 설정되면 부하 분산기는 --custom-request-header
플래그에 이름이 지정된 HTTP 헤더의 값에 따라 네트워크 엔드포인트 그룹(NEG)의 백엔드 VM 또는 엔드포인트로 요청을 라우팅합니다.
헤더 필드 어피니티는 부하 분산 지역 정책이 RING_HASH
또는 MAGLEV
이고 백엔드 서비스의 일관된 해시가 HTTP 헤더의 이름을 지정하는 경우에만 유효합니다.
HTTP 쿠키 어피니티가 사용 설정되면 부하 분산기는 선택 사항인 --affinity-cookie-ttl
플래그와 함께 HTTP_COOKIE
플래그에 이름이 지정된 HTTP 쿠키에 따라 NEG의 백엔드 VM 또는 엔드포인트로 요청을 라우팅합니다. 클라이언트가 HTTP 요청에 쿠키를 제공하지 않으면 프록시가 쿠키를 생성하여 Set-Cookie
헤더에 있는 클라이언트로 반환합니다. HTTP 쿠키 어피니티는 부하 분산 지역 정책이 RING_HASH
또는 MAGLEV
이고 백엔드 서비스의 일관된 해시가 HTTP 쿠키를 지정하는 경우에만 유효합니다.
콘솔
백엔드 서비스의 세션 어피니티를 사용 설정하거나 변경하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 백엔드를 클릭합니다.
- gil7-backend-service(이 예시에서 만든 백엔드 서비스 이름)를 클릭한 다음 수정을 클릭합니다.
- 백엔드 서비스 세부정보 페이지에서 고급 구성을 클릭합니다.
- 세션 어피니티에서 원하는 세션 어피니티 유형을 선택합니다.
- 업데이트를 클릭합니다.
gcloud
다음 Google Cloud CLI 명령어를 사용하여 백엔드 서비스를 다른 유형의 세션 어피니티로 업데이트합니다.
gcloud compute backend-services update gil7-backend-service \ --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] \ --global
API
세션 어피니티를 설정하려면 `PATCH` 요청을 backendServices/patch
메서드로 보냅니다.
PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/gil7-backend-service { "sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ] }
트래픽을 부하 분산기로 전송할 수 있는 클라이언트 제한
클라이언트에서 이그레스 방화벽 규칙을 구성하여 클라이언트가 내부 애플리케이션 부하 분산기 전달 규칙 VIP에 연결할 수 없도록 제한할 수 있습니다. 이러한 방화벽 규칙을 서비스 계정 또는 태그를 기반으로 특정 클라이언트 VM에 설정합니다.
방화벽 규칙을 사용하여 특정 내부 애플리케이션 부하 분산기 전달 규칙 VIP로 인바운드 트래픽을 제한할 수 없습니다. 전달 규칙 VIP와 동일한 VPC 네트워크 및 동일한 리전에 있는 모든 클라이언트는 일반적으로 전달 규칙 VIP로 트래픽을 전송할 수 있습니다.
또한 백엔드에 대한 모든 요청은 프록시 전용 서브넷의 IP 주소를 사용하는 프록시에서 옵니다. 클라이언트가 사용하는 전달 규칙 VIP에 따라 백엔드의 인그레스 트래픽을 허용하거나 거부하는 방화벽 규칙을 만들 수 없습니다.
다음은 이그레스 방화벽 규칙을 사용하여 부하 분산기의 전달 규칙 VIP로의 트래픽을 제한하는 몇 가지 예시입니다.
콘솔
클라이언트 VM을 식별하려면 제한하려는 특정 VM에 태그를 지정합니다. 이러한 태그는 방화벽 규칙을 태그된 클라이언트 VM과 연결하는 데 사용됩니다. 그런 후 다음 단계의 TARGET_TAG
필드에 태그를 지정합니다.
단일 방화벽 규칙 또는 여러 규칙을 사용하여 설정합니다.
단일 이그레스 방화벽 규칙
태그가 지정된 클라이언트 VM에서 부하 분산기의 VIP로 전송되는 모든 이그레스 트래픽을 거부하도록 방화벽 이그레스 규칙 하나를 구성할 수 있습니다.
Google Cloud 콘솔에서 방화벽 규칙 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭하여 태그가 지정된 클라이언트 VM에서 부하 분산기의 VIP로의 이그레스 트래픽을 거부하는 규칙을 만듭니다.
- 이름:
fr-deny-access
- 네트워크:
lb-network
- 우선순위:
100
- 트래픽 방향: 이그레스
- 일치 시 작업: 거부
- 대상: 지정된 대상 태그
- 대상 태그:
TARGET_TAG
- 대상 필터: IP 범위
- 도착 IP 범위:
10.1.2.99
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- tcp 체크박스를 선택한 후 포트 번호에
80
을 입력합니다.
- 이름:
만들기를 클릭합니다.
다중 이그레스 방화벽 규칙
보다 확장 가능한 접근 방식은 두 가지 규칙을 설정하는 것입니다. 모든 클라이언트가 부하 분산기의 VIP에 액세스하는 것을 제한하는 우선순위가 낮은 기본 규칙입니다. 태그가 지정된 클라이언트의 하위 집합이 부하 분산기의 VIP에 액세스할 수 있는 우선순위가 높은 두 번째 규칙입니다. 태그가 지정된 VM만 VIP에 액세스할 수 있습니다.
Google Cloud 콘솔에서 방화벽 규칙 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭하여 기본적으로 액세스를 거부하는 우선순위가 낮은 규칙을 만듭니다.
- 이름:
fr-deny-all-access-low-priority
- 네트워크:
lb-network
- 우선순위:
200
- 트래픽 방향: 이그레스
- 일치 시 작업: 거부
- 대상: 지정된 대상 태그
- 대상 태그:
TARGET_TAG
- 대상 필터: IP 범위
- 도착 IP 범위:
10.1.2.99
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
80
을 입력합니다.
- 이름:
만들기를 클릭합니다.
방화벽 규칙 만들기를 클릭하여 태그가 지정된 특정 인스턴스의 트래픽을 허용하는 우선순위가 더 높은 규칙을 만듭니다.
- 이름:
fr-allow-some-access-high-priority
- 네트워크:
lb-network
- 우선순위:
100
- 트래픽 방향: 이그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
TARGET_TAG
- 대상 필터: IP 범위
- 도착 IP 범위:
10.1.2.99
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
80
을 입력합니다.
- 이름:
만들기를 클릭합니다.
gcloud
클라이언트 VM을 식별하려면 제한하려는 특정 VM에 태그를 지정합니다. 그런 다음 이 단계의 TARGET_TAG
필드에 태그를 추가합니다.
단일 방화벽 규칙 또는 여러 규칙을 사용하여 설정합니다.
단일 이그레스 방화벽 규칙
태그가 지정된 클라이언트 VM에서 부하 분산기의 VIP로 전송되는 모든 이그레스 트래픽을 거부하도록 방화벽 이그레스 규칙 하나를 구성할 수 있습니다.
gcloud compute firewall-rules create fr-deny-access \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
다중 이그레스 방화벽 규칙
보다 확장 가능한 접근 방식에서는 두 가지 규칙을 설정합니다. 즉, 모든 클라이언트가 부하 분산기의 VIP에 액세스하는 것을 제한하는 우선순위가 낮은 기본 규칙과 태그가 지정된 클라이언트의 하위 집합이 부하 분산기의 VIP에 액세스할 수 있도록 허용하는 우선순위가 높은 보조 규칙입니다. 태그가 지정된 VM만 VIP에 액세스할 수 있습니다.
우선순위가 낮은 규칙 만들기:
gcloud compute firewall-rules create fr-deny-all-access-low-priority \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=200 \ --destination-ranges=10.1.2.99
우선순위가 더 높은 규칙 만들기:
gcloud compute firewall-rules create fr-allow-some-access-high-priority \ --network=lb-network \ --action=allow \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
액세스를 제어하는 태그 대신 서비스 계정을 사용하려면 방화벽 규칙을 만들 때 --target-tags
플래그 대신 --target-service-accounts
옵션을 사용하면 됩니다.
서브넷을 기반으로 내부 애플리케이션 부하 분산기 백엔드에 대한 제한된 액세스 확장
전달 규칙 수가 늘어나면 이전 섹션에서 설명한 대로 별도의 방화벽 규칙을 유지하거나 기존 규칙에 새 부하 분산된 IP 주소를 추가하기가 불편해집니다. 이를 방지하는 한 가지 방법은 예약된 서브넷에서 전달 규칙 IP 주소를 할당하는 것입니다. 예약된 서브넷을 방화벽 규칙의 대상 범위로 사용하여 태그가 지정된 인스턴스 또는 서비스 계정의 트래픽을 허용하거나 차단할 수 있습니다. 이렇게 하면 VIP당 방화벽 이그레스 규칙을 유지하지 않고도 전달 규칙 VIP 그룹에 대한 액세스를 효과적으로 제어할 수 있습니다.
다른 모든 필수 부하 분산기 리소스를 별도로 만들 예정인 경우 이를 설정하기 위한 대략적인 단계는 다음과 같습니다.
gcloud
전달 규칙에 부하 분산 IP 주소를 할당하는 데 사용할 리전 서브넷을 만듭니다.
gcloud compute networks subnets create l7-ilb-restricted-subnet \ --network=lb-network \ --region=us-west1 \ --range=10.127.0.0/24
서브넷에서 주소를 가져오는 전달 규칙을 만듭니다. 다음 예시에서는 이전 단계에서 만든 서브넷의
10.127.0.1
주소를 사용합니다.gcloud compute forwarding-rules create l7-ilb-forwarding-rule-restricted \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=l7-ilb-restricted-subnet \ --address=10.127.0.1 \ --ports=80 \ --global \ --target-http-proxy=gil7-http-proxy
방화벽 규칙을 만들어 전달 규칙 서브넷(
l7-ilb-restricted-subnet
)에서 범위 IP 주소로 향하는 트래픽을 제한합니다.gcloud compute firewall-rules create restrict-traffic-to-subnet \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp:80 \ --priority=100 \ --destination-ranges=10.127.0.0/24 \ --target-tags=TARGET_TAG
여러 내부 전달 규칙 간에 같은 IP 주소 사용
여러 내부 전달 규칙이 동일한 내부 IP 주소를 공유하려면 IP 주소를 예약하고 --purpose
플래그를 SHARED_LOADBALANCER_VIP
로 설정해야 합니다.
gcloud
gcloud compute addresses create SHARED_IP_ADDRESS_NAME \ --region=REGION \ --subnet=SUBNET_NAME \ --purpose=SHARED_LOADBALANCER_VIP
DNS 라우팅 정책 구성
클라이언트가 여러 리전에 있는 경우 해당 리전에서 VIP를 사용하여 리전 간 내부 애플리케이션 부하 분산기에 액세스해야 할 수 있습니다. 이 멀티 리전 설정은 지연 시간과 네트워크 전송 비용을 최소화해 줍니다. 이를 통해 리전 서비스 중단에 대한 복원력을 제공하는 DNS 기반의 전역 부하 분산 솔루션도 설정할 수 있습니다. 자세한 내용은 DNS 라우팅 정책 및 상태 점검 관리를 참조하세요.
gcloud
30초 TTL로 DNS 항목을 만들려면 gcloud dns record-sets create
명령어를 사용하세요.
gcloud dns record-sets create DNS_ENTRY --ttl="30" \ --type="A" --zone="service-zone" \ --routing-policy-type="GEO" \ --routing-policy-data="REGION_A=gil7-forwarding-rule-a@global;REGION_B=gil7-forwarding-rule-b@global" \ --enable-health-checking
다음을 바꿉니다.
DNS_ENTRY
: 레코드 모음의 DNS 또는 도메인 이름예를 들면
service.example.com
입니다.REGION_A
및REGION_B
: 부하 분산기를 구성한 리전
API
POST
요청을 ResourceRecordSets.create
메서드에 보내 DNS 레코드를 만듭니다.
PROJECT_ID를 프로젝트 ID로 바꿉니다.
POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/SERVICE_ZONE/rrsets { "name": "DNS_ENTRY", "type": "A", "ttl": 30, "routingPolicy": { "geo": { "items": [ { "location": "REGION_A", "healthCheckedTargets": { "internalLoadBalancers": [ { "loadBalancerType": "globalL7ilb", "ipAddress": "gil7-forwarding-rule-a", "port": "80", "ipProtocol": "tcp", "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "project": "PROJECT_ID" } ] } }, { "location": "REGION_B", "healthCheckedTargets": { "internalLoadBalancers": [ { "loadBalancerType": "globalL7ilb", "ipAddress": "gil7-forwarding-rule-b", "port": "80", "ipProtocol": "tcp", "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "project": "PROJECT_ID" } ] } } ] } } }
이상점 감지 사용 설정
전역 백엔드 서비스에 이상점 감지를 사용 설정하여 비정상 서버리스 NEG를 식별하고 비정상 서버리스 NEG에 전송되는 요청 수를 줄일 수 있습니다.
다음 방법 중 하나를 사용하여 이상점 감지를 백엔드 서비스에 사용 설정합니다.
5xx
시리즈 HTTP 상태 코드가 오류에 해당하는consecutiveErrors
메서드(outlierDetection.consecutiveErrors
)502
,503
,504
HTTP 상태 코드만 오류에 해당하는consecutiveGatewayFailure
메서드(outlierDetection.consecutiveGatewayFailure
)
다음 단계에 따라 기존 백엔드 서비스에 대한 이상점 감지를 사용 설정합니다. 이상점 감지를 사용 설정하더라도 일부 요청이 비정상 서비스로 전송되어 클라이언트에 5xx
상태 코드를 반환할 수 있습니다. 오류율을 더 줄이기 위해 이상점 감지 매개변수에 대해 보다 공격적인 값을 구성할 수 있습니다. 자세한 내용은 outlierDetection
필드를 참조하세요.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
백엔드 서비스를 수정할 부하 분산기의 이름을 클릭합니다.
부하 분산기 세부정보 페이지에서
수정을 클릭합니다.리전 간 내부 애플리케이션 부하 분산기 수정 페이지에서 백엔드 구성을 클릭합니다.
백엔드 구성 페이지에서 수정하려는 백엔드 서비스에 대해 수정
을 클릭합니다.아래로 스크롤하여 고급 구성 섹션을 펼칩니다.
이상점 감지 섹션에서 사용 설정 체크박스를 선택합니다.
수정을 클릭하여 이상점 감지를 구성합니다.
다음 옵션이 이러한 값으로 구성되었는지 확인합니다.
속성 가치 연속 오류 5 간격 1000 기본 제거 시간 30000 최대 제거 비율 50 연속 오류 시 시행 100 이 예시에서는 이상점 감지 분석이 1초마다 실행됩니다. Envoy 프록시에서 수신하는 연속 HTTP
5xx
상태 코드 수가 5개 이상이면 30초 동안 해당 Envoy 프록시의 부하 분산 풀에서 백엔드 엔드포인트가 제거됩니다. 적용 비율이 100%로 설정되면 백엔드 서비스는 이상점 감지 분석이 실행될 때마다 해당 특정 Envoy 프록시의 부하 분산 풀에서 비정상 엔드포인트를 제거합니다. 제거 조건이 충족되면 부하 분산 풀에서 백엔드 엔드포인트의 최대 50%를 제거할 수 있습니다.저장을 클릭합니다.
백엔드 서비스를 업데이트하려면 업데이트를 클릭합니다.
부하 분산기를 업데이트하려면 리전 간 내부 애플리케이션 부하 분산기 수정 페이지에서 업데이트를 클릭합니다.
gcloud
백엔드 서비스를 YAML 파일로 내보냅니다.
gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME.yaml --global
BACKEND_SERVICE_NAME
을 백엔드 서비스 이름으로 바꿉니다.백엔드 서비스의 YAML 구성을 수정하여 다음 YAML 구성에 강조표시된 대로 이상점 감지 필드를 추가합니다.
이 예시에서는 이상점 감지 분석이 1초마다 실행됩니다. Envoy 프록시에서 수신하는 연속 HTTP
5xx
상태 코드 수가 5개 이상이면 30초 동안 해당 Envoy 프록시의 부하 분산 풀에서 백엔드 엔드포인트가 제거됩니다. 적용 비율이 100%로 설정되면 백엔드 서비스는 이상점 감지 분석이 실행될 때마다 해당 특정 Envoy 프록시의 부하 분산 풀에서 비정상 엔드포인트를 제거합니다. 제거 조건이 충족되면 부하 분산 풀에서 백엔드 엔드포인트의 최대 50%를 제거할 수 있습니다.name: BACKEND_SERVICE_NAME backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/networkEndpointGroups/SERVERLESS_NEG_NAME - balancingMode: UTILIZATION capacityScaler: 1.0 group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/networkEndpointGroups/SERVERLESS_NEG_NAME_2 outlierDetection: baseEjectionTime: nanos: 0 seconds: 30 consecutiveErrors: 5 enforcingConsecutiveErrors: 100 interval: nanos: 0 seconds: 1 maxEjectionPercent: 50 port: 80 selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME sessionAffinity: NONE timeoutSec: 30 ...
다음을 바꿉니다.
BACKEND_SERVICE_NAME
: 백엔드 서비스 이름PROJECT_ID
: 프로젝트의 IDREGION_A
및REGION_B
: 부하 분산기가 구성된 리전SERVERLESS_NEG_NAME
: 첫 번째 서버리스 NEG의 이름SERVERLESS_NEG_NAME_2
: 두 번째 서버리스 NEG의 이름
최신 구성을 가져와서 백엔드 서비스를 업데이트합니다.
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME.yaml --global
백엔드 서비스에 이상점 감지가 사용 설정되었습니다.