Cloud CDN은 전역 외부 애플리케이션 부하 분산기 또는 기존 애플리케이션 부하 분산기를 활용하여 라우팅, 상태 점검, Anycast IP 지원을 제공합니다. 전역 외부 애플리케이션 부하 분산기에는 Compute Engine VM 인스턴스, Google Kubernetes Engine Pod, Cloud Storage 버킷 또는 Google Cloud 외부의 외부 백엔드와 같은 여러 백엔드 인스턴스 유형이 있을 수 있으므로 백엔드(원본)를 선택하여 Cloud CDN을 사용 설정할 수 있습니다.
이 설정 가이드에서는 Cloud CDN이 사용 설정된 외부 애플리케이션 부하 분산기를 만드는 방법을 설명합니다. 이 예시에서는 다음 리소스를 사용합니다.
- 기본 Virtual Private Cloud(VPC) 네트워크
- 기본 URL 맵
- 예약된 외부 IP 주소
- 백엔드로서의 Cloud Storage 버킷
- Cloud Storage 버킷의 래퍼 역할을 하는 단일 부하 분산기 백엔드 버킷
백엔드 버킷은 다음을 지원합니다.
Cloud CDN 작동 방식은 Cloud CDN 개요를 참조하세요.
기본적으로 Cloud Storage는 Cloud CDN에서 사용하는 동일한 캐시를 사용합니다. 백엔드 버킷에서 Cloud CDN을 사용 설정하면 콘텐츠에 Cloud CDN 제어를 사용할 수 있습니다.
예를 들어 Cloud CDN 제어에는 캐시 모드, 서명된 URL, 무효화가 포함됩니다. Cloud CDN을 사용하면 대용량 콘텐츠(10MB 초과)를 캐시할 수도 있습니다. 백엔드 버킷에서 Cloud CDN을 사용 설정하지 않으면 Cloud Storage 메타데이터에서 설정한 대로 더 작은 콘텐츠의 캐싱을 제어하는 데 원본 Cache-Control
헤더만 사용할 수 있습니다.
부하 분산기 백엔드
외부 애플리케이션 부하 분산기는 URL 맵을 사용하여 지정된 URL에서 지정된 서비스로 트래픽을 전달합니다. 다음 표에는 콘텐츠와 서비스를 호스팅할 수 있는 백엔드 유형이 요약되어 있습니다.
부하 분산기 백엔드 구성 | 일반적인 미디어 유형 | 백엔드 유형 |
---|---|---|
백엔드 서비스 | 동적(예: 데이터) |
|
백엔드 버킷 | 정적(예: 이미지) |
|
시작하기 전에
- 프런트엔드에 HTTPS를 사용하는 경우 자체 관리형 또는 Google 관리형인 SSL 인증서를 만듭니다. Google 관리형 인증서를 사용하는 것이 좋습니다.
- Google Cloud CLI를 사용하는 경우 gcloud 도구로 객체 스토리지 탐색을 참조하여 설치하세요.
콘솔
- Google Cloud 콘솔에서 홈 페이지로 이동합니다.
- Google Cloud 오른쪽의 풀다운 메뉴에서 프로젝트를 선택합니다.
gcloud
gcloud config set project PROJECT_ID
PROJECT_ID
를 Google Cloud 프로젝트 ID로 바꿉니다.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Cloud Storage 버킷 만들기
부하 분산기에 아직 할당되지 않은 기존 Cloud Storage 버킷이 있는 경우 다음 단계로 건너뛸 수 있습니다.
Cloud CDN을 사용하여 외부 애플리케이션 부하 분산기의 백엔드로 사용할 Cloud Storage 버킷을 만들 때 여러 Google Cloud 리전에 자동으로 객체를 복제하는 멀티 리전 버킷을 선택하는 것이 좋습니다. 이렇게 하면 콘텐츠의 가용성이 향상되고 애플리케이션 전체의 내결함성이 개선됩니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지를 엽니다.
- 버킷 만들기를 클릭합니다.
다음 표의 필드 값을 지정하고 다른 모든 필드를 기본값으로 둡니다.
속성 값(값 입력 또는 지정된 옵션 선택) 이름 각 버킷에 대해 전역적으로 고유한 이름을 입력합니다. 입력한 이름이 고유하지 않은 경우 다른 이름을 입력하라는 메시지가 표시됩니다. 위치 유형 멀티 리전 위치 us(미국의 여러 리전)와 같은 리전을 선택합니다. 기본 스토리지 클래스 Standard 액세스 제어 균일한 액세스 제어 만들기를 클릭합니다.
다음 단계를 위해 새로 생성된 Cloud Storage 버킷의 이름을 확인합니다.
gcloud
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Terraform
버킷을 만들려면 google_storage_bucket
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
Cloud Storage 버킷으로 그래픽 파일 복사
설정을 테스트하려면 공개 Cloud Storage 버킷의 그래픽 파일을 자체 Cloud Storage 버킷으로 복사합니다.
gcloud
Cloud Shell에서 다음 명령어를 실행합니다. BUCKET_NAME
을 고유한 Cloud Storage 버킷 이름으로 바꿉니다.
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Terraform
객체를 복사하려면 gcloud storage cp
명령어로 local-exec
Provisioner
를 사용합니다.
resource "null_resource" "upload_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive" } }
또는 객체를 업로드하려면 google_storage_bucket_object
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
Google Cloud 콘솔에서 새로고침을 클릭하여 그래픽 파일이 복사되었는지 확인합니다.
Cloud Storage 버킷을 공개로 설정
이 예시에서는 Cloud Storage 버킷을 공개적으로 읽을 수 있도록 설정합니다. 이 방법은 공개 콘텐츠에 권장되는 방법입니다. 이 설정을 사용하면 인터넷의 모든 사용자가 ACL을 제외한 객체와 메타데이터를 보고 나열할 수 있습니다. 의도하지 않은 데이터 노출 위험을 줄이려면 일반적으로 공개 객체에 특정 Cloud Storage 버킷을 할당해야 합니다.
다음은 전체 Cloud Storage 버킷을 공개하는 방법의 대안입니다.
관리 폴더를 사용하여 버킷의 일부를 공개합니다.
Cloud Storage 버킷 내에서 개별 객체를 공개적으로 읽을 수 있도록 설정합니다. 이 방법은 사용하지 않는 것이 좋습니다.
서명된 URL을 사용합니다.
다음 절차는 모든 사용자가 Cloud Storage 버킷의 객체를 볼 수 있는 액세스 권한을 부여하여 버킷을 공개적으로 읽을 수 있도록 합니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지를 엽니다.
- 버킷으로 이동하여 권한 탭을 클릭합니다.
- 주 구성원 추가를 클릭합니다.
- 새 주 구성원에서
allUsers
를 입력합니다. - 역할의 경우 Cloud Storage > 스토리지 객체 뷰어를 선택합니다.
- 저장을 클릭합니다.
gcloud
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
Cloud Storage 버킷을 공개로 설정하려면 google_storage_bucket_iam_member
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
외부 IP 주소 예약
이제 Cloud Storage 버킷이 준비되어 실행 중이므로 고객이 부하 분산기에 도달하기 위해 사용하는 전역 고정 외부 IP 주소를 설정합니다.
정적 외부 IP 주소는 도메인을 가리키는 단일 주소를 제공하므로 이 단계는 선택사항이지만 권장됩니다.
콘솔
- Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.
- IPv4 주소를 예약하려면 고정 주소 예약을 클릭합니다.
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
리소스를 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
외부 애플리케이션 부하 분산기 만들기
이 절차에서는 Cloud Storage 버킷의 래퍼 역할을 하는 부하 분산기의 백엔드 버킷을 만듭니다. 백엔드 버킷을 만들거나 수정할 때 Cloud CDN을 사용 설정할 수 있습니다.
콘솔
외부 애플리케이션 부하 분산기 구성 프로세스 시작
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.
- 인터넷에서 내 VM으로를 선택하고 계속을 클릭합니다.
- 고급 트래픽 관리에서 다음 중 하나를 선택합니다.
- 기존 애플리케이션 부하 분산기의 경우 기존 HTTP(S) 부하 분산기를 선택합니다.
- 전역 외부 애플리케이션 부하 분산기의 경우 고급 트래픽 관리를 사용하는 HTTP(S) 부하 분산기를 선택합니다.
- 이름을
http-lb
로 설정한 후 다음 단계로 이동합니다.
백엔드 구성 및 Cloud CDN 사용 설정
Cloud Storage 버킷의 래퍼 역할을 하는 부하 분산기의 백엔드 버킷을 만듭니다. 백엔드 버킷을 만들거나 수정할 때 Cloud CDN을 사용 설정할 수 있습니다.
- 백엔드 구성을 클릭합니다.
- 백엔드 서비스 및 백엔드 버킷에서 백엔드 서비스 및 백엔드 버킷 만들기 또는 선택을 클릭한 후 백엔드 버킷 > 백엔드 버킷 만들기를 클릭합니다.
- 이름을
cat-backend-bucket
로 설정합니다. 이 이름은 전역적으로 고유할 필요는 없으며 실제 Cloud Storage 버킷의 이름과 다를 수 있습니다. - Cloud Storage 버킷에서 찾아보기를 클릭합니다.
- 만든 전역적으로 고유한 Cloud Storage
BUCKET_NAME
을 선택한 후 선택을 클릭합니다. Cloud CDN 사용 설정을 클릭합니다.
만들기를 클릭합니다.
호스트 규칙 및 경로 일치자 구성
호스트 규칙 및 경로 일치자는 외부 애플리케이션 부하 분산기의 URL 맵 구성 구성요소입니다.
호스트 및 경로 규칙에서 기본 설정을 유지할 수 있습니다.
맞춤설정 예시는 부하 분산기에 백엔드 버킷 추가를 참조하세요.
호스트 규칙 및 경로 일치자에 대한 자세한 내용은 URL 맵 개요를 참조하세요.
프런트엔드 구성
- 프런트엔드 구성을 클릭합니다.
옵션이 이러한 값으로 구성되었는지 확인합니다.
속성 값(값 입력 또는 지정된 옵션 선택) 프로토콜 HTTP 네트워크 서비스 계층 프리미엄 IP 버전 IPv4 IP 주소 example-ip
포트 80 HTTP 부하 분산기 대신 HTTPS 부하 분산기를 만들려면 SSL 인증서(
gcloud compute ssl-certificates list
)가 있어야 하며 다음과 같이 필드를 작성해야 합니다.속성 값(값 입력 또는 지정된 옵션 선택) 프로토콜 HTTPS 네트워크 서비스 계층 프리미엄 IP 버전 IPv4 IP 주소 example-ip
포트 443 인증서 인증서 선택 또는 새 인증서 만들기 완료를 클릭합니다.
구성 검토
- 검토 및 완료를 클릭합니다.
- 백엔드 버킷, 호스트 및 경로 규칙, 프런트엔드를 검토합니다.
- 만들기를 클릭합니다.
- 부하 분산기가 생성될 때까지 기다립니다.
- 부하 분산기의 이름을 클릭합니다(http-lb).
- 다음 태스크를 위해 부하 분산기의 IP 주소를 기록합니다. 이를
IP_ADDRESS
라고 합니다.
gcloud
백엔드 구성
gcloud compute backend-buckets create cat-backend-bucket \ --gcs-bucket-name=BUCKET_NAME \ --enable-cdn \ --cache-mode=CACHE_MODE
CACHE_MODE를 다음 중 하나로 바꿔 캐시 모드를 설정합니다.
CACHE_ALL_STATIC
또는USE_ORIGIN_HEADERS
: Cloud Storage에서 캐시 제어 메타데이터에 따라 설정된 헤더를 사용합니다. Cloud Storage는 항상 Cloud CDN에Cache-Control
헤더를 제공합니다. 값을 명시적으로 선택하지 않으면 기본값이 전송됩니다.FORCE_CACHE_ALL
: Cloud Storage에서 전송한Cache-Control
응답 헤더의private
,no-store
또는no-cache
지시어를 무시하고 모든 콘텐츠를 캐시합니다.
URL 맵 구성
gcloud compute url-maps create http-lb \ --default-backend-bucket=cat-backend-bucket
대상 프록시 구성
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=http-lb
전달 규칙 구성
-
전역 외부 애플리케이션 부하 분산기의 경우 gcloud CLI 명령어를
load-balancing-scheme=EXTERNAL_MANAGED
와 함께 사용합니다. 이 설정은 고급 트래픽 관리 기능을 제공합니다. - 기본 애플리케이션 부하 분산기의 경우
load-balancing-scheme=EXTERNAL
을 사용합니다.
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
백엔드 구성
백엔드를 구성하려면 google_compute_backend_bucket
리소스를 사용합니다.
URL 맵 구성
백엔드를 구성하려면 google_compute_url_map
리소스를 사용합니다.
대상 프록시 구성
대상 프록시를 구성하려면 google_compute_target_http_proxy
리소스 또는 google_compute_target_https_proxy
리소스를 사용합니다.
전달 규칙 구성
전달 규칙을 구성하려면 google_compute_global_forwarding_rule
리소스를 사용합니다.
- 전역 외부 애플리케이션 부하 분산기의 경우
load_balancing_scheme="EXTERNAL_MANAGED"
와 함께 사용합니다. 이 설정은 고급 트래픽 관리 기능을 제공합니다. - 기본 애플리케이션 부하 분산기의 경우
load_balancing_scheme="EXTERNAL"
을 사용합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
백엔드 버킷으로 트래픽 전송
전역 전달 규칙을 만든 후에 구성이 전역적으로 적용되는 데 몇 분 정도 걸릴 수 있습니다. 몇 분 후에 부하 분산기의 IP 주소로 트래픽을 보낼 수 있습니다.
콘솔
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
http-lb
을 클릭하여 앞에서 만든 부하 분산기를 확장합니다.백엔드 섹션에서 백엔드 버킷이 정상인지 확인합니다. 백엔드 버킷 옆에 녹색 체크표시가 있어야 합니다. 그렇지 않을 경우에는 우선 페이지를 새로고침해 보세요. Google Cloud 콘솔이 백엔드가 정상임을 표시하는 데 몇 분 정도 걸릴 수 있습니다.
Google Cloud 콘솔에 백엔드 버킷이 정상으로 표시되면
http://IP_ADDRESS/never-fetch/three-cats.jpg
로 이동하고 웹브라우저를 사용하여 부하 분산기를 테스트할 수 있습니다.IP_ADDRESS
를 부하 분산기의 IP 주소로 바꿉니다. 브라우저에서 그래픽 파일을 표시하는 콘텐츠가 포함된 페이지를 렌더링해야 합니다.
gcloud
curl
명령어를 사용하여 URL의 응답을 테스트합니다. IP_ADDRESS
를 부하 분산기의 IPv4 주소로 바꿉니다.
예약된 IPv4 주소를 확인합니다.
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
curl 요청을 보냅니다.
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
Cloud CDN이 작동하는지 확인
연속해서 http://IP_ADDRESS/never-fetch/three-cats.jpg
페이지를 여러 번 새로고치면 캐시 적중이 여러 번 발생할 수 있습니다.
다음 로그 항목은 캐시 적중을 보여줍니다. 로그 탐색기를 열고 전달 규칙 이름으로 필터링하여 Google Cloud 콘솔에서 캐시 적중을 볼 수 있습니다.
로그 탐색기
{ insertId: "1oek5rg3l3fxj7" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" cacheId: "SFO-fbae48ad" statusDetails: "response_from_cache" } httpRequest: { requestMethod: "GET" requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg" requestSize: "577" status: 254 responseSize: "157" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" remoteIp: "CLIENT_IP_ADDRESS" cacheHit: true cacheLookup: true } resource: { type: "http_load_balancer" labels: { zone: "global" url_map_name: "URL_MAP_NAME" forwarding_rule_name: "FORWARDING_RULE_NAME" target_proxy_name: "TARGET_PROXY_NAME" backend_service_name: "" project_id: "PROJECT_ID" } } timestamp: "2020-06-08T23:41:25.078651Z" severity: "INFO" logName: "projects/PROJECT_ID/logs/requests" trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992" receiveTimestamp: "2020-06-08T23:41:25.588272510Z" spanId: "7b6537d3672e08e1" }
콘솔
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
http-lb
을 클릭하여 앞에서 만든 부하 분산기를 확장합니다.백엔드 섹션에서 백엔드 버킷이 정상인지 확인합니다. 백엔드 버킷 옆에 녹색 체크표시가 있어야 합니다. 그렇지 않을 경우에는 우선 페이지를 새로고침해 보세요. Google Cloud 콘솔이 백엔드가 정상임을 표시하는 데 몇 분 정도 걸릴 수 있습니다.
Google Cloud 콘솔에 백엔드 버킷이 정상으로 표시되면
http://IP_ADDRESS/never-fetch/three-cats.jpg
로 이동하고 웹브라우저를 사용하여 부하 분산기를 테스트할 수 있습니다.IP_ADDRESS
를 부하 분산기의 IP 주소로 바꿉니다. 브라우저에서 그래픽 파일을 표시하는 콘텐츠가 포함된 페이지를 렌더링해야 합니다.
gcloud
curl
명령어를 사용하여 URL의 응답을 테스트합니다. IP_ADDRESS
를 부하 분산기의 IPv4 주소로 바꿉니다.
예약된 IPv4 주소를 확인합니다.
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
curl 요청을 보냅니다.
curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg
Cloud Storage에서 가져온 콘텐츠는 Cloud CDN에서 캐시된 후 검증됩니다. 만료되면 다시 가져오기되거나 캐시에서 제거됩니다.
캐시의 콘텐츠에 0보다 큰 Age
헤더가 있습니다.
TTL보다 먼저 새로 고쳐야 하는 콘텐츠는 무효화되어 Cloud Storage에서 다시 가져올 수 있습니다.
Cloud CDN 사용 중지
콘솔
단일 백엔드 버킷에 Cloud CDN 중지
- Google Cloud 콘솔에서 Cloud CDN 페이지로 이동합니다.
- 원본 행의 오른쪽에서 메뉴 를 클릭한 후 수정을 선택합니다.
- Cloud CDN 사용을 중지할 백엔드 버킷의 체크박스를 선택 취소합니다.
- 업데이트를 클릭합니다.
원본의 모든 백엔드 버킷에 대한 Cloud CDN 삭제
- Google Cloud 콘솔에서 Cloud CDN 페이지로 이동합니다.
- 원본 행의 오른쪽에서 메뉴 를 클릭한 후 제거를 선택합니다.
- 삭제를 클릭하여 확인합니다.
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_NAME \ --no-enable-cdn
Cloud CDN 사용을 중지해도 캐시가 무효화되거나 삭제되지 않습니다. Cloud CDN 사용을 중지했다가 다시 사용하면 대부분 또는 모든 캐시된 콘텐츠가 여전히 캐시될 수 있습니다. 캐시가 콘텐츠를 사용하지 못하게 하려면 해당 콘텐츠를 무효화해야 합니다.
다음 단계
- 캐시되는 콘텐츠에 대한 자세한 내용은 캐싱 개요를 참조하세요.
- GKE에서 Cloud CDN을 사용하려면 인그레스 기능을 참조하세요.
- Cloud CDN이 캐시에서 응답을 제공하고 있는지 확인하려면 로그 보기를 참조하세요.
- 일반적인 문제 및 해결책에 대한 자세한 내용은 문제 해결을 참조하세요.
- 콘텐츠의 필터링 및 액세스 제어 정책을 구성하려면 에지 보안 정책을 참조하세요.