이 문서에서는 대상 SSL 프록시와 VM 인스턴스 그룹 백엔드로 전역 외부 프록시 네트워크 부하 분산기를 설정하는 방법을 설명합니다. 시작하기 전에 외부 프록시 네트워크 부하 분산기 개요에서 이러한 부하 분산기의 작동 방식에 대한 자세한 내용을 읽어보세요.
설정 개요
이 예시에서는 리전 A 및 리전 B 등 두 리전에 있는 서비스에 외부 프록시 네트워크 부하 분산기를 설정하는 방법을 보여줍니다. 다음 항목을 구성합니다.
- 2개 리전에 분산된 4개의 인스턴스
- 인스턴스를 보관할 인스턴스 그룹
- 다음을 포함하는 백엔드 구성요소:
- 상태 점검 - 인스턴스 상태 모니터링에 사용
- 백엔드 서비스 - 인스턴스 그룹을 모니터링하고 구성된 사용량을 초과하지 못하도록 차단
- 백엔드 - 인스턴스 그룹 보관
- 다음을 포함하는 프런트엔드 구성요소:
- SSL 인증서 리소스. 자체 SSL 인증서를 제공하는 자체 관리형 인증서 또는 Google이 모든 도메인에 유효한 인증서를 발급하는 Google 관리 인증서를 사용할 수 있습니다. 자세한 내용은 SSL 인증서 유형을 참조하세요.
- 자체 SSL 인증서가 있는 SSL 프록시
- 외부 정적 IPv4 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
- 외부 정적 IPv6 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
- 부하 분산기 및 상태 점검기에서 인스턴스로 전송되는 트래픽을 허용하는 방화벽 규칙
- 필요한 경우 SSL 프록시 부하 분산기가 클라이언트와 협상하는 SSL 기능을 제어하는 SSL 정책
그런 다음 구성을 테스트합니다.
권한
이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나, 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.
작업 | 필요한 역할 |
---|---|
네트워크, 서브넷, 부하 분산기 구성요소 만들기 | 네트워크 관리자 |
방화벽 규칙 추가 및 삭제 | 보안 관리자 |
인스턴스 만들기 | Compute 인스턴스 관리자 |
자세한 내용은 다음 가이드를 참조하세요.
네트워크 및 서브넷 구성
예시 네트워크 및 서브넷을 만들려면 다음 단계를 따르세요.
콘솔
IPv4 및 IPv6 트래픽을 모두 지원하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
네트워크의 이름을 입력합니다.
선택사항: 이 네트워크에서 서브넷에 내부 IPv6 주소 범위를 구성하려면 다음 단계를 완료합니다.
- VPC 네트워크 ULA 내부 IPv6 범위에서 사용 설정됨을 선택합니다.
내부 IPv6 범위 할당에 대해 자동 또는 수동을 선택합니다.
수동을 선택한 경우
fd20::/20
범위 내에서/48
범위를 입력합니다. 범위가 사용 중인 경우 다른 범위를 제공하라는 메시지가 표시됩니다.
서브넷 생성 모드에서 커스텀을 선택합니다.
새 서브넷 섹션에서 다음 필드를 구성합니다.
- 이름 필드에 서브넷 이름을 입력합니다.
- 리전 필드에서 리전을 선택합니다.
- IP 스택 유형에 IPv4 및 IPv6(이중 스택)을 선택합니다.
IP 주소 범위 필드에 IP 주소 범위를 입력합니다. 이 범위는 서브넷의 기본 IPv4 범위입니다.
서브넷의 IPv4 주소 범위를 구성할 수 있지만 서브넷의 IPv6 주소 범위를 선택할 수는 없습니다. Google은 고정된 크기(
/64
)의 IPv6 CIDR 블록을 제공합니다.IPv6 액세스 유형에서 외부를 선택합니다.
완료를 클릭합니다.
다른 리전에 서브넷을 추가하려면 서브넷 추가를 클릭하고 이전 단계를 반복합니다.
만들기를 클릭합니다.
IPv4 트래픽만 지원하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름 필드에 네트워크의 이름을 입력합니다.
서브넷 생성 모드에서 커스텀을 선택합니다.
새 서브넷 섹션에서 다음을 구성합니다.
- 이름 필드에 서브넷 이름을 입력합니다.
- 리전 필드에서 리전을 선택합니다.
- IP 스택 유형에 IPv4(단일 스택)를 선택합니다.
- IP 주소 범위 필드에 서브넷의 기본 IPv4 범위를 입력합니다.
완료를 클릭합니다.
다른 리전에 서브넷을 추가하려면 서브넷 추가를 클릭하고 이전 단계를 반복합니다.
만들기를 클릭합니다.
gcloud
커스텀 모드 VPC 네트워크를 만듭니다.
gcloud compute networks create NETWORK \ [ --enable-ula-internal-ipv6 [ --internal-ipv6-range=ULA_IPV6_RANGE ]] \ --switch-to-custom-subnet-mode
네트워크 내에서 백엔드용 서브넷을 만듭니다.
IPv4 및 IPv6 트래픽의 경우 다음 명령어를 사용하여 서브넷을 업데이트합니다.
gcloud compute networks subnets create SUBNET \ --stack-type=IPV4_IPv6 \ --ipv6-access-type=EXTERNAL \ --network=NETWORK \ --region=REGION_A
gcloud compute networks subnets create SUBNET_B \ --stack-type=IPV4_IPv6 \ --ipv6-access-type=EXTERNAL \ --network=NETWORK \ --region=REGION_B
IPv4 트래픽 전용의 경우 다음 명령어를 사용합니다.
gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --stack-type=IPV4_ONLY \ --range=10.1.2.0/24 \ --region=REGION_A
gcloud compute networks subnets create SUBNET_B \ --stack-type=IPV4_ONLY \ --ipv6-access-type=EXTERNAL \ --network=NETWORK \ --region=REGION_B
다음을 바꿉니다.
NETWORK
: VPC 네트워크의 이름입니다.ULA_IPV6_RANGE
: 내부 IPv6 서브넷 범위에 대해 Google에서 사용하는fd20::/20
범위 내의/48
프리픽스입니다.--internal-ipv6-range
플래그를 사용하지 않으면 Google은 네트워크의/48
프리픽스를 선택합니다.SUBNET
: 서브넷의 이름입니다.
REGION_A
또는REGION_B
: 리전의 이름입니다.
인스턴스 및 인스턴스 그룹 구성
이 섹션에서는 인스턴스 및 인스턴스 그룹을 만든 다음 인스턴스 그룹에 인스턴스를 추가하는 방법을 보여줍니다. 일반적으로 프로덕션 시스템에서는 인스턴스 템플릿에 기반을 둔 관리형 인스턴스 그룹을 사용하지만 초기 테스트에서는 이렇게 설정하는 방식이 더 빠릅니다.
인스턴스 만들기
ssl-lb
태그를 포함하여 이러한 인스턴스를 만듭니다. 이 태그는 나중에 방화벽 규칙에서 사용합니다.
콘솔
인스턴스 만들기
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
인스턴스 만들기를 클릭합니다.
이름을
vm-a1
로 설정합니다.영역을 ZONE_A로 설정합니다.
고급 옵션을 클릭합니다.
네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그 필드에
ssl-lb
및allow-health-check-ipv6
을 입력합니다.
- 네트워크 태그 필드에
네트워크 인터페이스 섹션에서 수정을 클릭하고 다음과 같이 변경합니다.
- 네트워크를 선택합니다.
서브넷을 선택합니다.
IP 스택 유형 필드에서 IPv4 및 IPv6(이중 스택)을 선택합니다.
완료를 클릭합니다.
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl 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 a2ensite default-ssl sudo a2enmod ssl sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
동일한 설정으로
vm-b1
을 만듭니다. 단, 영역을ZONE_B
로 설정하고 시작 스크립트를 다음과 같이 설정합니다.sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
동일한 설정으로
vm-b2
를 만듭니다. 단, 영역을ZONE_B
로 설정하고 시작 스크립트를 다음과 같이 설정합니다.sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl 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 ssl-lb \ --zone ZONE_A \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo 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=ssl-lb \ --zone=ZONE_A \ --metadata=startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo 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=ssl-lb \ --zone=ZONE_B \ --metadata=startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo 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=ssl-lb \ --zone=ZONE_B \ --metadata=startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html EOF"
각 영역별로 인스턴스 그룹을 만들고 인스턴스 추가
콘솔
Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
인스턴스 그룹 만들기를 클릭합니다.
이름을
instance-group-a
로 설정합니다.영역을
ZONE_A
로 설정합니다.포트 매핑에서 포트 추가를 클릭합니다. 부하 분산기는 이름이 지정된 포트를 통해 인스턴스 그룹으로 트래픽을 전송합니다. 이름이 지정된 포트를 만들어 수신 트래픽을 특정 포트 번호로 매핑합니다.
- 포트 이름에
ssl-lb
를, 포트 번호에443
을 입력합니다.
- 포트 이름에
인스턴스 정의에서 기존 인스턴스 선택을 클릭합니다.
VM 인스턴스에서
vm-a1
및vm-a2
를 선택합니다.다른 설정은 그대로 둡니다.
만들기를 클릭합니다.
단계를 반복하되 다음과 같이 설정합니다.
- 이름:
instance-group-b
- 영역:
ZONE_B
- 포트 이름:
ssl-lb
및 포트 번호:443
- 인스턴스: vm-b1 및 vm-b2.
- 이름:
인스턴스가 2개인 인스턴스 그룹이 2개 있는지 확인합니다.
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=ssl-lb:443 \ --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
instance-group-b
인스턴스 그룹을 만듭니다.gcloud compute instance-groups unmanaged create instance-group-b --zone ZONE_B
인스턴스 그룹에 이름이 지정된 포트를 설정합니다.
gcloud compute instance-groups set-named-ports instance-group-b \ --named-ports=ssl-lb:443 \ --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개의 리전에 각각 2개의 인스턴스가 있는 인스턴스 그룹이 만들어졌습니다.
SSL 부하 분산기의 방화벽 규칙 만들기
부하 분산기 및 상태 점검기에서 인스턴스로 전송되는 트래픽을 허용하도록 방화벽을 구성합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭합니다.
이름 필드에
allow-ssl-lb-and-health
를 입력합니다.네트워크를 선택합니다.
대상에서 지정된 대상 태그를 선택합니다.
대상 태그를
ssl-lb
로 설정합니다.소스 필터를 IPv4 범위로 설정합니다.
소스 IPv4 범위를
130.211.0.0/22
및35.191.0.0/16
으로 설정합니다.프로토콜 및 포트에서 지정된 프로토콜 및 포트를
tcp:443
으로 설정합니다.만들기를 클릭합니다.
gcloud
gcloud compute firewall-rules create allow-ssl-lb-and-health \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=ssl-lb \ --allow=tcp:443
Google 관리 인증서를 사용하는 경우 인증서 리소스의 상태가 ACTIVE인지 확인합니다. 자세한 내용은 Google 관리 SSL 인증서 리소스 상태를 참조하세요.
gcloud compute ssl-certificates list
IPv6 상태 점검 방화벽 규칙 만들기
부하 분산 중인 인스턴스에 적용할 수 있고 Google Cloud 상태 점검 시스템(2600:2d00:1:b029::/64
)의 트래픽을 허용하는 인그레스 규칙이 있는지 확인합니다. 이 예시에서는 allow-health-check-ipv6
대상 태그를 사용하여 방화벽 규칙이 적용되는 VM 인스턴스를 식별합니다.
이 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 IPv6 트래픽을 차단합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
IPv6 서브넷 트래픽을 허용하려면 방화벽 규칙 만들기를 다시 클릭하고 다음 정보를 입력합니다.
- 이름:
fw-allow-lb-access-ipv6
- 네트워크:
NETWORK
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 대상: 지정된 대상 태그
- 대상 태그 필드에
allow-health-check-ipv6
을 입력합니다. - 소스 필터: IPv6 범위
- 소스 IPv6 범위:
2600:2d00:1:b029::/64
,2600:2d00:1:1::/64
- 프로토콜 및 포트: 모두 허용
- 이름:
만들기를 클릭합니다.
gcloud
fw-allow-lb-access-ipv6
방화벽 규칙을 만들어 서브넷과의 통신을 허용합니다.
gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=NETWORK \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64,2600:2d00:1:1::/64 \ --rules=all
부하 분산기 구성
콘솔
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에 네트워크 부하 분산기(TCP/UDP/SSL)를 선택하고 다음을 클릭합니다.
- 프록시 또는 패스 스루에 프록시 부하 분산기를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에 공개(외부)를 선택하고 다음을 클릭합니다.
- 전역 또는 단일 리전 배포에서 전역 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 부하 분산기 생성에서 전역 외부 프록시 네트워크 부하 분산기를 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
기본 구성
이름을 my-ssl-lb
로 설정합니다.
백엔드 구성
- 백엔드 구성을 클릭합니다.
- 백엔드 유형에서 인스턴스 그룹을 선택합니다.
- 프로토콜을 SSL로 설정합니다.
- IP 주소 선택 정책 목록에서 IPv6 우선 사용을 선택합니다.
- 이름이 지정된 포트에
ssl-lb
를 입력합니다. - 제한 시간에 기본값을 그대로 둡니다.
- 백엔드 유형을 인스턴스 그룹으로 설정된 상태로 둡니다.
- 첫 번째 백엔드를 구성합니다.
- 새 백엔드에서 인스턴스 그룹
instance-group-a
을 선택합니다. - 포트 번호를
443
으로 설정합니다. - 나머지 기본 값을 유지합니다.
- 새 백엔드에서 인스턴스 그룹
- 두 번째 백엔드 구성:
- 백엔드 추가를 클릭합니다.
- 인스턴스 그룹
instance-group-b
를 선택합니다. - 포트 번호를
443
으로 설정합니다. - 완료를 클릭합니다.
- 상태 점검을 구성합니다.
- 상태 점검에서 상태 점검 만들기를 선택합니다.
- 상태 점검 이름을
my-ssl-health-check
로 설정합니다. - 프로토콜에서 SSL을 선택합니다.
- 나머지 기본 값을 유지합니다.
- 저장 후 계속을 클릭합니다.
- Google Cloud 콘솔에서 백엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 모든 단계를 완료했는지 다시 확인합니다.
프런트엔드 구성
- 프런트엔드 구성을 클릭합니다.
-
my-ssl-lb-forwarding-rule
의 이름을 입력합니다. - 프로토콜에서 SSL을 선택합니다.
- IP 주소에서 IP 주소 만들기를 선택합니다.
-
ssl-lb-static-ipv4
의 이름을 입력합니다. - 예약을 클릭합니다.
-
- 인증서에서 새 인증서 만들기를 선택합니다.
my-ssl-cert
의 이름을 입력합니다.- 인증서 업로드를 선택한 경우 다음 단계를 완료합니다.
- 인증서를 붙여넣거나 업로드를 클릭하여 인증서 파일로 이동합니다.
- 비공개 키를 붙여넣거나 업로드를 클릭하여 비공개 키 파일로 이동합니다.
- Google 관리 인증서 만들기를 선택한 경우 도메인을 입력합니다.
- 추가 도메인을 입력하려면 도메인 추가를 클릭합니다.
- 만들기를 클릭합니다.
- 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 추가 인증서를 클릭합니다. 그런 다음 인증서 메뉴에서 다른 인증서를 선택하거나 새 인증서 만들기를 클릭하고 위 안내를 따릅니다.
- (선택사항) SSL 정책을 만들려면 다음 안내를 따르세요.
- SSL 정책에서 정책 만들기를 선택합니다.
my-ssl-policy
의 이름을 입력합니다.- 최소 TLS 버전에 TLS 1.0을 선택합니다.
- 프로필에 최신을 선택합니다. 사용 설정된 기능과 사용 중지된 기능이 표시됩니다.
- 저장을 클릭합니다.
- 선택사항: 프록시 프로토콜을 사용 설정합니다.
- 완료를 클릭합니다.
- Google Cloud 콘솔에서 프런트엔드 구성 옆에 초록색 체크표시가 있는지 확인합니다. 없으면 이전 단계를 모두 완료했는지 다시 확인합니다.
- 완료를 클릭합니다.
- 첫 번째 전달 규칙 추가:
검토 및 완료
- 검토 및 완료를 클릭합니다.
- 부하 분산기 구성 설정을 검토합니다.
- 선택사항: 부하 분산기를 만드는 데 사용되는 REST API 요청을 보려면 상응하는 코드를 클릭합니다.
- 만들기를 클릭합니다.
gcloud
- 상태 점검을 만듭니다.
gcloud compute health-checks create ssl my-ssl-health-check --port=443
- 백엔드 서비스를 만듭니다.
gcloud beta compute backend-services create my-ssl-lb \ --load-balancing-scheme EXTERNAL_MANAGED \ --global-health-checks \ --protocol=SSL \ --port-name=ssl-lb \ --ip-address-selection-policy=PREFER_IPV6 \ --health-checks=my-ssl-health-check \ --timeout=5m \ --global
또는
--protocol=TCP
를 사용하여 부하 분산기에서 인스턴스로 암호화되지 않은 통신을 구성할 수 있습니다. 백엔드 서비스에 인스턴스 그룹을 추가합니다.
gcloud compute backend-services add-backend my-ssl-lb \ --instance-group=instance-group-a \ --instance-group-zone=ZONE_A \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --global
gcloud compute backend-services add-backend my-ssl-lb \ --instance-group=instance-group-b \ --instance-group-zone=ZONE_B \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --global
- SSL 인증서 리소스를 구성합니다.
자체 관리형 인증서를 사용 중인 경우 업로드할 SSL 인증서가 최소 하나 이상 있어야 합니다. 없으면 SSL 인증서 개요를 참조하세요. 여러 SSL 인증서를 사용하는 경우에는 인증서를 한 번에 하나씩 만들어야 합니다.
자체 관리형 SSL 인증서를 사용하고 있으며 비공개 키와 서명된 인증서가 없는 경우 테스트용으로 자체 서명된 인증서를 만들어 사용할 수 있습니다.
자체 관리형 SSL 인증서 리소스를 만들려면 다음을 사용하세요.
gcloud compute ssl-certificates create my-ssl-cert \ --certificate=CRT_FILE_PATH \ --private-key=KEY_FILE_PATH
Google 관리형 SSL 인증서 리소스를 만드는 방법은 다음과 같습니다.
gcloud compute ssl-certificates create www-ssl-cert \ --domains=DOMAIN_1,DOMAIN_2
- 대상 SSL 프록시를 구성합니다.
외부 프록시 네트워크 부하 분산기는 1~15개의 SSL 인증서가 있는 대상 SSL 프록시의 생성을 지원합니다. 이 명령어를 실행하기 전에 각 인증서에 SSL 인증서 리소스를 만들어야 합니다.
프록시 헤더를 사용 설정하려면
none
대신PROXY_V1
으로 설정합니다. 선택사항으로 SSL 정책을 대상 프록시에 연결할 수 있습니다. 먼저 정책을 만듭니다.gcloud compute ssl-policies create my-ssl-policy \ --profile=MODERN \ --min-tls-version=1.0
그런 다음 정책을 대상 프록시에 연결합니다.
gcloud beta compute target-ssl-proxies create my-ssl-lb-target-proxy \ --backend-service=my-ssl-lb \ --ssl-certificates=[SSL_CERT_1][,[SSL_CERT_2],...] \ --ssl-policy=my-ssl-policy \ --proxy-header=NONE
- 전역 고정 IP 주소를 예약합니다.
고객은 이러한 IP 주소를 사용하여 부하 분산된 서비스에 액세스합니다.
gcloud compute addresses create ssl-lb-static-ipv4 \ --ip-version=IPV4 \ --global
gcloud compute addresses create ssl-lb-static-ipv6 \ --ip-version=IPV6 \ --global
- 전역 전달 규칙을 구성합니다.
대상 프록시와 연결된 전역 전달 규칙을 만듭니다. LB_STATIC_IP 및 LB_STATIC_IPV6을 전역 고정 IP 주소 예약에서 생성한 IP 주소로 바꿉니다.
gcloud beta compute forwarding-rules create my-ssl-lb-forwarding-rule \ --load-balancing-scheme EXTERNAL_MANAGED \ --global \ --target-ssl-proxy=my-ssl-lb-target-proxy \ --address=LB_STATIC_IP \ --ports=443
부하 분산기에 도메인 연결
부하 분산기를 만든 후 부하 분산기와 연결된 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 제공업체로 사용하는 경우 레코드 추가, 수정, 삭제를 참조하세요.
부하 분산기 테스트
웹브라우저에서 HTTPS를 사용하여 고정 IP 주소에 연결합니다. 이 테스트 설정에서 인스턴스는 자체 서명된 인증서를 사용합니다. 따라서 처음으로 페이지에 액세스할 때 브라우저에 경고가 표시됩니다. 실제 페이지를 보려면 경고를 클릭하세요. IP_ADDRESS를 이전에 만든 IPv4 또는 IPv6 주소로 바꿉니다.
https://IP_ADDRESS
가장 가까운 리전의 호스트 중 하나가 표시됩니다. 해당 지역의 다른 인스턴스가 표시될 때까지 페이지를 새로 고치세요. 다른 리전의 인스턴스를 보려면 가장 가까운 리전의 인스턴스를 중지하세요.
또는 로컬 머신의 명령줄에서 curl
을 사용할 수 있습니다.
SSL 프록시에서 자체 서명된 인증서를 사용하는 경우 -k
도 지정해야 합니다. curl -k
옵션을 사용하면 자체 서명 인증서가 있거나 아예 인증서가 없어도 curl이 작동합니다. 일반 인증서가 있으면 해당 매개변수를 삭제할 수 있습니다. 자체 사이트를 테스트할 때는 -k
매개변수만 사용해야 합니다. 일반적인 상황에서는 유효한 인증서가 중요한 보안 수단이므로 인증서 경고를 무시하면 안 됩니다.
IP_ADDRESS를 이전에 만든 IPv4 또는 IPv6 주소로 바꿉니다.
curl -k https://IP_ADDRESS
부하 분산기에 도달할 수 없는 경우 설정 문제 해결에 설명된 단계를 시도하세요.
추가 구성 옵션
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
클라이언트 연결 정보를 유지하기 위한 프록시 프로토콜
프록시 네트워크 부하 분산기는 클라이언트의 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-ssl-proxies update TARGET_PROXY_NAME \ --proxy-header=[NONE | PROXY_V1]
세션 어피니티 구성
이 절차에서는 백엔드 서비스가 클라이언트 IP 어피니티를 사용하도록 예시 SSL 프록시 부하 분산기의 백엔드 서비스를 업데이트하는 방법을 보여줍니다.
클라이언트 IP 어피니티가 사용 설정되면 부하 분산기는 클라이언트의 IP 주소 및 부하 분산기의 IP 주소(외부 전달 규칙의 외부 IP 주소)에서 생성된 해시를 기반으로 특정 클라이언트의 요청을 동일한 백엔드 VM에 전달합니다.
콘솔
클라이언트 IP 세션 어피니티를 사용 설정하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
백엔드를 클릭합니다.
my-ssl-lb(이 예시에서 만든 백엔드 서비스 이름)를 클릭하고 수정을 클릭합니다.
백엔드 서비스 세부정보 페이지에서 고급 구성을 클릭합니다.
세션 어피니티의 메뉴에서 클라이언트 IP를 선택합니다.
업데이트를 클릭합니다.
gcloud
다음 명령어를 사용하여 클라이언트 IP 세션 어피니티를 지정하여 my-ssl-lb
백엔드 서비스를 업데이트합니다.
gcloud compute backend-services update my-ssl-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-ssl-lb
{
"sessionAffinity": "CLIENT_IP"
}
연결 드레이닝 사용 설정
백엔드 서비스에서 연결 드레이닝을 사용 설정하면 트래픽을 제공하는 인스턴스가 종료되거나 수동으로 삭제되거나 자동 확장 처리를 통해 삭제되는 경우 사용자에 대한 방해를 최소화할 수 있습니다. 연결 드레이닝에 대해 자세히 알아보려면 연결 드레이닝 사용 설정 문서를 참조하세요.
다음 단계
- 프록시 네트워크 부하 분산기를 IPv6로 변환
- 프록시 네트워크 부하 분산기 로깅 및 모니터링
- SSL 및 TLS 프로토콜을 위한 SSL 정책
- SSL 및 TLS 프로토콜에 SSL 정책 사용
- 이중 스택 백엔드로 변환
- 부하 분산 설정 삭제