이 문서에서는 정적 콘텐츠 요청을 Cloud Storage 버킷으로 라우팅하기 위해 외부 애플리케이션 부하 분산기를 만드는 방법을 보여줍니다. 백엔드 버킷으로 부하 분산기를 구성하면 /love-to-fetch
로 시작하는 URL 경로 요청은 us-east1
Cloud Storage 버킷으로 전송되고 다른 모든 요청은 사용자의 리전에 관계없이 europe-north1
Cloud Storage 버킷으로 전송됩니다.
백엔드가 HTTP(S)를 통해 동적 콘텐츠를 제공하는 경우 백엔드 버킷 대신 백엔드 서비스를 사용하는 것이 좋습니다.
기존 애플리케이션 부하 분산기를 사용하는 경우 전역 외부 애플리케이션 부하 분산기를 사용하여 새 배포를 계획할 때 이전 개요를 검토하세요.Cloud Storage 버킷을 부하 분산기 백엔드로 사용
외부 애플리케이션 부하 분산기는 URL 맵을 사용하여 지정된 URL 경로에서 해당 백엔드로 트래픽을 전달합니다.
다음 다이어그램에서 부하 분산기는 /love-to-fetch/
의 경로를 사용하여 us-east1
리전에 있는 Cloud Storage 버킷으로 트래픽을 전송합니다. 다른 모든 요청은 europe-north1
리전에 있는 Cloud Storage 버킷으로 이동합니다.
기본적으로 Cloud Storage는 Cloud CDN에서 사용하는 동일한 캐시를 사용합니다. 백엔드 버킷에서 Cloud CDN을 사용 설정하면 콘텐츠에 Cloud CDN 제어를 사용할 수 있습니다.
예를 들어 Cloud CDN 제어에는 캐시 모드, 서명된 URL, 무효화가 포함됩니다. Cloud CDN을 사용하면 대용량 콘텐츠(10MB 초과)를 캐시할 수도 있습니다. 백엔드 버킷에서 Cloud CDN을 사용하지 않으면, Cloud Storage 메타데이터에서 설정한 대로 더 작은 콘텐츠의 캐싱을 제어하는 데 원본 'Cache-Control
' 헤더만 사용할 수 있습니다.
시작하기 전에
설정이 다음 기본 요건을 충족하는지 확인합니다. gcloud storage
유틸리티를 사용하는 경우 gcloud 도구로 객체 스토리지 탐색의 안내에 따라 설치할 수 있습니다.
기본 프로젝트 설정
콘솔
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
gcloud
gcloud config set project PROJECT_ID
PROJECT_ID
를 이 가이드에 사용 중인 프로젝트로 바꿉니다.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
권한
이 가이드를 따르려면 프로젝트에 Cloud Storage 버킷과 부하 분산기를 만들어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나 다음 Compute Engine IAM 역할을 보유해야 합니다.
작업 | 필요한 역할 |
---|---|
부하 분산기 구성요소 만들기 | 네트워크 관리자 |
Cloud Storage 버킷 만들기 | 스토리지 객체 관리자 |
자세한 내용은 다음 가이드를 참조하세요.
SSL 인증서 리소스 설정
HTTPS 부하 분산기의 경우 다음 문서에 설명된 대로 SSL 인증서 리소스를 만듭니다.
Google 관리형 인증서를 사용하는 것이 좋습니다.
이 예시에서는 이름이 www-ssl-cert
인 SSL 인증서 리소스가 이미 있다고 가정합니다.
Cloud Storage 버킷 및 콘텐츠 준비
Cloud Storage 버킷을 준비하는 프로세스는 다음과 같습니다.
버킷을 만듭니다.
버킷에 콘텐츠를 복사합니다.
버킷에 공개 액세스를 제공합니다.
Cloud Storage 버킷 만들기
이 예시에서는 부하 분산기가 액세스할 수 있는 Cloud Storage 버킷 두 개를 만듭니다. 프로덕션 배포의 경우 여러 Google Cloud 리전에 객체를 자동으로 복제하는 멀티 리전 버킷을 선택하는 것이 좋습니다. 이렇게 하면 콘텐츠의 가용성이 향상되고 애플리케이션 전체의 내결함성이 개선됩니다.
만든 Cloud Storage 버킷의 이름은 나중에 사용되니 기록해 둡니다. 이 가이드에서는 BUCKET_1_NAME 및 BUCKET_2_NAME이라고 합니다.
콘솔
Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
버킷 만들기를 클릭합니다.
버킷 이름 지정 상자에 이름 지정 가이드라인에 따라 전역적으로 고유한 이름을 입력합니다.
데이터 저장 위치 선택을 클릭합니다.
위치 유형을 리전으로 설정합니다.
위치를 europe-north1로 설정합니다. 이 가이드에서는 BUCKET_1_NAME입니다.
만들기를 클릭합니다.
버킷을 클릭하여 Cloud Storage 버킷 페이지로 돌아갑니다. 다음 안내를 따라 두 번째 버킷을 만들되, 위치를 us-east1로 설정합니다. 이 가이드에서는 BUCKET_2_NAME입니다.
gcloud
gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
BUCKET_1_NAME
및 BUCKET_2_NAME
을 만들려는 버킷의 이름으로 바꿉니다.
Terraform
버킷을 만들려면 google_storage_bucket
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
Cloud Storage 버킷으로 콘텐츠 전송
나중에 설정을 테스트할 수 있도록 다음 이미지를 공개 Cloud Storage 버킷에서 자체 Cloud Storage 버킷으로 복사합니다.
gcloud
Cloud Shell 활성화를 클릭합니다.
Cloud Shell에서 다음 명령어를 실행하여 버킷 이름 변수를 Cloud Storage 버킷 이름으로 바꿉니다.
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
Terraform
항목을 버킷에 복사하려면 google_storage_bucket_object
리소스를 사용하면 됩니다.
또는 null_resource
리소스를 사용합니다.
resource "null_resource" "upload_cat_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/" } } resource "null_resource" "upload_dog_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/" } }
Google Cloud 콘솔의 각 버킷 세부정보 페이지에서 새로고침을 클릭하여 파일이 성공적으로 복사되었는지 확인합니다.
Cloud Storage 버킷을 공개적으로 읽을 수 있도록 설정
Cloud Storage 버킷을 공개적으로 읽을 수 있게 하면 인터넷의 모든 사용자가 객체를 나열하고 보고 메타데이터(ACL 제외)를 볼 수 있습니다. 공개 버킷에 민감한 정보를 포함하지 마세요.
민감한 정보가 실수로 노출되는 가능성을 줄이려면 공개 객체와 민감한 정보를 동일한 버킷에 저장하지 마세요.
콘솔
모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 버킷마다 다음 절차를 반복합니다.
Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
버킷 이름을 클릭한 다음 권한 탭을 클릭합니다.
추가를 클릭합니다.
새 주 구성원 상자에
allUsers
를 입력합니다.역할 선택 상자에서 Cloud Storage > 스토리지 객체 뷰어를 선택합니다.
저장을 클릭합니다.
공개 액세스 허용을 클릭합니다.
gcloud
모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 다음 명령어를 실행합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 google_storage_bucket_iam_member
리소스를 사용하고 allUsers
구성원을 지정합니다.
외부 IP 주소 예약
Cloud Storage 버킷을 설정한 후에는 대상에서 부하 분산기에 도달하는 데 사용하는 전역 고정 외부 IP 주소를 예약할 수 있습니다.
정적 외부 IP 주소는 도메인을 가리키는 단일 주소를 제공하므로 이 단계는 선택사항이지만 권장됩니다.
콘솔
Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.
고정 주소 예약을 클릭합니다.
이름 상자에
example-ip
를 입력합니다.네트워크 서비스 등급을 프리미엄으로 설정합니다.
IP 버전을 IPv4로 설정합니다.
유형을 전역으로 설정합니다.
예약을 클릭합니다.
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
예약된 IPv4 주소를 확인합니다.
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Terraform
외부 IP 주소를 예약하려면 google_compute_global_address
리소스를 사용합니다.
백엔드 버킷으로 외부 애플리케이션 부하 분산기 만들기
이 안내에서는 HTTP 또는 HTTPS 부하 분산기를 만드는 방법을 설명합니다. HTTPS 부하 분산기를 만들려면 SSL 인증서 리소스를 부하 분산기의 프런트엔드에 추가해야 합니다. 자세한 내용은 SSL 인증서 개요를 참조하세요.
콘솔
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에서 공개(외부)를 선택하고 다음을 클릭합니다.
- 전역 또는 단일 리전 배포에서 전역 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 부하 분산기 생성에서 전역 외부 애플리케이션 부하 분산기를 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
기본 구성
- 이름 상자에
http-lb
를 입력합니다.
백엔드 구성
백엔드 구성을 클릭합니다.
백엔드 서비스 및 백엔드 버킷 상자를 클릭하고 백엔드 버킷 만들기를 클릭합니다.
백엔드 버킷 이름 상자에
cats
를 입력합니다.Cloud Storage 버킷 상자에서 찾아보기를 클릭합니다.
BUCKET_1_NAME을 선택하고 선택을 클릭합니다.
cats
백엔드 버킷을 먼저 만들면 기본적으로 일치하지 않는 모든 트래픽 요청이 전달됩니다. 부하 분산기에서 기본 백엔드 버킷의 리디렉션 규칙을 변경할 수 없습니다.만들기를 클릭합니다.
같은 프로세스로
dogs
라는 백엔드 버킷을 만들고 BUCKET_2_NAME을 선택합니다.확인을 클릭합니다.
라우팅 규칙 구성
라우팅 규칙은 트래픽의 전달 방식을 결정합니다. 라우팅을 구성하려면 외부 애플리케이션 부하 분산기의 URL 맵의 구성 구성요소에 해당하는 호스트 규칙 및 경로 일치자를 설정합니다. 이 예시에 대한 규칙을 설정하려면 다음 안내를 따르세요.
- 라우팅 규칙을 클릭합니다.
dogs
의 경우 호스트 필드에*
를, 경로 필드에/love-to-fetch/*
를 입력합니다.
프런트엔드 구성
프런트엔드 구성을 클릭합니다.
다음 옵션이 이러한 값으로 구성되었는지 확인합니다.
속성 값(값 입력 또는 지정된 옵션 선택) 프로토콜 HTTP 네트워크 서비스 계층 프리미엄 IP 버전 IPv4 IP 주소 example-ip 포트 80 선택사항: HTTP 연결 유지 제한 시간 5~1,200초 사이의 제한 시간 값을 입력합니다. 기본값은 610초입니다. HTTP 부하 분산기 대신 HTTPS 부하 분산기를 만들려면 SSL 인증서(
gcloud compute ssl-certificates list
)가 있어야 하며 다음과 같이 필드를 작성해야 합니다.속성 값(값 입력 또는 지정된 옵션 선택) 프로토콜 HTTP(S) 네트워크 서비스 계층 프리미엄 IP 버전 IPv4 IP 주소 example-ip 포트 443 선택사항: HTTP 연결 유지 제한 시간 5~1,200초 사이의 제한 시간 값을 입력합니다. 기본값은 610초입니다. 인증서 SSL 인증서 리소스 설정 섹션에서 만든 www-ssl-cert
인증서를 선택하거나 새 인증서를 만듭니다.선택사항: HTTP-HTTPS 리디렉션 사용 설정 이 체크박스를 사용하여 리디렉션을 사용 설정합니다. 이 체크박스를 사용 설정하면 HTTPS 부하 분산기와 동일한 IP 주소를 사용하는 추가적인 부분 HTTP 부하 분산기를 만들고 HTTP 요청을 부하 분산기의 HTTPS 프런트엔드로 리디렉션합니다.
이 체크박스는 HTTPS 프로토콜이 선택되었고 예약된 IP 주소가 사용될 때만 선택할 수 있습니다.
완료를 클릭합니다.
구성 검토
검토 및 완료를 클릭합니다.
프런트엔드, 호스트 및 경로 규칙, 백엔드 버킷을 검토합니다.
만들기를 클릭하고 부하 분산기가 생성될 때까지 기다립니다.
부하 분산기의 이름을 클릭합니다(http-lb).
다음 작업을 위해 부하 분산기의 IP 주소를 기록합니다. 이 가이드에서는 IP_ADDRESS라고 합니다.
gcloud
백엔드 구성
gcloud compute backend-buckets create cats \ --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \ --gcs-bucket-name=BUCKET_2_NAME
URL 맵 구성
gcloud compute url-maps create http-lb \ --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \ --path-matcher-name=path-matcher-2 \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=dogs" \ --default-backend-bucket=cats
대상 프록시 구성
gcloud compute target-http-proxies create http-lb-proxy \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --url-map=http-lb
HTTP_KEEP_ALIVE_TIMEOUT_SEC
를 5~1,200초의 클라이언트 HTTP 연결 유지 제한 시간 값으로 바꿉니다. 기본값은 610초입니다. 이 필드는 선택사항입니다.
전달 규칙 구성
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
부하 분산기를 만들려면 다음 Terraform 리소스를 사용합니다.
백엔드 구성
백엔드 서비스를 만들려면 google_compute_backend_bucket
리소스를 사용합니다.
URL 맵 구성
URL 맵을 만들려면 google_compute_url_map
리소스를 사용합니다.
대상 프록시 구성
대상 HTTP 프록시를 만들려면 google_compute_target_http_proxy
리소스를 사용합니다.
전달 규칙 구성
전달 규칙을 만들려면 google_compute_global_forwarding_rule
리소스를 사용합니다.
참고: 모드를 기본 애플리케이션 부하 분산기로 변경하려면 load_balancing_scheme
속성을 "EXTERNAL_MANAGED"
대신 "EXTERNAL"
로 설정합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
부하 분산기로 트래픽 전송
부하 분산기를 구성한 후 몇 분 후에 트래픽을 부하 분산기의 IP 주소로 전송할 수 있습니다.
콘솔
Google Cloud 콘솔은 지원되지 않습니다.
gcloud
curl
명령어를 사용하여 다음 URL의 응답을 테스트합니다. IP_ADDRESS
를 부하 분산기의 IPv4 주소로 바꿉니다.
curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
추가 구성
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
클라이언트 HTTP 연결 유지 제한 시간 업데이트
이전 단계에서 만든 부하 분산기는 클라이언트 HTTP 연결 유지 제한 시간의 기본값으로 구성되었습니다.클라이언트 HTTP 연결 유지 제한 시간을 업데이트하려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 수정할 부하 분산기의 이름을 클릭합니다.
- 수정을 클릭합니다.
- 프런트엔드 구성을 클릭합니다.
- 고급 기능을 펼칩니다. HTTP 연결 유지 제한 시간에 제한 시간 값을 입력합니다.
- 업데이트를 클릭합니다.
- 변경사항을 검토하려면 검토 및 완료를 클릭한 다음 업데이트를 클릭합니다.
gcloud
HTTP 부하 분산기의 경우 gcloud compute target-http-proxies update
명령어를 사용하여 대상 HTTP 프록시를 업데이트합니다.
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
HTTPS 부하 분산기의 경우 gcloud compute target-https-proxies update
명령어를 사용하여 대상 HTTPS 프록시를 업데이트합니다.
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
다음을 바꿉니다.
TARGET_HTTP_PROXY_NAME
: 대상 HTTP 프록시의 이름입니다.TARGET_HTTPS_PROXY_NAME
: 대상 HTTPS 프록시의 이름입니다.HTTP_KEEP_ALIVE_TIMEOUT_SEC
: HTTP 연결 유지 제한 시간 값은 5~600초 사이입니다.
제한사항
- 백엔드 버킷은 전역 외부 애플리케이션 부하 분산기 및 기본 애플리케이션 부하 분산기에서만 지원됩니다. 리전 외부 애플리케이션 부하 분산기 또는 기타 부하 분산기 유형에서는 지원되지 않습니다.
- 백엔드 버킷은 IAP(Identity-Aware Proxy)에서 지원되지 않습니다.
- 전역 외부 애플리케이션 부하 분산기는 Cloud Storage 버킷에 업로드를 지원하지 않습니다.