이 문서에서는 Compute Engine VM에서 실행되는 서비스의 리전 외부 애플리케이션 부하 분산기를 구성하는 방법을 설명합니다.
특정 리전에 부하 분산기를 만들 수 있기 때문에 리전 외부 애플리케이션 부하 분산기는 주로 관할권 규정 준수 요구사항이 있는 워크로드에 사용됩니다. 리전 외부 애플리케이션 부하 분산기는 표준 네트워크 서비스 등급을 지원하므로 표준 네트워크 등급 이그레스에 대한 액세스 권한이 필요한 워크로드 또한 리전 외부 애플리케이션 부하 분산기의 일반적인 사용 사례입니다.
이 가이드를 진행하기 전에 다음 사항을 숙지하세요.
권한
이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.
작업 | 필요한 역할 |
---|---|
네트워크, 서브넷, 부하 분산기 구성요소 만들기 | 네트워크 관리자 |
방화벽 규칙 추가 및 삭제 | 보안 관리자 |
인스턴스 만들기 | 인스턴스 관리자 |
자세한 내용은 다음 가이드를 참조하세요.
설정 개요
다음과 같은 대략적인 구성 흐름의 설명에 따라 리전 외부 애플리케이션 부하 분산기를 구성할 수 있습니다. 번호가 매겨진 단계는 다이어그램의 번호를 나타냅니다.
다이어그램에서 볼 수 있듯이 이 예시에서는 하나의 백엔드 서비스와 두 개의 백엔드 인스턴스 그룹이 있는 us-west1
리전의 VPC 네트워크에 리전 외부 애플리케이션 부하 분산기를 만듭니다.
다이어그램에 표시된 항목은 다음과 같습니다.
두 개의 서브넷이 있는 VPC 네트워크:
서브넷 하나는 백엔드(인스턴스 그룹)에 사용됩니다. 기본 IP 주소 범위는
10.1.2.0/24
입니다.다른 서브넷은
us-west1
리전의 프록시 전용 서브넷입니다. 리전 외부 애플리케이션 부하 분산기를 사용하는 VPC 네트워크의 각 리전에 프록시 전용 서브넷 하나를 만들어야 합니다. 해당 리전의 프록시 전용 서브넷은 해당 리전의 모든 리전 부하 분산기 간에 공유됩니다. 부하 분산기에서 서비스의 백엔드로 보낸 패킷의 소스 주소는 프록시 전용 서브넷에서 할당됩니다. 이 예시에서 리전의 프록시 전용 서브넷의 기본 IP 주소 범위는 권장 서브넷 크기인10.129.0.0/23
입니다. 자세한 내용은 프록시 전용 서브넷을 참조하세요.
네트워크에서 프록시 전용 서브넷 트래픽 흐름을 허용하는 방화벽 규칙입니다. 즉,
10.129.0.0/23
(이 예시에서 프록시 전용 서브넷 범위)의 TCP 포트80
,443
,8080
트래픽을 허용하는 하나의 규칙을 추가합니다. 상태 점검 프로브의 또 다른 방화벽 규칙입니다.백엔드 인스턴스.
인스턴스 그룹:
- Compute Engine VM 배포를 위한 관리형 또는 비관리형 인스턴스 그룹
- GKE 배포를 위한 NEG
각 영역에서 배포 요구 사항에 따라 여러 백엔드 그룹 유형을 조합할 수 있습니다.
백엔드 준비 상태를 보고하는 리전별 상태 점검입니다.
백엔드의 사용 및 상태를 모니터링하는 리전별 백엔드 서비스입니다.
리전별 URL 맵은 요청의 URL을 파싱하고 요청 URL의 호스트와 경로에 따라 특정 백엔드 서비스로 요청을 전달합니다.
사용자로부터 요청을 수신하여 URL 맵에 전달하는 리전별 대상 HTTP 또는 HTTPS 프록시입니다. HTTPS의 경우 리전별 SSL 인증서 리소스를 구성합니다. HTTPS 부하 분산을 구성하는 경우 대상 프록시는 SSL 인증서 또는 인증서 관리자 인증서를 사용하여 SSL 트래픽을 복호화할 수 있습니다. 대상 프록시는 HTTP나 HTTPS를 사용하여 트래픽을 인스턴스에 전달할 수 있습니다.
각 수신 요청을 대상 프록시로 전달하기 위한 부하 분산기의 외부 IP 주소를 가진 전달 규칙입니다.
전달 규칙과 연결된 외부 IP 주소는 부하 분산기의 IP 주소 예약의 설명대로
gcloud compute addresses create
명령어를 통해 예약됩니다.
네트워크 및 서브넷 구성
부하 분산기의 백엔드를 위한 서브넷 한 개와 부하 분산기의 프록시를 위한 서브넷 한 개, 총 두 개 서브넷이 있는 VPC 네트워크가 필요합니다. 리전 외부 애플리케이션 부하 분산기는 리전에 따라 다릅니다. 트래픽 소스가 부하 분산기와 동일한 리전의 서브넷에 있는 경우 VPC 네트워크 내의 트래픽이 부하 분산기로 라우팅됩니다.
이 예시에서는 다음 VPC 네트워크, 리전 및 서브넷을 사용합니다.
네트워크. 네트워크는 커스텀 모드 VPC 네트워크이며 이름은
lb-network
입니다.백엔드 서브넷.
us-west1
리전에 있는backend-subnet
이라는 이름의 서브넷은 기본 IP 범위로10.1.2.0/24
를 사용합니다.프록시 서브넷.
us-west1
리전에 있는proxy-only-subnet
이라는 이름의 서브넷은 기본 IP 범위로10.129.0.0/23
을 사용합니다.
백엔드 네트워크 및 서브넷 구성
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름에
lb-network
를 입력합니다.서브넷 섹션에서 다음을 수행합니다.
- 서브넷 생성 모드를 커스텀으로 설정합니다.
- 새 서브넷 섹션에 다음 정보를 입력합니다.
- 이름:
backend-subnet
- 리전:
us-west1
- IP 주소 범위:
10.1.2.0/24
- 이름:
- 완료를 클릭합니다.
만들기를 클릭합니다.
gcloud
gcloud compute networks create
명령어를 사용하여 커스텀 VPC 네트워크를 만듭니다.gcloud compute networks create lb-network --subnet-mode=custom
gcloud compute networks subnets create
명령어를 사용하여us-west1
리전의lb-network
네트워크에 서브넷을 만듭니다.gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
Terraform
VPC 네트워크를 만들려면 google_compute_network
리소스를 사용합니다.
lb-network
네트워크에 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": "lb-network", "autoCreateSubnetworks": false }
subnetworks.insert
메서드에 대해POST
요청을 수행합니다. 여기서 PROJECT_ID는 프로젝트 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "backend-subnet", "network": "projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "region": "projects/PROJECT_ID/regions/us-west1", }
프록시 전용 서브넷 구성
프록시 전용 서브넷은 Google이 사용자를 대신하여 Envoy 프록시를 실행하는 데 사용하는 IP 주소 집합을 제공합니다. 프록시는 클라이언트의 연결을 종료하고 백엔드에 새 연결을 만듭니다.
이 프록시 전용 서브넷은 lb-network
VPC 네트워크의 동일한 리전에 있는 모든 Envoy 기반 리전 부하 분산기에서 사용됩니다. 네트워크당 리전별 활성 프록시 전용 서브넷은 하나만 있을 수 있습니다.
콘솔
Google Cloud 콘솔을 사용하는 경우에는 기다렸다가 나중에 부하 분산 페이지에서 프록시 전용 서브넷을 만들 수 있습니다.
지금 프록시 전용 서브넷을 만들려면 다음 단계를 사용합니다.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크의 이름(
lb-network
)을 클릭합니다.서브넷 추가를 클릭합니다.
이름에
proxy-only-subnet
를 입력합니다.리전에서
us-west1
을 선택합니다.용도를 리전별 관리형 프록시로 설정합니다.
IP 주소 범위에
10.129.0.0/23
을 입력합니다.추가를 클릭합니다.
gcloud
gcloud compute networks subnets
create
명령어로 프록시 전용 서브넷을 만듭니다.
gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-west1 \ --network=lb-network \ --range=10.129.0.0/23
Terraform
lb-network
네트워크에 VPC 프록시 전용 서브넷을 만들려면 google_compute_subnetwork
리소스를 사용합니다.
API
subnetworks.insert
메서드로 프록시 전용 서브넷을 만듭니다. 여기서 PROJECT_ID는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "proxy-only-subnet", "ipCidrRange": "10.129.0.0/23", "network": "projects/PROJECT_ID/global/networks/lb-network", "region": "projects/PROJECT_ID/regions/us-west1", "purpose": "REGIONAL_MANAGED_PROXY", "role": "ACTIVE" }
방화벽 규칙 구성
이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.
fw-allow-health-check
. 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 점검 시스템(130.211.0.0/22
및35.191.0.0/16
참조)의 모든 TCP 트래픽을 허용합니다. 이 예시에서는load-balanced-backend
대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.fw-allow-proxies
: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 리전 외부 애플리케이션 부하 분산기의 관리형 프록시로부터 포트80
,443
,8080
로의 TCP 트래픽을 허용합니다. 이 예시에서는 대상 태그load-balanced-backend
를 사용해서 방화벽 규칙이 적용되는 VM을 식별합니다.
이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.
대상 태그는 백엔드 인스턴스를 정의합니다. 대상 태그가 없으면 VPC 네트워크의 모든 백엔드 인스턴스에 방화벽 규칙이 적용됩니다. 백엔드 VM을 만들 때는 관리형 인스턴스 그룹 만들기에 나온 대로 지정된 대상 태그를 포함해야 합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭하여 Google Cloud 상태 점검을 허용하는 규칙을 만듭니다.
- 이름:
fw-allow-health-check
- 네트워크:
lb-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-allow-proxies
- 네트워크:
lb-network
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
load-balanced-backend
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
10.129.0.0/23
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 다음 포트 번호로
80, 443, 8080
을 입력합니다.
- 이름:
만들기를 클릭합니다.
gcloud
fw-allow-health-check
규칙을 만들어 Google Cloud 상태 점검을 허용합니다. 이 예시에서는 상태 점검 프로버의 모든 TCP 트래픽을 허용합니다. 그러나 필요에 따라 더 좁은 포트 집합을 구성할 수 있습니다.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-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-allow-proxies
규칙을 만듭니다.source-ranges
를 프록시 전용 서브넷의 할당된 범위로 설정합니다(예시:10.129.0.0/23
).gcloud compute firewall-rules create fw-allow-proxies \ --network=lb-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-allow-health-check
방화벽 규칙을 만듭니다. 여기서 PROJECT_ID는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "projects/PROJECT-ID/global/networks/lb-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-allow-proxies
방화벽 규칙을 만듭니다. 여기서 PROJECT_ID는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-proxies", "network": "projects/PROJECT_ID/global/networks/lb-network", "sourceRanges": [ "10.129.0.0/23" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] }, { "IPProtocol": "tcp", "ports": [ "443" ] }, { "IPProtocol": "tcp", "ports": [ "8080" ] } ], "direction": "INGRESS" }
VM 기반 서비스로 리전 외부 애플리케이션 부하 분산기 구성
이 섹션에서는 Compute Engine VM에서 실행되는 서비스에 필요한 구성을 보여줍니다. 클라이언트 VM은 전달 규칙에 구성된 IP 주소와 포트에 연결합니다. 클라이언트 애플리케이션에서 이 IP 주소 및 포트로 트래픽을 전송할 때 리전 외부 애플리케이션 부하 분산기의 URL 맵에 따라 요청이 백엔드 가상 머신(VM)으로 전달됩니다.
이 페이지의 예시에서는 임시 외부 IP 주소 할당을 허용하는 대신 리전 외부 애플리케이션 부하 분산기의 전달 규칙에 예약된 외부 IP 주소를 명시적으로 만듭니다. 권장사항에 따라서 전달 규칙에 IP 주소를 예약하는 것이 좋습니다.
관리형 인스턴스 그룹 백엔드 만들기
이 섹션에서는 템플릿 및 관리형 인스턴스 그룹 생성 방법을 보여줍니다. 관리형 인스턴스 그룹은 리전 외부 애플리케이션 부하 분산기 예시의 백엔드 서버를 실행하는 VM 인스턴스를 제공합니다. 클라이언트에서 전송된 트래픽은 이러한 백엔드 서버로 부하 분산됩니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다.
콘솔
인스턴스 템플릿을 만듭니다. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.
- 인스턴스 템플릿 만들기를 클릭합니다.
- 이름에
l7-xlb-backend-template
를 입력합니다. - 부팅 디스크가 Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는
apt-get
처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. - 고급 옵션을 클릭합니다.
- 네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그에
load-balanced-backend
를 입력합니다. - 네트워크 인터페이스에 다음을 선택합니다.
- 네트워크:
lb-network
- 서브넷:
backend-subnet
- 네트워크:
- 네트워크 태그에
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
#! /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를 참조하세요.
- 이름에
l7-xlb-backend-example
를 입력합니다. - 위치에서 단일 영역을 선택합니다.
- 리전에서
us-west1
을 선택합니다. - 영역에서
us-west1-a
를 선택합니다. - 인스턴스 템플릿에서
l7-xlb-backend-template
을 선택합니다. 자동 확장 모드에서 사용: 그룹에 인스턴스 추가 및 삭제를 선택합니다.
최소 인스턴스 수를
2
로, 최대 인스턴스 수를2
이상으로 설정합니다.만들기를 클릭합니다.
gcloud
이 가이드의 gcloud
안내에서는 Cloud Shell 또는 bash가 설치된 다른 환경을 사용한다고 가정합니다.
gcloud compute instance-templates create
명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.gcloud compute instance-templates create l7-xlb-backend-template \ --region=us-west1 \ --network=lb-network \ --subnet=backend-subnet \ --tags=load-balanced-backend \ --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
명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create l7-xlb-backend-example \ --zone=us-west1-a \ --size=2 \ --template=l7-xlb-backend-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":"l7-xlb-backend-template", "properties": { "machineType":"e2-standard-2", "tags": { "items":[ "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\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\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/lb-network", "subnetwork":"regions/us-west1/subnetworks/backend-subnet", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks": [ { "index":0, "boot":true, "initializeParams": { "sourceImage":"projects/debian-cloud/global/images/family/debian-12" }, "autoDelete":true } ] } }
instanceGroupManagers.insert
메서드로 각 영역에 관리형 인스턴스 그룹을 만듭니다. 여기서PROJECT_ID
는 프로젝트 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "l7-xlb-backend-example", "zone": "projects/PROJECT_ID/zones/us-west1-a", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-xlb-backend-template", "baseInstanceName": "l7-xlb-backend-example", "targetSize": 2 }
인스턴스 그룹에 이름이 지정된 포트 추가
인스턴스 그룹에 HTTP 서비스를 정의하고 해당 포트에 포트 이름을 매핑합니다. 부하 분산기의 백엔드 서비스가 트래픽을 이름이 지정된 포트로 전달합니다.
콘솔
Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
인스턴스 그룹의 이름을 클릭합니다(이 예시에서는
l7-xlb-backend-example
).인스턴스 그룹의 개요 페이지에서 수정
을 클릭합니다.포트 이름 매핑 지정을 클릭합니다.
항목 추가를 클릭합니다.
포트 이름으로
http
를 입력합니다. 포트 번호로80
을 입력합니다.저장을 클릭합니다.
gcloud
gcloud compute instance-groups
set-named-ports
명령어를 사용합니다.
gcloud compute instance-groups set-named-ports l7-xlb-backend-example \ --named-ports http:80 \ --zone us-west1-a
Terraform
named_port
속성은 관리형 인스턴스 그룹 샘플에 포함되어 있습니다.
부하 분산기의 IP 주소 예약
부하 분산기의 고정 IP 주소를 예약합니다.
콘솔
Google Cloud 콘솔에서 고정 주소 예약 페이지로 이동합니다.
새 주소의 이름을 선택합니다.
네트워크 서비스 등급에 스탠더드를 선택합니다.
IP 버전에서 IPv4를 선택합니다. IPv6 주소는 전역만 가능하며 전역 부하 분산기에서만 사용될 수 있습니다.
유형에서 리전을 선택합니다.
리전에서 us-west1을 선택합니다.
연결 대상 옵션을 없음으로 설정된 상태로 둡니다. 부하 분산기를 만들면 이 IP 주소가 부하 분산기의 전달 규칙에 연결됩니다.
예약을 클릭하여 IP 주소를 예약합니다.
gcloud
gcloud compute
를 사용하여 고정 외부 IP 주소를 예약하려면compute addresses create
명령어를 사용합니다.gcloud compute addresses create ADDRESS_NAME \ --region=us-west1 \ --network-tier=STANDARD
다음을 바꿉니다.
ADDRESS_NAME
: 주소의 이름입니다.REGION
: 이 주소를 예약할 리전입니다. 이 리전은 부하 분산기와 동일한 리전이어야 합니다. 모든 리전 IP 주소는IPv4
입니다.
결과를 보려면 다음과 같이
compute addresses describe
명령어를 사용합니다.gcloud compute addresses describe ADDRESS_NAME
Terraform
IP 주소를 예약하려면 google_compute_address
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
API
리전 IPv4 주소를 만들려면 리전 addresses.insert
메서드를 호출합니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
요청 본문에는 다음이 포함되어야 합니다.
{ "name": "ADDRESS_NAME" "networkTier": "STANDARD" "region": "us-west1" }
다음을 바꿉니다.
ADDRESS_NAME
: 주소의 이름입니다.REGION
: 요청의 리전 이름입니다.PROJECT_ID
: 이 요청의 프로젝트 ID입니다.
부하 분산기 구성
이 예시에서는 다음 리전 외부 애플리케이션 부하 분산기 리소스를 만드는 방법을 보여줍니다.
- HTTP 상태 점검
- 관리형 인스턴스 그룹이 백엔드인 백엔드 서비스
- URL 맵
- 대상 HTTP(S) 프록시에 리전이 정의되어 있으면 리전별 URL 맵을 참조해야 합니다. 리전별 URL 맵은 수신 URL의 호스트 및 경로에 대해 정의한 규칙에 따라 리전별 백엔드 서비스로 요청을 라우팅합니다. 리전별 URL 맵은 동일한 리전의 리전별 대상 프록시 규칙에서만 참조할 수 있습니다.
- SSL 인증서(HTTPS용)
- 대상 프록시
- 전달 규칙
프록시 가용성
Google Cloud 리전에 새로운 부하 분산기의 프록시 용량이 부족한 경우도 있습니다. 이 경우 부하 분산기를 생성할 때 Google Cloud 콘솔에서 프록시 가용성 경고 메시지를 제공합니다. 이 문제를 해결하려면 다음 중 하나를 수행하면 됩니다.
- 부하 분산기에 다른 리전을 선택합니다. 다른 리전에 백엔드가 있으면 이 방법이 편리합니다.
- 프록시 전용 서브넷이 이미 할당된 VPC 네트워크를 사용합니다.
용량 문제가 해결될 때까지 기다립니다.
콘솔
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에서 공개(외부)를 선택하고 다음을 클릭합니다.
- 전역 또는 단일 리전 배포에서 리전 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
기본 구성
- 부하 분산기 이름에
regional-l7-xlb
를 입력합니다. - 리전에서
us-west1
을 선택합니다. - 네트워크에서
lb-network
를 선택합니다.
프록시 전용 서브넷 예약
리전 외부 애플리케이션 부하 분산기의 경우 프록시 전용 서브넷을 예약합니다.
- 서브넷 예약을 클릭합니다.
- 이름에
proxy-only-subnet
를 입력합니다. - IP 주소 범위에
10.129.0.0/23
을 입력합니다. - 추가를 클릭합니다.
프런트엔드 구성
HTTP의 경우:
- 프런트엔드 구성을 클릭합니다.
- 이름을
l7-xlb-forwarding-rule
으로 설정합니다. - 프로토콜을
HTTP
로 설정합니다. - 포트를
80
으로 설정합니다. - 부하 분산기의 IP 주소 예약에서 만든 IP 주소를 선택합니다.
- 완료를 클릭합니다.
HTTPS의 경우:
- 프런트엔드 구성을 클릭합니다.
- 이름 필드에
l7-xlb-forwarding-rule
을 입력합니다. - 프로토콜 필드에서
HTTPS (includes HTTP/2)
를 선택합니다. - 포트가
443
으로 설정되었는지 확인합니다. - 부하 분산기의 IP 주소 예약에서 만든 IP 주소를 선택합니다.
- 인증서 목록에서 다음 안내를 따르세요.
- 이미 Compute Engine 자체 관리형 SSL 인증서 리소스가 있으면 기본 SSL 인증서를 선택합니다.
- 새 인증서 만들기를 클릭합니다.
- 이름 필드에
l7-xlb-cert
를 입력합니다. - 해당 필드에 다음 PEM 형식의 파일을 업로드합니다.
- 인증서
- 비공개 키
- 만들기를 클릭합니다.
- 이름 필드에
- 선택사항: 기본 SSL 인증서 외에 인증서를 추가하려면 다음 안내를 따르세요.
- 인증서 추가를 클릭합니다.
- 이미 인증서가 있으면 인증서 목록에서 인증서를 선택합니다.
- 선택사항: 새 인증서 만들기를 클릭하고 이전 단계에 나온 안내를 따릅니다.
SSL 정책 목록에서 SSL 정책을 선택합니다. 원하는 경우 SSL 정책을 만들려면 다음 단계를 따르세요.
- SSL 정책 목록에서 정책 만들기를 선택합니다.
- SSL 정책의 이름을 입력합니다.
- 최소 TLS 버전을 선택합니다. 기본값은 TLS 1.0입니다.
- 사전 구성된 Google 관리형 프로필 중 하나를 선택하거나 SSL 기능을 개별적으로 선택할 수 있는 커스텀 프로필을 선택합니다. 사용 설정된 기능과 사용 중지된 기능이 표시됩니다.
- 저장을 클릭합니다.
SSL 정책을 만들지 않았다면 기본 Google Cloud SSL 정책이 적용됩니다.
완료를 클릭합니다.
백엔드 서비스 구성
- 백엔드 구성을 클릭합니다.
- 백엔드 서비스 만들기 또는 선택 메뉴에서 백엔드 서비스 만들기를 선택합니다.
- 백엔드 서비스의 이름을
l7-xlb-backend-service
로 설정합니다. - 프로토콜에서 HTTP를 선택합니다.
- 이름이 지정된 포트에
http
를 입력합니다. - 백엔드 유형을 인스턴스 그룹으로 설정합니다.
- 새 백엔드 섹션에서 다음을 수행합니다.
- 인스턴스 그룹을
l7-xlb-backend-example
으로 설정합니다. - 포트 번호를
80
으로 설정합니다. - 분산 모드를 사용률로 설정합니다.
- 완료를 클릭합니다.
- 인스턴스 그룹을
- 상태 점검 목록에서 상태 점검 만들기를 클릭합니다.
- 이름을
l7-xlb-basic-check
으로 설정합니다. - 프로토콜을
HTTP
로 설정합니다. - 포트를
80
으로 설정합니다. - 저장을 클릭합니다.
- 이름을
- 만들기를 클릭합니다.
라우팅 규칙 구성
- 라우팅 규칙을 클릭합니다.
- 모드에서 단순한 호스트 및 경로 규칙을 선택합니다.
l7-xlb-backend-service
가 일치하지 않는 모든 호스트 및 일치하지 않는 모든 경로에 대한 유일한 백엔드 서비스입니다.
구성 검토
- 검토 및 완료를 클릭합니다.
- 부하 분산기 구성 설정을 검토합니다.
- 선택사항: 부하 분산기를 만드는 데 사용되는 REST API 요청을 보려면 상응하는 코드를 클릭합니다.
- 만들기를 클릭합니다.
gcloud
gcloud compute health-checks create http
명령어로 HTTP 상태 점검을 정의합니다.gcloud compute health-checks create http l7-xlb-basic-check \ --region=us-west1 \ --request-path='/' \ --use-serving-port
gcloud compute backend-services create
명령어로 백엔드 서비스를 정의합니다.gcloud compute backend-services create l7-xlb-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=l7-xlb-basic-check \ --health-checks-region=us-west1 \ --region=us-west1
gcloud compute backend-services add-backend
명령어로 백엔드 서비스에 백엔드를 추가합니다.gcloud compute backend-services add-backend l7-xlb-backend-service \ --balancing-mode=UTILIZATION \ --instance-group=l7-xlb-backend-example \ --instance-group-zone=us-west1-a \ --region=us-west1
gcloud compute url-maps create
명령어로 URL 맵을 만듭니다.gcloud compute url-maps create regional-l7-xlb-map \ --default-service=l7-xlb-backend-service \ --region=us-west1
대상 프록시를 만듭니다.
HTTP의 경우:
HTTP 부하 분산기의 경우
gcloud compute target-http-proxies create
명령어로 대상 프록시를 만듭니다.gcloud compute target-http-proxies create l7-xlb-proxy \ --url-map=regional-l7-xlb-map \ --url-map-region=us-west1 \ --region=us-west1
HTTPS의 경우:
Compute Engine 또는 인증서 관리자 인증서를 만들 수 있습니다. 인증서 관리자를 사용하여 인증서를 만들려면 다음 방법 중 하나를 사용합니다.
- 리전별 자체 관리형 인증서 리전별 자체 관리형 인증서 만들기 및 사용에 대한 자세한 내용은 리전별 자체 관리형 인증서 배포를 참조하세요. 인증서 맵은 지원되지 않습니다.
리전별 Google 관리형 인증서. 인증서 맵은 지원되지 않습니다.
인증서 관리자에서 지원되는 리전별 Google 관리형 인증서 유형은 다음과 같습니다.
- 프로젝트별 DNS 승인을 사용하는 리전별 Google 관리형 인증서. 자세한 내용은 리전별 Google 관리형 인증서 배포를 참조하세요.
- Certificate Authority Service를 사용하는 리전별 Google 관리형(비공개) 인증서. 자세한 내용은 CA 서비스를 사용하여 리전별 Google 관리형 인증서 배포를 참조하세요.
파일 경로를 변수 이름에 할당합니다.
export LB_CERT=path to PEM-formatted file
export LB_PRIVATE_KEY=path to PEM-formatted file
gcloud compute ssl-certificates create
명령어를 사용하여 리전별 SSL 인증서를 만듭니다.gcloud compute ssl-certificates create l7-xlb-cert \ --certificate=$LB_CERT \ --private-key=$LB_PRIVATE_KEY \ --region=us-west1
리전별 SSL 인증서를 사용하여
gcloud compute target-https-proxies create
명령어로 대상 프록시를 만듭니다.gcloud compute target-https-proxies create l7-xlb-proxy \ --url-map=regional-l7-xlb-map \ --region=us-west1 \ --ssl-certificates=l7-xlb-cert
전달 규칙을 만듭니다.
HTTP의 경우:
올바른 플래그와 함께
gcloud compute forwarding-rules create
명령어를 사용합니다.gcloud compute forwarding-rules create l7-xlb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --address=ADDRESS_NAME \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-xlb-proxy \ --target-http-proxy-region=us-west1
HTTPS의 경우:
올바른 플래그와 함께
gcloud compute forwarding-rules create
명령어를 사용하여 전달 규칙을 만듭니다.gcloud compute forwarding-rules create l7-xlb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --address=ADDRESS_NAME \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-xlb-proxy \ --target-https-proxy-region=us-west1
인증서를 만든 후 인증서를 대상 프록시에 직접 연결합니다.
Terraform
상태 점검을 만들려면 google_compute_region_health_check
리소스를 사용합니다.
백엔드 서비스를 만들려면 google_compute_region_backend_service
리소스를 사용합니다.
URL 맵을 만들려면 google_compute_region_url_map
리소스를 사용합니다.
대상 HTTP 프록시를 만들려면 google_compute_region_target_http_proxy
리소스를 사용합니다.
전달 규칙을 만들려면 google_compute_forwarding_rule
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
API
regionHealthChecks.insert
메서드에 POST
요청을 수행하여 상태 점검을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/{region}/healthChecks
{
"name": "l7-xlb-basic-check",
"type": "HTTP",
"httpHealthCheck": {
"portSpecification": "USE_SERVING_PORT"
}
}
regionBackendServices.insert
메서드에 POST
요청을 수행하여 리전별 백엔드 서비스를 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices
{
"name": "l7-xlb-backend-service",
"backends": [
{
"group": "projects/<var>PROJECT_ID</var>/zones/us-west1-a/instanceGroups/l7-xlb-backend-example",
"balancingMode": "UTILIZATION"
}
],
"healthChecks": [
"projects/<var>PROJECT_ID</var>/regions/us-west1/healthChecks/l7-xlb-basic-check"
],
"loadBalancingScheme": "EXTERNAL_MANAGED"
}
regionUrlMaps.insert
메서드에 POST
요청을 수행하여 URL 맵을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/urlMaps
{
"name": "regional-l7-xlb-map",
"defaultService": "projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices/l7-xlb-backend-service"
}
regionTargetHttpProxies.insert
메서드에 POST
요청을 수행하여 대상 HTTP 프록시를 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/regional-l7-xlb-map", "region": "us-west1" }
forwardingRules.insert
메서드에 POST
요청을 수행하여 전달 규칙을 만듭니다. 여기서 PROJECT_ID
는 프로젝트 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "l7-xlb-forwarding-rule", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-xlb-proxy", "loadBalancingScheme": "EXTERNAL_MANAGED", "network": "projects/PROJECT_ID/global/networks/lb-network", "networkTier": "STANDARD", }
부하 분산기에 도메인 연결
부하 분산기를 만든 후 부하 분산기와 연결된 IP 주소를 확인합니다(예: 30.90.80.100
). 도메인이 부하 분산기를 가리키도록 하려면 도메인 등록 서비스를 사용하여 A
레코드를 만듭니다. SSL 인증서에 여러 도메인을 추가했다면 모두 부하 분산기의 IP 주소를 가리키는 A
레코드를 도메인마다 추가해야 합니다. 예를 들어 www.example.com
및 example.com
의 A
레코드를 만들려면 다음을 사용합니다.
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Cloud DNS를 DNS 제공업체로 사용하는 경우 레코드 추가, 수정, 삭제를 참조하세요.
부하 분산기 테스트
부하 분산 서비스가 실행 중이므로 이제 전달 규칙으로 트래픽을 전송하고 다른 인스턴스로 분산되는 트래픽을 살펴볼 수 있습니다.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 방금 만든 부하 분산기를 선택합니다.
- 백엔드 섹션에서 VM이 정상인지 확인합니다. 정상 열에 두 VM이 모두 정상으로 표시되어야 합니다(
2/2
). 그렇지 않으면 먼저 페이지를 새로고침해 보세요. Google Cloud 콘솔에서 VM이 정상인지 확인하는 데 몇 분 정도 걸릴 수 있습니다. 몇 분 후에도 백엔드가 정상으로 표시되지 않으면 방화벽 구성과 백엔드 VM에 할당된 네트워크 태그를 검토합니다. - Google Cloud 콘솔에서 백엔드 인스턴스가 정상임을 표시하면
https://IP_ADDRESS
(또는http://IP_ADDRESS
)로 이동하여 웹브라우저를 사용해 부하 분산기를 테스트할 수 있습니다.IP_ADDRESS
을 부하 분산기의 IP 주소로 바꿉니다. - 자체 서명 인증서를 HTTPS 테스트에 사용하면 브라우저에 경고가 표시됩니다. 브라우저가 자체 서명 인증서를 수락하도록 명시적으로 지시해야 합니다.
- 브라우저는 페이지를 제공한 인스턴스의 이름과 영역을 표시하는 콘텐츠로 페이지에 렌더링해야 합니다(예:
Page served from: lb-backend-example-xxxx
). 브라우저에서 이 페이지를 렌더링하지 않는 경우 이 가이드의 구성 설정을 검토하세요.
gcloud
예약된 IPv4 주소를 확인합니다.
gcloud beta compute addresses describe ADDRESS_NAME \ --format="get(address)" \ --region="us-west1"
웹브라우저에서 https://IP_ADDRESS
(또는 http://IP_ADDRESS
)로 이동하여 부하 분산기를 테스트할 수 있습니다. IP_ADDRESS
를 부하 분산기의 IP 주소로 바꿉니다.
자체 서명 인증서를 HTTPS 테스트에 사용하면 브라우저에 경고가 표시됩니다. 브라우저가 자체 서명 인증서를 수락하도록 명시적으로 지시해야 합니다.
브라우저에서 백엔드 인스턴스에 대한 최소한의 정보로 페이지를 렌더링해야 합니다. 브라우저에서 이 페이지를 렌더링하지 않는 경우 이 가이드의 구성 설정을 검토하세요.
추가 구성 옵션
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
세션 어피니티 사용 설정
이 절차에서는 백엔드 서비스가 생성된 쿠키 어피니티, 헤더 필드 어피니티 또는 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 콘솔에서 부하 분산 페이지로 이동합니다.
방금 만든 부하 분산기를 선택합니다.
백엔드를 클릭합니다.
l7-xlb-backend-service(이 예시에서 만든 백엔드 서비스 이름)를 클릭하고 수정을 클릭합니다.
백엔드 서비스 세부정보 페이지에서 고급 구성을 클릭합니다.
메뉴에서 세션 어피니티에 원하는 세션 어피니티 유형을 선택합니다.
업데이트를 클릭합니다.
gcloud
다음 gcloud 명령어를 사용하여 l7-xlb-backend-service
백엔드 서비스를 다른 유형의 세션 어피니티로 업데이트합니다.
gcloud compute backend-services update l7-xlb-backend-service \ --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] --region=us-west1
API
세션 어피니티를 설정하려면 regionBackendServices/patch
메서드에 PATCH
요청을 수행합니다.
PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-xlb-backend-service
{
"sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ]
}