Google Cloud 기본 프록시 네트워크 부하 분산기를 사용하면 전 세계 모든 사용자에게 단일 IP 주소를 사용할 수 있습니다. 기본 프록시 네트워크 부하 분산기는 사용자와 가장 가까운 백엔드 인스턴스로 트래픽을 자동으로 라우팅합니다.
이 페이지에는 대상 TCP 프록시 및 VM 인스턴스 그룹 백엔드로 기본 프록시 네트워크 부하 분산기를 설정하는 방법에 대한 안내가 포함되어 있습니다. 시작하기 전에 외부 프록시 네트워크 부하 분산기 개요에서 이러한 부하 분산기의 작동 방식에 대한 자세한 내용을 읽어보세요.
설정 개요
이 예시에서는 리전 A 및 리전 B의 두 리전에 존재하는 서비스에 외부 프록시 네트워크 부하 분산기를 설정하는 방법을 보여줍니다.
이 예시에서 서비스는 포트 110
에서 응답하도록 구성된 Apache 서버 세트입니다. 대부분의 브라우저는 포트 110
을 허용하지 않으므로 테스트 섹션에서는 curl
을 사용합니다.
이 예시에서는 다음 항목을 구성합니다.
- 두 리전 간에 분산된 4개의 인스턴스
- 인스턴스를 포함하는 인스턴스 그룹
- 인스턴스 상태 검증을 위한 상태 점검
- 인스턴스를 모니터링하고 구성된 사용량 초과를 방지하는 백엔드 서비스
- 대상 TCP 프록시
- 외부 정적 IPv4 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
- 외부 정적 IPv6 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
- 부하 분산기와 상태 점검기의 트래픽이 인스턴스에 도달하도록 허용하는 방화벽 규칙
부하 분산기가 구성된 후 구성을 테스트합니다.
권한
이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나, 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.
작업 | 필요한 역할 |
---|---|
네트워크, 서브넷, 부하 분산기 구성요소 만들기 | 네트워크 관리자 |
방화벽 규칙 추가 및 삭제 | 보안 관리자 |
인스턴스 만들기 | Compute 인스턴스 관리자 |
자세한 내용은 다음 가이드를 참조하세요.
인스턴스 그룹 백엔드 구성
이 섹션에서는 간단한 인스턴스 그룹을 만들고 여기에 인스턴스를 추가한 후 해당 인스턴스를 상태 점검을 통해 백엔드 서비스에 추가하는 방법을 보여줍니다. 일반적으로 프로덕션 시스템에서는 인스턴스 템플릿을 기반으로 관리형 인스턴스 그룹을 사용하지만, 초기 테스트에서는 이렇게 구성하는 방식이 더 빠릅니다.
인스턴스 구성
테스트를 위해 4개의 인스턴스(2개의 인스턴스 그룹에 각각 2개씩)에 Apache를 설치합니다. 일반적으로 외부 프록시 네트워크 부하 분산기는 HTTP 트래픽에 사용되지 않지만 Apache 소프트웨어는 일반적으로 테스트용으로 사용됩니다.
이 예시에서 인스턴스는 tcp-lb
태그로 생성됩니다. 이 태그는 나중에 방화벽 규칙에 의해 사용됩니다.
콘솔
인스턴스 만들기
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
인스턴스 만들기를 클릭합니다.
이름을
vm-a1
로 설정합니다.리전을
REGION_A
로 설정합니다.영역을
ZONE_A
로 설정합니다.고급 옵션을 클릭합니다.
네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그에
tcp-lb
,allow-health-check-ipv6
을 입력합니다.
- 네트워크 태그에
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
만들기를 클릭합니다.
동일한 설정으로 vm-a2
를 만듭니다. 단, 시작 스크립트 필드의 다음 스크립트는 제외합니다.
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
동일한 설정으로 vm-b1
을 만듭니다. 단, 리전은 REGION_B
로 영역은 ZONE_B
로 설정합니다.
시작 스크립트 필드에 다음 스크립트를 입력합니다.
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
동일한 설정으로 vm-b2
을 만듭니다. 단, 리전은 REGION_B
로 영역은 ZONE_B
로 설정합니다.
시작 스크립트 필드에 다음 스크립트를 입력합니다.
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html
gcloud
영역
ZONE_A
에vm-a1
만들기gcloud compute instances create vm-a1 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_A \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | tee /var/www/html/index.html EOF"
영역
ZONE_A
에vm-a2
만들기gcloud compute instances create vm-a2 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_A \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | tee /var/www/html/index.html EOF"
영역
ZONE_B
에vm-b1
만들기gcloud compute instances create vm-b1 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_B \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | tee /var/www/html/index.html EOF"
영역
ZONE_B
에vm-b2
만들기gcloud compute instances create vm-b2 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_B \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | tee /var/www/html/index.html EOF"
인스턴스 그룹 생성
이 섹션에서는 각 영역에 인스턴스 그룹을 만들고 인스턴스를 추가합니다.
콘솔
Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
인스턴스 그룹 만들기를 클릭합니다.
새 비관리형 인스턴스 그룹을 클릭합니다.
이름을
instance-group-a
로 설정합니다.영역을
ZONE_A
로 설정합니다.포트 매핑에서 포트 추가를 클릭합니다. 부하 분산기는 이름이 지정된 포트를 통해 인스턴스 그룹으로 트래픽을 전송합니다. 이름이 지정된 포트를 만들어 수신 트래픽을 특정 포트 번호로 매핑합니다.
- 포트 이름을
tcp110
으로 설정합니다. - 포트 번호를
110
으로 설정합니다.
- 포트 이름을
VM 인스턴스에서
vm-a1
및vm-a2
를 선택합니다.다른 설정은 그대로 둡니다.
만들기를 클릭합니다.
단계를 반복하되 다음 값을 설정합니다.
- 이름:
instance-group-b
- 리전:
REGION_B
- 영역:
ZONE_B
- 포트 이름:
tcp110
- 포트 번호:
110
- 인스턴스: vm-b1 및 vm-b2.
- 이름:
gcloud
instance-group-a
인스턴스 그룹을 만듭니다.gcloud compute instance-groups unmanaged create instance-group-a \ --zone ZONE_A
인스턴스 그룹에 대해 이름이 지정된 포트를 만듭니다.
gcloud compute instance-groups set-named-ports instance-group-a \ --named-ports tcp110:110 \ --zone ZONE_A
vm-a1
및vm-a2
를instance-group-a
에 추가합니다.gcloud compute instance-groups unmanaged add-instances instance-group-a \ --instances vm-a1,vm-a2 \ --zone ZONE_A
us-ig2
인스턴스 그룹을 만듭니다.gcloud compute instance-groups unmanaged create instance-group-b \ --zone ZONE_B
인스턴스 그룹에 대해 이름이 지정된 포트를 만듭니다.
gcloud compute instance-groups set-named-ports instance-group-b \ --named-ports tcp110:110 \ --zone ZONE_B
instance-group-b에
vm-b1
및vm-b2
를 추가합니다.gcloud compute instance-groups unmanaged add-instances instance-group-b \ --instances vm-b1,vm-b2 \ --zone ZONE_B
이제 리전당 하나의 인스턴스 그룹이 생성됩니다. 각 인스턴스 그룹에는 2개의 VM 인스턴스가 있습니다.
외부 프록시 네트워크 부하 분산기에 대한 방화벽 규칙 만들기
부하 분산기 및 상태 점검기에서 인스턴스로 전송되는 트래픽을 허용하도록 방화벽을 구성합니다. 이 경우 TCP 포트 110이 열립니다. 상태 점검은 동일한 포트를 사용합니다. 부하 분산기와 인스턴스 간의 트래픽이 IPv4를 사용하므로 IPv4 범위만 열려있어야 합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭합니다.
이름 필드에
allow-tcp-lb-and-health
를 입력합니다.네트워크를 선택합니다.
대상에서 지정된 대상 태그를 선택합니다.
대상 태그를
tcp-lb
로 설정합니다.소스 필터를 IPv4 범위로 설정합니다.
소스 IPv4 범위를
130.211.0.0/22
,35.191.0.0/16
으로 설정합니다.프로토콜 및 포트에서 지정된 프로토콜 및 포트를
tcp:110
으로 설정합니다.만들기를 클릭합니다.
gcloud
gcloud compute firewall-rules create allow-tcp-lb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
부하 분산기 구성
콘솔
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에 네트워크 부하 분산기(TCP/UDP/SSL)를 선택하고 다음을 클릭합니다.
- 프록시 또는 패스 스루에 프록시 부하 분산기를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에 공개(외부)를 선택하고 다음을 클릭합니다.
- 전역 또는 단일 리전 배포에 전역 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 부하 분산기 생성에 기본 프록시 네트워크 부하 분산기를 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
기본 구성
이름을 my-tcp-lb
로 설정합니다.
백엔드 구성
- 백엔드 구성을 클릭합니다.
- 백엔드 유형에서 인스턴스 그룹을 선택합니다.
- 프로토콜에서 TCP를 선택합니다.
- 첫 번째 백엔드 구성:
- 새 백엔드에서 인스턴스 그룹
instance-group-a
을 선택합니다. - 나머지 기본 값을 유지합니다.
- 새 백엔드에서 인스턴스 그룹
- 두 번째 백엔드 구성:
- 백엔드 추가를 클릭합니다.
- 인스턴스 그룹
instance-group-b
를 선택합니다. - 포트 번호에서
80
을 삭제하고110
을 추가합니다.
- 상태 점검 구성:
- 상태 점검에서 상태 점검 만들기를 선택합니다.
- 상태 점검 이름을
my-tcp-health-check
로 설정합니다. - 프로토콜에서 TCP를 선택합니다.
- 포트를
110
으로 설정합니다. - 나머지 기본 값을 유지합니다.
- 저장 후 계속을 클릭합니다.
- Google Cloud 콘솔에서 백엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 모든 단계를 완료했는지 다시 확인합니다.
프런트엔드 구성
- 프런트엔드 구성을 클릭합니다.
- 첫 번째 전달 규칙 추가:
-
my-tcp-lb-forwarding-rule
의 이름을 입력합니다. - 프로토콜에서 TCP를 선택합니다.
- IP 주소에서 IP 주소 만들기를 선택합니다.
-
tcp-lb-static-ip
의 이름을 입력합니다. - 예약을 클릭합니다.
-
- 포트를
110
으로 설정합니다. - 이 예시에서는 프록시 프로토콜이 Apache HTTP 서버 소프트웨어에서 작동하지 않으므로 프록시 프로토콜을 사용 설정하지 마세요. 자세한 내용은 프록시 프로토콜을 참조하세요.
- 완료를 클릭합니다.
-
- 두 번째 전달 규칙 추가:
- 프런트엔드 IP 및 포트 추가를 클릭합니다.
-
my-tcp-lb-ipv6-forwarding-rule
의 이름을 입력합니다. - 프로토콜에서 TCP를 선택합니다.
- IP 버전을
IPv6
로 설정합니다. - IP 주소에서 IP 주소 만들기를 클릭합니다.
-
tcp-lb-ipv6-static-ip
의 이름을 입력합니다. - 예약을 클릭합니다.
-
- 포트를
110
으로 설정합니다. - 이 예시에서는 프록시 프로토콜이 Apache HTTP 서버 소프트웨어에서 작동하지 않으므로 프록시 프로토콜을 사용 설정하지 마세요. 자세한 내용은 프록시 프로토콜을 참조하세요.
- 완료를 클릭합니다.
Google Cloud 콘솔에서 프런트엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 이전 단계를 모두 완료했는지 다시 확인합니다.
검토 및 완료
- 검토 및 완료를 클릭합니다.
- 부하 분산기 구성 설정을 검토합니다.
- 선택사항: 부하 분산기를 만드는 데 사용되는 REST API 요청을 보려면 상응하는 코드를 클릭합니다.
- 만들기를 클릭합니다.
gcloud
- 상태 점검을 만듭니다.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
- 백엔드 서비스를 만듭니다.
gcloud compute backend-services create my-tcp-lb \ --load-balancing-scheme EXTERNAL \ --global-health-checks \ --global \ --protocol TCP \ --health-checks my-tcp-health-check \ --timeout 5m \ --port-name tcp110
- 백엔드 서비스에 인스턴스 그룹을 추가합니다.
gcloud compute backend-services add-backend my-tcp-lb \ --global \ --instance-group instance-group-a \ --instance-group-zone ZONE_A \ --balancing-mode UTILIZATION \ --max-utilization 0.8
gcloud compute backend-services add-backend my-tcp-lb \ --global \ --instance-group instance-group-b \ --instance-group-zone ZONE_B \ --balancing-mode UTILIZATION \ --max-utilization 0.8
- 대상 TCP 프록시를 구성합니다. 프록시 헤더를 사용 설정하려면
NONE
대신PROXY_V1
로 설정합니다.gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \ --backend-service my-tcp-lb \ --proxy-header NONE
- 전역 고정 IPv4 및 IPv6 주소를 예약합니다.
고객이 이 IP 주소를 사용하여 부하 분산된 서비스에 도달할 수 있습니다.
gcloud compute addresses create tcp-lb-static-ipv4 \ --ip-version=IPV4 \ --global
gcloud compute addresses create tcp-lb-static-ipv6 \ --ip-version=IPV6 \ --global
- 주소 2개에 전역 전달 규칙을 구성합니다.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \ --load-balancing-scheme EXTERNAL \ --global \ --target-tcp-proxy my-tcp-lb-target-proxy \ --address tcp-lb-static-ipv4 \ --ports 110
gcloud compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \ --load-balancing-scheme EXTERNAL \ --global \ --target-tcp-proxy my-tcp-lb-target-proxy \ --address tcp-lb-static-ipv6 \ --ports 110
부하 분산기 테스트
부하 분산기의 IP 주소를 가져옵니다.
IPv4 주소를 가져오려면 다음 명령어를 실행합니다.
gcloud compute addresses describe tcp-lb-static-ipv4
IPv6 주소를 가져오려면 다음 명령어를 실행합니다.
gcloud compute addresses describe tcp-lb-static-ipv6
다음 명령어를 실행하여 트래픽을 부하 분산기로 보냅니다.
LB_IP_ADDRESS
를 부하 분산기의 IPv4 또는 IPv6 주소로 바꿉니다.curl -m1 LB_IP_ADDRESS:110
예를 들어 할당된 IPv6 주소가
[2001:db8:1:1:1:1:1:1/96]:110
이면 명령어는 다음과 같습니다.curl -m1 http://[2001:db8:1:1:1:1:1:1]:110
부하 분산기에 도달할 수 없는 경우 설정 문제 해결에 설명된 단계를 시도하세요.
추가 구성 옵션
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
클라이언트 연결 정보를 유지하기 위한 프록시 프로토콜
프록시 네트워크 부하 분산기는 클라이언트의 TCP 연결을 종료하고 인스턴스에 새 연결을 만듭니다. 기본적으로 원래 클라이언트 IP와 포트 정보는 유지되지 않습니다.
원래 연결 정보를 유지하고 인스턴스로 보내려면 PROXY 프로토콜 버전 1을 사용 설정합니다. 이 프로토콜은 요청의 일부로 소스 IP 주소, 대상 IP 주소, 포트 번호가 포함된 추가 헤더를 인스턴스에 보냅니다.
프록시 네트워크 부하 분산기의 백엔드 인스턴스에서 PROXY 프로토콜 헤더를 지원하는 서버를 실행하고 있는지 확인합니다. 서버가 PROXY 프로토콜 헤더를 지원하도록 구성되지 않았으면 백엔드 인스턴스에서 빈 응답을 반환합니다.
사용자 트래픽에 PROXY 프로토콜을 설정한 경우 상태 점검에도 이 프로토콜을 설정할 수 있습니다. 동일한 포트에서 상태를 점검하고 콘텐츠를 제공하는 경우 상태 점검의 --proxy-header
를 부하 분산기 설정에 맞게 설정합니다.
일반적으로 PROXY 프로토콜 헤더는 다음 형식의 사용자가 읽을 수 있는 한 줄 텍스트입니다.
PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n
다음 예시에서는 PROXY 프로토콜을 보여줍니다.
PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n
앞의 예시에서 클라이언트 IP는 192.0.2.1
, 부하 분산 IP는 198.51.100.1
, 클라이언트 포트는 15221
, 목적지 포트는 110
입니다.
클라이언트 IP를 모르는 경우 부하 분산기는 다음 형식으로 PROXY 프로토콜 헤더를 생성합니다.
PROXY UNKNOWN\r\n
대상 프록시의 PROXY 프로토콜 헤더 업데이트
이 페이지의 부하 분산기 설정 예시에서는 프록시 네트워크 부하 분산기를 만드는 동안 PROXY 프로토콜 헤더를 사용 설정하는 방법을 보여줍니다. 기존 대상 프록시의 PROXY 프로토콜 헤더를 변경하려면 다음 단계를 수행합니다.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기의 편집을 클릭합니다.
- 프런트엔드 구성을 클릭합니다.
- 프록시 프로토콜 필드 값을 켜기로 변경합니다.
- 업데이트를 클릭하여 변경사항을 저장합니다.
gcloud
다음 명령어에서 --proxy-header
필드를 수정하고 요구사항에 따라 NONE
또는 PROXY_V1
로 설정합니다.
gcloud compute target-tcp-proxies update TARGET_PROXY_NAME \ --proxy-header=[NONE | PROXY_V1]
세션 어피니티 구성
구성 예시는 세션 어피니티 없이 백엔드 서비스를 만듭니다.
이 절차에서는 백엔드 서비스가 클라이언트 IP 어피니티 또는 생성된 쿠키 어피니티를 사용하도록 예시 부하 분산기의 백엔드 서비스를 업데이트하는 방법을 보여줍니다.
클라이언트 IP 어피니티가 사용 설정되면 부하 분산기는 클라이언트의 IP 주소 및 부하 분산기의 IP 주소(외부 전달 규칙의 외부 IP 주소)에서 생성된 해시를 기반으로 특정 클라이언트의 요청을 동일한 백엔드 VM에 전달합니다.
Console
클라이언트 IP 세션 어피니티를 사용 설정하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
백엔드를 클릭합니다.
my-tcp-lb(이 예시에서 만든 백엔드 서비스 이름)를 클릭하고 수정을 클릭합니다.
백엔드 서비스 세부정보 페이지에서 고급 구성을 클릭합니다.
세션 어피니티의 메뉴에서 클라이언트 IP를 선택합니다.
업데이트를 클릭합니다.
gcloud
다음 Google Cloud CLI 명령어를 사용해서 my-tcp-lb
백엔드 서비스를 업데이트하고 클라이언트 IP 세션 어피니티를 지정합니다.
gcloud compute backend-services update my-tcp-lb \ --global \ --session-affinity=CLIENT_IP
API
클라이언트 IP 세션 어피니티를 설정하려면 backendServices/patch
메서드에 PATCH
요청을 실행합니다.
PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-tcp-lb
{
"sessionAffinity": "CLIENT_IP"
}
연결 드레이닝 사용 설정
백엔드 서비스에서 연결 드레이닝을 사용 설정하면 트래픽을 제공하는 인스턴스가 종료되거나 수동으로 삭제되거나 자동 확장 처리를 통해 삭제되는 경우 사용자에 대한 방해를 최소화할 수 있습니다. 연결 드레이닝에 대한 자세한 내용은 연결 드레이닝 사용 설정 문서를 참조하세요.