이 가이드에서는 예시를 사용하여 전역 외부 애플리케이션 부하 분산기와 외부 백엔드(커스텀 원본이라고도 함) 사용의 기본사항을 안내합니다. 외부 백엔드는 Google Cloud 외부에 있는 엔드포인트입니다. 외부 백엔드를 전역 외부 애플리케이션 부하 분산기와 함께 사용하면 Cloud CDN 캐싱을 사용하여 성능을 개선할 수 있습니다.
이 가이드에서는 요청을 외부 백엔드 서버로 프록시하는 Cloud CDN 사용 설정 백엔드 서비스로 전역 외부 애플리케이션 부하 분산기를 구성하는 방법을 보여줍니다.
이 가이드를 진행하기 전에 제한사항과 함께 인터넷 NEG 개요 문서를 확인하세요.다음 아키텍처 다이어그램은 외부 백엔드가 있는 전역 외부 애플리케이션 부하 분산기 프런트엔드를 보여줍니다.
권한
이 가이드를 따르려면 인터넷 NEG를 만들고 프로젝트에서 외부 애플리케이션 부하 분산기를 만들거나 수정해야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자(roles/owner
또는 roles/editor
)이거나, 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.
작업 | 필요한 역할 |
---|---|
부하 분산기 구성요소 생성 및 수정 | Compute 네트워크 관리자 ( roles/compute.networkAdmin )
|
NEG 생성 및 수정 | Compute 인스턴스 관리자 ( roles/compute.instanceAdmin ) |
Google Cloud 외부에서 외부 백엔드 환경 설정
환경을 설정하려면 다음 섹션을 참조하세요.
네트워크 엔드포인트 구성
Google Cloud에서 외부 백엔드에 액세스할 수 있도록 네트워크 엔드포인트를 구성합니다. 인터넷을 통해 엔드포인트(IP:포트 조합 또는 정규화된 도메인 이름(FQDN) 및 포트)에 연결할 수 있는지 확인합니다. 이 엔드포인트는 나중에 인터넷 NEG에서 참조됩니다.
인터넷 NEG 엔드포인트에 대한 자세한 구성 요구사항은 인터넷 NEG 개요를 참조하세요.
외부 백엔드가 Google Cloud에서 트래픽을 수신하도록 허용
Google Cloud의 요청이 외부 백엔드에 도달하도록 허용하려면 Google이 외부 백엔드로 요청을 전송하는 데 사용하는 IP 주소 범위를 허용 목록에 추가해야 합니다. 외부 백엔드로 트래픽을 전송하도록 허용해야 하는 IP 주소를 찾으려면 dig
또는 nslookup
과 같은 도구를 사용하여 _cloud-eoips.googleusercontent.com
DNS TXT 레코드를 쿼리하세요.
예:
다음
nslookup
명령어를 실행합니다.nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
출력은 다음과 같이 표시됩니다.
Non-authoritative answer: _cloud-eoips.googleusercontent.com text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
ip4:
뒤에 있는 CIDR 범위를 확인하고 외부 백엔드에 구성된 방화벽 규칙 또는 클라우드 액세스 제어 목록(ACL)에서 허용되는 범위인지 확인합니다.다음
dig
명령어를 실행합니다.dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
출력에는 다음과 같은 두 개의 IP 주소 범위가 포함됩니다.
34.96.0.0/20 34.127.192.0/18
Google Cloud 환경 설정
인터넷 NEG 백엔드가 있는 전역 외부 애플리케이션 부하 분산기를 만듭니다.
외부 IP 주소 예약
클라이언트가 애플리케이션에 연결하는 데 사용하는 전역 고정 외부 IP 주소를 예약합니다.
콘솔
Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.
외부 고정 주소 예약을 클릭하여 IPv4 주소를 예약합니다.
이름을 입력합니다.
네트워크 서비스 등급에서 프리미엄을 선택합니다.
IP 버전에서 IPv4를 선택합니다.
유형에서 전역을 선택합니다.
예약을 클릭합니다.
gcloud
gcloud compute addresses create LB_IP_ADDRESS_NAME \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
예약된 IPv4 주소를 확인합니다.
gcloud compute addresses describe LB_IP_ADDRESS_NAME \ --format="get(address)" \ --global
인터넷 NEG 설정
콘솔
Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.
네트워크 엔드포인트 그룹 만들기를 클릭합니다.
이름을 입력합니다.
네트워크 엔드포인트 그룹 유형에 네트워크 엔드포인트 그룹(인터넷)을 선택합니다.
기본 포트에
443
을 입력합니다.새 네트워크 엔드포인트에 정규화된 도메인 이름 및 포트를 선택합니다.
정규화된 도메인 이름을 입력합니다.
포트 유형에 기본값을 선택하고 포트 번호가
443
인지 확인합니다.만들기를 클릭합니다.
gcloud
인터넷 NEG를 만들고
--network-endpoint-type
을internet-fqdn-port
로 설정합니다(호스트 이름과 외부 백엔드에 연결할 수 있는 포트).gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
NEG에 엔드포인트를 추가합니다. 포트를 지정하지 않았다면 백엔드 서비스에서 구성된 프로토콜에 따라 포트 선택 기본값이 포트
80
(HTTP) 또는443
(HTTPS; HTTP/2)입니다.--global
플래그를 반드시 포함합니다.gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \ --global
부하 분산기 만들기
Console
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에서 공개(외부)를 선택하고 다음을 클릭합니다.
- 전역 또는 단일 리전 배포에서 전역 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 부하 분산기 생성에서 전역 외부 애플리케이션 부하 분산기를 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
프런트엔드 구성
- 프런트엔드 구성을 클릭합니다.
- 이름을 입력합니다.
HTTPS 부하 분산기를 만들려면 SSL 인증서가 있어야 합니다. Google 관리형 인증서를 사용하는 것이 좋습니다.
다음 옵션이 이러한 값으로 구성되었는지 확인합니다.
속성 값(값 입력 또는 지정된 옵션 선택) 프로토콜 HTTPS 네트워크 서비스 계층 프리미엄 IP 버전 IPv4 IP 주소 외부 IP 주소 예약 단계에서 만든 IP 주소를 선택합니다. 포트 443 선택사항: HTTP 연결 유지 제한 시간 5~1,200초 사이의 제한 시간 값을 입력합니다. 기본값은 610초입니다. 인증서 기존 SSL 인증서를 선택하거나 새 인증서를 만듭니다.
HTTPS 부하 분산기를 만들려면 HTTPS 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다. Google 관리형 SSL 인증서 또는 자체 관리형 SSL 인증서를 사용하여 SSL 인증서 리소스를 만들 수 있습니다.
Google 관리형 인증서를 만들려면 도메인이 있어야 합니다. 도메인의 A 레코드는 부하 분산기의 IP 주소(이 예시에서는
example-ip
)로 확인되어야 합니다. Google Cloud는 이 인증서를 자동으로 가져오고 관리고 갱신하므로 Google 관리형 인증서를 사용하는 것이 좋습니다. 도메인이 없는 경우 자체 서명 SSL 인증서를 사용하여 테스트할 수 있습니다.선택사항: HTTP-HTTPS 리디렉션 사용 설정 이 체크박스를 사용하여 HTTP에서 HTTPS로 리디렉션을 사용 설정합니다.
이 체크박스를 사용 설정하면 HTTPS 부하 분산기와 동일한 IP 주소를 사용하는 추가적인 부분 HTTP 부하 분산기를 만들고 HTTP 요청을 부하 분산기의 HTTPS 프런트엔드로 리디렉션합니다.
이 체크박스는 HTTPS 프로토콜이 선택되었고 예약된 IP 주소가 사용될 때만 선택할 수 있습니다.
SSL 인증서 리소스(또는 Google 관리형 인증서의 요구에 따라 도메인)을 설정하지 않고 이 프로세스를 테스트하려면 HTTP 부하 분산기를 설정하면 됩니다.
HTTP 부하 분산기를 만들려면 다음 옵션이 해당 값으로 구성되었는지 확인합니다.
속성 값(값 입력 또는 지정된 옵션 선택) 프로토콜 HTTP 네트워크 서비스 계층 프리미엄 IP 버전 IPv4 IP 주소 외부 IP 주소 예약 단계에서 만든 IP 주소를 선택합니다. 포트 80 선택사항: HTTP 연결 유지 제한 시간 5~1,200초 사이의 제한 시간 값을 입력합니다. 기본값은 610초입니다. 완료를 클릭합니다.
백엔드 구성
- 백엔드 구성을 클릭합니다.
- 백엔드 서비스 및 백엔드 버킷을 클릭합니다.
- 백엔드 서비스 만들기를 클릭합니다.
- 이름을 입력합니다.
- 백엔드 유형에 인터넷 네트워크 엔드포인트 그룹을 선택합니다.
- 프로토콜에 부하 분산기에서 인터넷 NEG로에 사용할 프로토콜을 선택합니다. 이 예시에서는 HTTP/2를 선택합니다.
- 백엔드의 경우 새 백엔드 창에서 이전 단계에서 만든 인터넷 NEG를 선택합니다.
- 만들기를 클릭합니다.
검토 및 완료
- 검토 및 완료를 클릭합니다.
- 모든 설정이 올바른 것으로 확인되면 만들기를 클릭합니다.
gcloud
- 백엔드 서비스를 만듭니다.
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- 백엔드 서비스에 인터넷 NEG를 추가합니다.
gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --global-network-endpoint-group \ --global
- 수신되는 요청을 백엔드 서비스로 라우팅하는 URL 맵을 만듭니다.
gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
HTTPS 부하 분산기를 만들려는 경우에만 이 단계를 수행합니다. HTTP 부하 분산기에는 이 단계가 필요하지 않습니다.
HTTPS 부하 분산기를 만들려면 HTTPS 대상 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다. Google 관리형 SSL 인증서 또는 자체 관리형 SSL 인증서를 사용하여 SSL 인증서 리소스를 만들 수 있습니다. Google Cloud는 이러한 인증서를 자동으로 가져오고 관리 및 갱신하므로 Google 관리형 인증서를 사용하는 것이 좋습니다.
Google 관리형 인증서를 만들려면 도메인이 있어야 합니다. 도메인이 없는 경우 자체 관리형 SSL 인증서를 사용하여 테스트할 수 있습니다.
Google 관리형 SSL 인증서 리소스를 만들려면 다음 안내를 따르세요.gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
자체 관리형 SSL 인증서 리소스를 만들려면 다음 안내를 따르세요.gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
대상 HTTP(S) 프록시를 만들어 요청을 URL 맵으로 라우팅합니다.
HTTP 부하 분산기의 경우 HTTP 대상 프록시를 만듭니다.
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --global
HTTPS 부하 분산기의 경우 HTTPS 대상 프록시를 만듭니다. 프록시는 HTTPS 부하 분산을 위해 SSL 인증서를 포함하는 부하 분산기의 일부분이므로 이 단계에서 인증서도 로드합니다.
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --global
다음을 바꿉니다.
TARGET_HTTP_PROXY_NAME
: 대상 HTTP 프록시의 이름입니다.TARGET_HTTPS_PROXY_NAME
: 대상 HTTPS 프록시의 이름입니다.SSL_CERTIFICATE_NAME
: SSL 인증서의 이름입니다.URL_MAP_NAME
: URL 맵의 이름입니다.
--http-keep-alive-timeout-sec
옵션을 사용하여 클라이언트 HTTP 연결 유지 제한 시간을 설정할 수 있습니다. 제한 시간 값은 5~1,200초 사이여야 합니다. 기본값은 610초입니다.수신되는 요청을 프록시로 라우팅하는 전달 규칙을 만듭니다.
HTTP 부하 분산기의 경우:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=LB_IP_ADDRESS_NAME \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --global \ --ports=80
HTTPS 부하 분산기의 경우:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=LB_IP_ADDRESS_NAME \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --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 제공업체로 사용하는 경우 레코드 추가, 수정, 삭제를 참조하세요.
부하 분산기 테스트
부하 분산기를 구성했으므로 부하 분산기의 IP 주소로 트래픽을 전송할 수 있습니다. 도메인을 구성한 경우 트래픽을 도메인 이름으로도 전송할 수 있습니다. 하지만 DNS 전파는 완료하는 데 시간이 오래 걸릴 수 있으므로, IP 주소를 사용하여 테스트를 시작할 수 있습니다.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
앞에서 만든 부하 분산기를 클릭합니다.
부하 분산기의 IP 주소를 확인합니다.
트래픽을 부하 분산기로 전송합니다.
HTTP 부하 분산기를 만든 경우
http://IP_ADDRESS
로 이동하여 부하 분산기를 테스트할 수 있습니다.IP_ADDRESS
를 부하 분산기의 IP 주소로 바꿉니다. 외부 백엔드에서 실행 중인 애플리케이션으로 이동해야 합니다.HTTPS 부하 분산기를 만든 경우
https://IP_ADDRESS
로 이동하여 부하 분산기를 테스트할 수 있습니다.IP_ADDRESS
를 부하 분산기의 IP 주소로 바꿉니다. 외부 백엔드에서 실행 중인 애플리케이션으로 이동해야 합니다.
그래도 문제가 해결되지 않고 Google 관리형 인증서를 사용 중인 경우 인증서 리소스가 활성 상태인지 확인합니다. 자세한 내용은 Google 관리형 SSL 인증서 리소스 상태를 참조하세요.
또는 로컬 머신의 명령줄에서
curl
을 사용할 수도 있습니다.IP_ADDRESS
를 부하 분산기의 IPv4 주소로 바꿉니다. Google 관리형 인증서를 사용하는 경우 부하 분산기의 IP 주소를 가리키는 도메인을 테스트합니다. 예를 들면curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
입니다.선택사항: 커스텀 도메인을 사용하는 경우 업데이트된 DNS 설정이 적용될 때까지 기다려야 할 수 있습니다. 그런 다음 웹브라우저에서 도메인을 테스트합니다.
문제 해결에 대한 도움말은 외부 백엔드 및 인터넷 NEG 문제 해결을 참조하세요.
추가 구성
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
Cloud CDN 사용 설정
Cloud CDN이 사용 설정되면 외부 애플리케이션 부하 분산기는 Cloud CDN 캐시 부적중이 있을 때만 인터넷 NEG 백엔드에 요청을 보냅니다.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
수정할 부하 분산기의 이름을 클릭합니다.
수정을 클릭합니다.
백엔드 구성을 클릭합니다.
인터넷 NEG 백엔드를 사용하는 백엔드 서비스의 경우
수정을 클릭합니다.Cloud CDN 사용 설정을 선택합니다.
업데이트를 클릭합니다.
변경사항을 검토하려면 검토 및 완료를 클릭한 다음 업데이트를 클릭합니다.
gcloud
- 백엔드 서비스에서 Cloud CDN을 사용 설정하려면 다음 명령어를 사용합니다.
gcloud compute backend-services update BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE
CACHE_MODE
를 다음 중 하나로 바꿔 캐시 모드를 설정합니다.
커스텀 헤더를 사용하여 요청 인증
외부 백엔드로 전송된 요청을 인증하려면 요청이 Google Cloud 부하 분산기에서 온 것임을 나타내도록 커스텀 헤더를 설정할 수 있습니다. 예를 들어 HTTP 요청의 Host
헤더에 대한 특정 값을 예상하도록 외부 백엔드를 구성하고 백엔드 서비스가 예상되는 값으로 Host
헤더를 설정하도록 구성할 수 있습니다.
다음 단계를 따라 각 요청에 커스텀 Host
헤더를 추가하도록 백엔드 서비스를 구성합니다.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
수정할 부하 분산기의 이름을 클릭합니다.
수정을 클릭합니다.
백엔드 구성을 클릭합니다.
인터넷 NEG 백엔드를 사용하는 백엔드 서비스의 경우
수정을 클릭합니다.고급 구성을 클릭합니다.
커스텀 요청 헤더에서 헤더 추가를 클릭합니다.
- 헤더 이름에
Host
를 입력합니다. - 헤더 값에
FQDN_NEG_ENDPOINT
을 입력합니다.
- 헤더 이름에
업데이트를 클릭합니다.
변경사항을 검토하려면 검토 및 완료를 클릭한 다음 업데이트를 클릭합니다.
gcloud
- 다음 명령어를 사용하여 각 요청에 커스텀 호스트 헤더를 추가하도록 백엔드 서비스를 구성합니다.
gcloud compute backend-services update BACKEND_SERVICE \ --custom-request-header "Host: HEADER_VALUE" \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
또한 Host
헤더를 예상하여 수신 요청을 인증할 수 있도록 외부 백엔드를 구성했는지 확인합니다.
커스텀 요청 헤더에 대한 일반적인 내용은 커스텀 요청 헤더 구성을 참조하세요. 다른 인증 방법은 외부 백엔드에 대한 요청 인증을 참조하세요.
외부 애플리케이션 부하 분산기에서 IAP 사용 설정
참고: IAP는 Cloud CDN과 호환되지 않습니다.IAP를 사용 설정 또는 사용 중지(기본값)하도록 구성할 수 있습니다. 사용 설정된 경우 oauth2-client-id
및 oauth2-client-secret
값을 제공해야 합니다.
IAP를 사용 설정하려면 --iap=enabled
플래그를 oauth2-client-id
및 oauth2-client-secret
과 함께 포함하도록 백엔드 서비스를 업데이트하세요.
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \ --global
원하는 경우 Google Cloud 콘솔, gcloud CLI 또는 API를 사용하여 Compute Engine 리소스에 IAP를 사용 설정할 수 있습니다.
클라이언트 HTTP 연결 유지 제한 시간 업데이트
이전 단계에서 만든 부하 분산기는 클라이언트 HTTP 연결 유지 제한 시간의 기본값으로 구성되었습니다. 클라이언트 HTTP 연결 유지 제한 시간을 업데이트하려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 수정할 부하 분산기의 이름을 클릭합니다.
- 수정을 클릭합니다.
- 프런트엔드 구성을 클릭합니다.
- 고급 기능을 펼칩니다. HTTP 연결 유지 제한 시간에 제한 시간 값을 5~1,200초로 입력합니다.
- 업데이트를 클릭합니다.
- 변경사항을 검토하려면 검토 및 완료를 클릭한 다음 업데이트를 클릭합니다.
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~1,200초 사이입니다.
다음 단계
- Cloud CDN이 캐시에서 응답을 제공하고 있는지 확인하려면 로그 보기를 참조하세요.
- 어떤 콘텐츠를 캐시하거나 캐시할 수 없는지 알아보려면 캐싱 개요를 참조하세요.
- Cloud CDN 접속 지점을 찾으려면 캐시 위치를 참조하세요.
- 부하 분산기 설정 삭제
- Cloud CDN을 사용 중지하는 방법은 Cloud CDN 사용 중지를 참조하세요.