이 문서에서는 정적 콘텐츠 요청을 Cloud Storage 버킷으로 라우팅하도록 리전 외부 애플리케이션 부하 분산기를 만드는 방법을 보여줍니다.
시작하기 전에
설정이 다음 기본 요건을 충족하는지 확인합니다.
Google Cloud CLI 설치
이 가이드의 일부 지침은 Google Cloud CLI를 사용해서만 수행할 수 있습니다. 설치하려면 gcloud CLI 설치를 참고하세요.
API 및 gcloud CLI 참조 문서에서 부하 분산과 관련된 명령어를 확인할 수 있습니다.
필요한 역할
프로젝트 생성자에게는 소유자 역할(roles/owner)이 부여됩니다. 기본적으로 소유자 역할 (roles/owner) 또는 편집자 역할 (roles/editor)에는 이 문서를 따르는 데 필요한 권한이 포함됩니다.
프로젝트 생성자가 아니면 프로젝트에서 적합한 주 구성원에 대해 필수 권한을 부여해야 합니다. 예를 들어 주 구성원은 Google 계정 (최종 사용자)이거나 서비스 계정일 수 있습니다.
Cloud Storage 버킷 및 네트워크 리소스를 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
VPC 네트워크 및 부하 분산 구성요소 만들기:
Compute 네트워크 관리자 역할 (
roles/compute.networkAdmin) -
Cloud Storage 버킷 만들기:
스토리지 객체 관리자 역할 (
roles/storage.objectAdmin)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
Cloud Load Balancing의 역할 및 권한에 대한 자세한 내용은 역할 및 권한을 참고하세요. 전달 규칙에 대한 조건부 권한 부여로 IAM 정책을 정의하는 방법에 대한 자세한 내용은 전달 규칙에 대한 IAM 조건을 참고하세요.
SSL 인증서 리소스 설정
요청 및 응답 프로토콜로 HTTPS를 사용하는 리전 외부 애플리케이션 부하 분산기의 경우 Compute Engine SSL 인증서 또는 인증서 관리자 인증서를 사용하여 SSL 인증서 리소스를 만들 수 있습니다.
이 예시에서는 다음 문서 중 하나에 설명된 대로 인증서 관리자를 사용하여 SSL 인증서 리소스를 만듭니다.
- DNS 승인을 사용하여 리전별 Google 관리형 인증서 배포
- Certificate Authority Service로 리전별 Google 관리형 인증서 배포
- 리전별 자체 관리형 인증서 배포
인증서를 만든 후 인증서를 HTTPS 대상 프록시에 연결할 수 있습니다.
Google 관리형 인증서를 사용하는 것이 좋습니다.
제한사항
리전 외부 애플리케이션 부하 분산기에 백엔드로 제공할 때는 다음 제한사항이 Cloud Storage 버킷에 적용됩니다.
비공개 버킷 액세스는 지원되지 않으므로 인터넷을 통해 백엔드 버킷에 공개적으로 액세스할 수 있어야 합니다.
서명된 URL은 지원되지 않습니다.
리전별 외부 애플리케이션 부하 분산기에 대해 백엔드 버킷을 만들 때 Cloud CDN 통합을 사용할 수 없습니다.
백엔드 버킷 액세스를 위해 리전 외부 애플리케이션 부하 분산기를 사용할 때는 HTTP
GET메서드만 지원됩니다. 버킷에서 콘텐츠를 다운로드할 수 있지만 리전별 외부 애플리케이션 부하 분산기를 통해 버킷에 콘텐츠를 업로드하는 기능은 사용할 수 없습니다.리전 외부 애플리케이션 부하 분산기의 경우 Cloud Storage 버킷은 부하 분산기가 구성된 리전에서만 지원됩니다. 이중 리전 또는 멀티 리전 버킷은 지원되지 않습니다.
설정 개요
다음 다이어그램은 부하 분산기와 동일한 리전에 있는 백엔드 버킷이 있는 리전 외부 애플리케이션 부하 분산기를 보여줍니다.
리전 외부 애플리케이션 부하 분산기의 전달 규칙에 외부 IP 주소가 있습니다.
다음 섹션에서는 앞의 다이어그램에 표시된 대로 다양한 리소스를 구성합니다.
네트워크 및 프록시 전용 서브넷 구성
이 예시에서는 다음 VPC 네트워크, 리전, 프록시 전용 서브넷을 사용합니다.
네트워크. 네트워크는 커스텀 모드 VPC 네트워크이며 이름은
lb-network입니다.Envoy 프록시의 서브넷.
us-east1리전에 있는proxy-only-subnet-us이라는 이름의 서브넷은 기본 IP 범위로10.129.0.0/23를 사용합니다.
커스텀 모드 VPC 네트워크 구성
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름에
lb-network를 입력합니다.만들기를 클릭합니다.
gcloud
gcloud compute networks create명령어를 사용하여lb-network라는 커스텀 VPC 네트워크를 만듭니다.gcloud compute networks create lb-network --subnet-mode=custom
프록시 전용 서브넷 구성
프록시 전용 서브넷은 Google Cloud 에서 사용자를 대신하여 Envoy 프록시를 실행하는 데 사용하는 IP 주소 집합을 제공합니다. 프록시는 클라이언트의 연결을 종료하고 백엔드에 새 연결을 만듭니다.
이 프록시 전용 서브넷은 VPC 네트워크와 동일한 리전에 있는 모든 Envoy 기반 리전 부하 분산기에서 사용됩니다. 네트워크당 리전별 활성 프록시 전용 서브넷은 용도별로 하나만 있을 수 있습니다.
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
만든 VPC 네트워크의 이름을 클릭합니다.
서브넷 탭에서 서브넷 추가를 클릭합니다.
다음 정보를 입력합니다.
- 이름:
proxy-only-subnet-us - 리전:
us-east1 - 용도: 리전별 관리형 프록시
- IP 주소 범위:
10.129.0.0/23
- 이름:
추가를 클릭합니다.
gcloud
gcloud compute networks subnets create명령어를 사용하여us-east1리전에 프록시 전용 서브넷을 만듭니다.gcloud compute networks subnets create proxy-only-subnet-us \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-east1 \ --network=lb-network \ --range=10.129.0.0/23
Cloud Storage 버킷 구성
Cloud Storage 버킷을 구성하는 프로세스는 다음과 같습니다.
- 버킷을 만듭니다.
- 버킷에 콘텐츠를 복사합니다.
Cloud Storage 버킷 만들기
이 예시에서는 us-east1 리전에 Cloud Storage 버킷 두 개를 만듭니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
만들기를 클릭합니다.
시작하기 섹션에서 이름 지정 가이드라인에 따라 전역적으로 고유한 이름을 입력합니다.
데이터 저장 위치 선택을 클릭합니다.
위치 유형을 리전으로 설정합니다.
리전 목록에서 us-east1을 선택합니다.
만들기를 클릭합니다.
버킷을 클릭하여 Cloud Storage 버킷 페이지로 돌아갑니다. 다음 안내를 따라 us-east1 리전에 두 번째 버킷을 만듭니다.
gcloud
gcloud storage buckets create명령어를 사용하여us-east1리전에 첫 번째 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-accessgcloud storage buckets create명령어를 사용하여us-east1리전에 두 번째 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access
BUCKET1_NAME 및 BUCKET2_NAME 변수를 Cloud Storage 버킷 이름으로 바꿉니다.
Cloud Storage 버킷에 그래픽 파일 복사
설정을 테스트하려면 공개 Cloud Storage 버킷의 그래픽 파일을 자체 Cloud Storage 버킷으로 복사합니다.
Cloud Shell에서 다음 명령어를 실행하여 버킷 이름 변수를 고유한 Cloud Storage 버킷 이름으로 바꿉니다.
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
Cloud Storage 버킷을 공개적으로 읽을 수 있도록 설정
공개 인터넷에서 모든 사람이 버킷의 모든 객체를 읽을 수 있도록 하려면 allUsers 주 구성원에 스토리지 객체 뷰어 역할(roles/storage.objectViewer)을 부여합니다.
콘솔
모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 버킷마다 다음 절차를 반복합니다.
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
버킷 목록에서 공개하려는 버킷의 이름을 클릭합니다.
권한 탭을 선택합니다.
권한 섹션에서 액세스 권한 부여 버튼을 클릭합니다. 액세스 권한 부여 대화상자가 나타납니다.
새 주 구성원 필드에
allUsers를 입력합니다.역할 선택 필드에서 필터 상자에
Storage Object Viewer를 입력하고 필터링된 결과에서 스토리지 객체 뷰어를 선택합니다.저장을 클릭합니다.
공개 액세스 허용을 클릭합니다.
gcloud
모든 사용자에게 버킷의 객체 보기 권한을 부여하려면 buckets add-iam-policy-binding 명령어를 실행합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME \
--member=allUsers \
--role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME \ --member=allUsers \ --role=roles/storage.objectViewer
부하 분산기의 IP 주소 예약
부하 분산기의 전달 규칙에 대해 고정 외부 IP 주소를 예약합니다.
콘솔
Google Cloud 콘솔에서 고정 주소 예약 페이지로 이동합니다.
새 주소의 이름을 선택합니다.
IP 버전에서 IPv4를 선택합니다.
유형에서 리전을 선택합니다.
리전으로 us-east1을 선택합니다.
연결 대상 옵션을 없음으로 설정된 상태로 둡니다. 부하 분산기를 만들면 이 IP 주소가 부하 분산기의 전달 규칙에 연결됩니다.
예약을 클릭하여 IP 주소를 예약합니다.
gcloud
고정 외부 IP 주소를 예약하려면
gcloud compute addresses create명령어를 사용합니다.gcloud compute addresses create ADDRESS_NAME \ --region=us-east1
다음을 바꿉니다.
ADDRESS_NAME: 주소의 이름입니다.
결과를 보려면
gcloud compute addresses describe명령어를 사용하세요.gcloud compute addresses describe ADDRESS_NAME
반환된 IP 주소는 다음 섹션에서 RESERVED_IP_ADDRESS로 참조됩니다.
백엔드 버킷으로 부하 분산기 구성
이 섹션에서는 리전 외부 애플리케이션 부하 분산기에 대해 다음 리소스를 만드는 방법을 보여줍니다.
- 백엔드 버킷 2개. 백엔드 버킷은 앞에서 만든 Cloud Storage 버킷에 대한 래퍼로 작동합니다.
- URL 맵
- 대상 프록시
- 리전 IP 주소가 있는 전달 규칙 전달 규칙에 외부 IP 주소가 있습니다.
이 예시에서는 클라이언트와 부하 분산기 간의 요청 및 응답 프로토콜로 HTTP 또는 HTTPS를 사용할 수 있습니다. HTTPS 부하 분산기를 만들려면 부하 분산기의 프런트엔드에 SSL 인증서 리소스를 추가해야 합니다.
gcloud CLI를 사용하여 앞에서 언급한 부하 분산 구성요소를 만들려면 다음 단계를 수행합니다.
gcloud beta compute backend-buckets create명령어를 사용하여us-east1리전에 백엔드 버킷 두 개를 만듭니다. 백엔드 버킷에는EXTERNAL_MANAGED의 부하 분산 스키마가 포함됩니다.gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1gcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1BUCKET1_NAME및BUCKET2_NAME변수를 Cloud Storage 버킷 이름으로 바꿉니다.gcloud beta compute url-maps create명령어를 사용해서 들어오는 요청을 백엔드 버킷으로 라우팅하는 URL 맵을 만듭니다.gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1URL_MAP_NAME변수를 URL 맵의 이름으로 바꿉니다.gcloud beta compute url-maps add-path-matcher명령어를 사용해서 URL 맵의 호스트 및 경로 규칙을 구성합니다.이 예시에서 기본 백엔드 버킷은
backend-bucket-cats이며, 그 안에 있는 모든 경로를 처리합니다. 하지만http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg를 대상으로 하는 모든 요청에는backend-bucket-dogs백엔드가 사용됩니다. 예를 들어/love-to-fetch/폴더도 기본 백엔드(backend-bucket-cats) 내에 있으면/love-to-fetch/*에 대한 특정 경로 규칙이 있기 때문에 부하 분산기에서backend-bucket-dogs백엔드가 우선적으로 사용됩니다.gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \ --default-backend-bucket=backend-bucket-catsURL_MAP_NAME변수를 URL 맵의 이름으로 바꿉니다.gcloud compute target-http-proxies create명령어를 사용하여 대상 프록시를 만듭니다.HTTP 트래픽의 경우 대상 HTTP 프록시를 만들어 요청을 URL 맵으로 라우팅합니다.
gcloud compute target-http-proxies create http-proxy \ --url-map=URL_MAP_NAME \ --region=us-east1URL_MAP_NAME변수를 URL 맵의 이름으로 바꿉니다.HTTPS 트래픽의 경우 대상 HTTPS 프록시를 만들어 요청을 URL 맵으로 라우팅합니다. 프록시는 HTTPS 부하 분산기에 대해 SSL 인증서를 포함하는 부하 분산기의 일부입니다. 인증서를 만든 후 인증서를 HTTPS 대상 프록시에 연결할 수 있습니다.
인증서 관리자 인증서를 연결하려면 다음 명령어를 실행합니다.
gcloud compute target-https-proxies create https-proxy \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1다음을 바꿉니다.
URL_MAP_NAME: URL 맵의 이름CERTIFICATE_NAME: 인증서 관리자를 사용하여 만든 SSL 인증서의 이름입니다.
gcloud compute forwarding-rules create명령어를 사용하여us-east1리전의 IP 주소로 전달 규칙을 만듭니다.HTTP 트래픽의 경우 수신 요청을 HTTP 대상 프록시로 라우팅하는 리전 전달 규칙을 만듭니다.
gcloud compute forwarding-rules create http-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --region=us-east1 \ --target-http-proxy=http-proxy \ --target-http-proxy-region=us-east1HTTPS 트래픽의 경우 리전 전달 규칙을 만들어 수신 요청을 HTTPS 대상 프록시로 라우팅합니다.
gcloud compute forwarding-rules create https-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=https-proxy \ --target-https-proxy-region=us-east1
부하 분산기로 HTTP 요청 전송
이제 부하 분산 서비스가 실행 중이므로 부하 분산기의 전달 규칙에 요청을 보낼 수 있습니다.
us-east1리전에 있는 부하 분산기의 전달 규칙(http-fw-rule)에 해당하는 IP 주소를 가져옵니다.gcloud compute forwarding-rules describe http-fw-rule \ --region=us-east1반환된 IP 주소를 복사하여 다음 단계에서
FORWARDING_RULE_IP_ADDRESS로 사용합니다.curl을 사용하여 전달 규칙의 가상 IP 주소 (VIP)에 HTTP 요청을 보냅니다.
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg