서버리스 NEG 설정

네트워크 엔드포인트 그룹(NEG)은 부하 분산기의 백엔드 엔드포인트 그룹을 지정합니다. 서버리스 NEGCloud Run, App Engine 또는 Cloud Functions 서비스를 가리키는 백엔드입니다.

서버리스 NEG는 다음을 나타낼 수 있습니다.

  • Cloud Run 서비스나 동일한 URL 패턴을 공유하는 서비스 그룹
  • Cloud Functions 함수나 동일한 URL 패턴을 공유하는 함수 그룹
  • App Engine 앱(스탠더드 또는 플렉스), 앱 내의 특정 서비스 또는 특정 버전의 앱

이 페이지에서는 서버리스 백엔드로 요청을 라우팅하는 외부 HTTP(S) 부하 분산기를 만드는 방법을 보여줍니다. 여기서 서버리스라는 용어는 서버리스 컴퓨팅 제품 App Engine, Cloud Functions, Cloud Run(완전 관리형)을 의미합니다.

서버리스 NEG를 사용하면 외부 HTTP(S) 부하 분산과 함께 Google Cloud 서버리스 앱을 사용할 수 있습니다. 서버리스 NEG 백엔드로 부하 분산기를 구성하면 부하 분산기에 대한 요청이 서버리스 앱 백엔드로 라우팅됩니다.

시작하기 전에

시작하기 전에:

  1. 서버리스 NEG 개요 읽기
  2. App Engine, Cloud Functions 또는 Cloud Run(완전 관리형) 서비스 배포
  3. Google Cloud SDK 설치
  4. 권한 구성
  5. SSL 인증서 리소스 추가

App Engine, Cloud Functions, Cloud Run(완전 관리형) 서비스 배포

이 페이지의 안내에서는 이미 Cloud Run(완전 관리형), Cloud Functions 또는 App Engine 서비스가 실행 중이라고 가정합니다.

이 페이지의 예시에서는 Cloud Run(완전 관리형) Python 빠른 시작을 사용하여 us-central1 리전에 helloworld 서비스를 배포했습니다. 이 페이지의 나머지 부분에서는 서버리스 NEG 백엔드를 사용하여 요청을 helloworld 서비스로 라우팅하는 외부 HTTP(S) 부하 분산기를 설정하는 방법을 보여줍니다.

아직 서버리스 앱을 배포하지 않았거나 샘플 앱으로 서버리스 NEG를 사용해 보려면 다음 빠른 시작 중 하나를 사용하세요. 모든 리전에서 서버리스 앱을 만들 수 있지만 나중에 동일한 리전을 사용하여 서버리스 NEG 및 부하 분산기를 만들어야 합니다.

Cloud Run(완전 관리형)

간단한 Hello World 애플리케이션을 만들고 컨테이너 이미지에 패키징한 다음 컨테이너 이미지를 Cloud Run(완전 관리형)에 배포하려면 빠른 시작: 빌드 및 배포를 참조하세요.

Container Registry에 이미 업로드된 샘플 컨테이너가 있는 경우 빠른 시작: 사전 빌드된 샘플 컨테이너 배포를 참조하세요.

Cloud Functions

Cloud Functions: Python 빠른 시작을 참조하세요.

App Engine

Python 3용 App Engine 빠른 시작 가이드를 참조하세요.

Google Cloud SDK 설치

gcloud 명령줄 도구를 설치합니다. 도구에 대한 개념 및 설치 정보는 gcloud 개요를 참조하세요.

이전에 gcloud 명령줄 도구를 실행한 적이 없다면 먼저 gcloud init를 실행하여 gcloud 디렉터리를 초기화합니다.

권한 구성

이 가이드를 따르려면 서버리스 NEG를 만들고 프로젝트에 외부 HTTP(S) 부하 분산기를 만들어야 합니다. 이를 위해서는 프로젝트 소유자 또는 편집자이거나, 다음 Compute Engine IAM 역할을 보유해야 합니다.

작업 필요한 역할
부하 분산기 및 네트워킹 구성요소 만들기 네트워크 관리자
NEG 생성 및 수정 Compute 인스턴스 관리자
SSL 인증서 만들기 및 수정 보안 관리자

외부 IP 주소 예약

서비스가 준비되어 실행 중이므로 고객이 부하 분산기에 연결하는 데 사용하는 전역 고정 외부 IP 주소를 설정합니다.

Console

  1. Google Cloud Console의 외부 IP 주소 페이지로 이동합니다.
    외부 IP 주소 페이지로 이동
  2. 고정 주소 예약을 클릭하여 IPv4 주소를 예약합니다.
  3. example-ip이름을 할당합니다.
  4. 네트워크 등급을 프리미엄으로 설정합니다.
  5. IP 버전IPv4로 설정합니다.
  6. 유형전역으로 설정합니다.
  7. 예약을 클릭합니다.

gcloud

gcloud compute addresses create example-ip \
    --ip-version=IPV4 \
    --global

예약된 IPv4 주소를 확인합니다.

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

SSL 인증서 리소스 만들기

HTTPS 부하 분산기를 만들려면 부하 분산기의 프런트엔드에 SSL 인증서 리소스를 추가해야 합니다. Google 관리형 SSL 인증서 또는 자체 관리형 SSL 인증서를 사용하여 SSL 인증서 리소스를 만듭니다.

  • Google 관리형 인증서 Google Cloud는 이러한 인증서를 자동으로 가져오고 관리하며 갱신하므로 Google 관리형 인증서를 사용하는 것이 좋습니다. Google 관리형 인증서를 만들려면 인증서를 프로비저닝하기 위한 도메인과 해당 도메인의 DNS 레코드가 있어야 합니다. 아직 도메인이 없는 경우 Google Domains에서 얻을 수 있습니다. 또한 이전 단계(example-ip)에서 생성된 부하 분산기의 IP 주소를 가리키도록 도메인의 DNS A 레코드를 업데이트해야 합니다. 자세한 안내는 Google 관리 인증서 사용을 참조하세요.

  • 자체 서명 인증서 지금 도메인을 설정하지 않으려면 자체 서명된 SSL 인증서를 사용하여 테스트할 수 있습니다.

이 예시에서는 사용자가 이미 SSL 인증서 리소스를 만들었다고 가정합니다.

SSL 인증서 리소스(또는 Google에서 관리하는 인증서에서 요구하는 도메인)를 만들지 않고 이 프로세스를 테스트하려는 경우에도 이 페이지의 안내에 따라 HTTP 로드를 설정할 수 있습니다.

외부 HTTP(S) 부하 분산기 만들기

다음 다이어그램에서 부하 분산기는 서버리스 NEG 백엔드를 사용하여 서버리스 Cloud Run(완전 관리형) 서비스로 요청을 전달합니다. 이 예시에서는 Cloud Run(완전 관리형) Python 빠른 시작을 사용하여 helloworld-python 서비스를 배포했습니다.

단순 HTTPS 부하 분산(확대하려면 클릭)
Cloud Run 앱의 HTTPS 부하 분산

서버리스 NEG 백엔드가 있는 백엔드 서비스에는 상태 확인이 지원되지 않으므로 부하 분산기에 서버리스 NEG 백엔드만 있는 경우 상태 확인을 허용하는 방화벽 규칙을 만들 필요가 없습니다.

Console

부하 분산기 이름 지정

  1. Google Cloud Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. HTTP(S) 부하 분산 아래에서 구성 시작을 클릭합니다.
  3. 인터넷 연결 또는 내부 전용 아래에서 인터넷 트래픽을 VM으로 분산을 선택합니다.
  4. 계속을 클릭합니다.
  5. 부하 분산기 이름helloworld-lb을 입력합니다.
  6. 계속하려면 창을 열어둡니다.

백엔드 서비스 구성

  1. 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 만들기 또는 선택 드롭다운 메뉴에서 백엔드 서비스 위로 마우스 포인터를 가져간 후 백엔드 서비스 만들기를 선택합니다.
  3. 백엔드 서비스의 이름helloworld-backend-service로 설정합니다.
  4. 백엔드 유형에서 서버리스 네트워크 엔드포인트 그룹을 선택합니다.
  5. 프로토콜 드롭다운 메뉴에서 HTTPS를 선택합니다.
  6. 백엔드새 백엔드 창에서 서버리스 네트워크 엔드포인트 그룹 만들기를 선택합니다.
    1. 이름helloworld-serverless-neg을 입력합니다.
    2. 리전에서 us-central1을 선택합니다.
    3. 서버리스 네트워크 엔드포인트 그룹 유형을 선택합니다. 이 예시에서는 Cloud Run(완전 관리형) 서비스를 사용하므로 Cloud Run을 선택합니다.
      1. 서비스 이름 선택을 선택합니다.
      2. 서비스 드롭다운에서 helloworld 서비스를 선택합니다.
    4. 만들기를 클릭합니다.
  7. 새 백엔드 창에서 완료를 클릭합니다.
  8. (선택사항) Cloud CDN 사용 설정을 선택합니다.
  9. 만들기를 클릭합니다.

호스트 규칙 및 경로 일치자 구성

호스트 규칙 및 경로 일치자는 외부 HTTP(S) 부하 분산기의 URL 맵 구성요소입니다.

  1. 호스트 및 경로 규칙을 클릭합니다.
  2. 기본 호스트 및 경로를 유지합니다. 즉, 모든 요청은 helloworld 백엔드 서비스로 이동합니다.

프런트엔드 구성

  1. 프런트엔드 구성을 클릭합니다.
  2. 이름을 입력합니다.
  3. HTTPS 부하 분산기를 만들려면 SSL 인증서(gcloud compute ssl-certificates list)가 필요합니다. 이전에 설명된 대로 Google 관리형 인증서를 사용하는 것이 좋습니다. 외부 HTTP(S) 부하 분산기를 구성하려면 다음과 같이 필드를 채웁니다.

    다음 옵션이 이러한 값으로 구성되었는지 확인합니다.

    속성 값(값 입력 또는 지정된 옵션 선택)
    프로토콜 HTTPS
    네트워크 서비스 계층 프리미엄
    IP 버전 IPv4
    IP 주소 example-ip
    포트 443
    인증서 기존 SSL 인증서를 선택하거나 새 인증서를 만듭니다.

    HTTPS 부하 분산기를 만들려면 HTTPS 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다. Google 관리형 SSL 인증서 또는 자체 관리형 SSL 인증서를 사용하여 SSL 인증서 리소스를 만들 수 있습니다.
    Google 관리형 인증서를 만들려면 도메인이 있어야 합니다. 도메인의 A 레코드는 부하 분산기의 IP 주소로 연결되어야 합니다(이 예시에서는 example-ip). Google Cloud는 이러한 인증서를 자동으로 가져오고 관리하며 갱신하므로 Google 관리형 인증서를 사용하는 것이 좋습니다. 도메인이 없는 경우 자체 서명 SSL 인증서를 사용하여 테스트할 수 있습니다.

    SSL 인증서 리소스(또는 Google 관리 인증서에서 요구하는 도메인)를 설정하지 않고 이 프로세스를 테스트하려면 HTTP 부하 분산기를 설정할 수 있습니다.

    HTTP 부하 분산기를 만들려면 다음 옵션이 이러한 값으로 구성되었는지 확인합니다.

    속성 값(값 입력 또는 지정된 옵션 선택)
    프로토콜 HTTP
    네트워크 서비스 계층 프리미엄
    IP 버전 IPv4
    IP 주소 example-ip
    포트 80

  4. 완료를 클릭합니다.

구성 검토

  1. 검토 및 완료를 클릭합니다.
  2. 백엔드, 호스트 및 경로 규칙, 프런트엔드를 검토합니다.
  3. 만들기를 클릭합니다.
  4. 부하 분산기가 생성될 때까지 기다립니다.
  5. 부하 분산기의 이름을 클릭합니다(helloworld-lb).
  6. 다음 작업을 위해 부하 분산기의 IP 주소를 기록합니다. 이를 IP_ADDRESS라고 합니다.

gcloud

  1. Cloud Run(완전 관리형) 서비스를 위한 서버리스 NEG를 만듭니다. 이 예시에서는 helloworld라는 Cloud Run(완전 관리형) 서비스를 배포했다고 가정합니다.
    gcloud compute network-endpoint-groups create helloworld-serverless-neg \
        --region=us-central1 \
        --network-endpoint-type=serverless  \
        --cloud-run-service=helloworld
    
    App Engine 서비스 또는 Cloud Functions 함수용 NEG를 만들려면 gcloud compute network-endpoint-groups create에 대한 gcloud 참조 가이드를 참조하세요.
  2. 백엔드 서비스를 만들고 서버리스 NEG를 백엔드 서비스에 백엔드로 추가합니다.
    gcloud compute backend-services create helloworld-backend-service \
        --global
    
    gcloud compute backend-services add-backend helloworld-backend-service \
        --global \
        --network-endpoint-group=helloworld-serverless-neg \
        --network-endpoint-group-region=us-central1
    
  3. 수신되는 요청을 helloworld-backend-service 백엔드 서비스로 라우팅하는 URL 맵을 만듭니다.
    gcloud compute url-maps create helloworld-url-map \
        --default-service helloworld-backend-service
    
    이 예시 URL 맵은 단일 Cloud Run(완전 관리형) 서비스를 나타내는 하나의 백엔드 서비스만 타겟팅하므로 호스트 규칙 또는 경로 일치자를 설정할 필요가 없습니다. 백엔드 서비스가 두 개 이상인 경우 호스트 규칙을 사용하여 호스트 이름에 따라 다른 서비스로 요청을 전달하고, 경로 일치자를 설정하여 요청 경로에 따라 다른 서비스로 요청을 전달할 수 있습니다.
  4. HTTPS 부하 분산기를 만들려면 HTTPS 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다. Google 관리형 SSL 인증서 또는 자체 관리형 SSL 인증서를 사용하여 SSL 인증서 리소스를 만들 수 있습니다. Google Cloud는 이러한 인증서를 자동으로 가져오고 관리하며 갱신하므로 Google 관리형 인증서를 사용하는 것이 좋습니다.
    Google 관리형 인증서를 만들려면 도메인이 있어야 합니다. 도메인이 없는 경우 자체 서명 SSL 인증서를 사용하여 테스트할 수 있습니다.

    www-ssl-cert라는Google 관리형 SSL 인증서 리소스를 만들려면 다음 안내를 따르세요.
    gcloud compute ssl-certificates create www-ssl-cert \
        --domains [DOMAIN]
    
    www-ssl-cert라는 자체 관리형 SSL 인증서 리소스를 만들려면 다음 안내를 따르세요.
    gcloud compute ssl-certificates create www-ssl-cert \
        --certificate [CRT_FILE_PATH] \
        --private-key [KEY_FILE_PATH]
    
  5. 대상 HTTP(S) 프록시를 만들어 요청을 URL 맵으로 라우팅합니다.

    HTTP 부하 분산기의 경우 HTTP 대상 프록시를 만듭니다.
      gcloud compute target-http-proxies create helloworld-http-proxy \
        --url-map=helloworld-url-map
      
    HTTPS 부하 분산기의 경우 HTTPS 대상 프록시를 만듭니다. 프록시는 HTTPS 부하 분산을 위해 SSL 인증서를 포함하는 부하 분산기의 일부분이므로 이 단계에서 인증서도 로드합니다.
    gcloud compute target-https-proxies create helloworld-https-proxy \
        --ssl-certificates=www-ssl-cert \
        --url-map=helloworld-url-map
    
  6. 들어오는 요청을 프록시로 라우팅하는 글로벌 전달 규칙을 만듭니다.

    HTTP 부하 분산기의 경우:
    gcloud compute forwarding-rules create http-forwarding-rule \
        --address=example-ip \
        --target-http-proxy=helloworld-http-proxy \
        --global \
        --ports=80
    
    HTTPS 부하 분산기의 경우:
    gcloud compute forwarding-rules create https-forwarding-rule \
        --address=example-ip \
        --target-https-proxy=helloworld-https-proxy \
        --global \
        --ports=443
    

부하 분산기의 IP 주소를 사용하도록 도메인의 DNS 레코드 업데이트

아직 도메인의 DNS A 레코드가 부하 분산기의 IP 주소를 가리키도록 업데이트하지 않은 경우 기존 Cloud Run(완전 관리형) 또는 App Engine 커스텀 도메인 URL로 전송된 트래픽이 부하 분산기를 통해 라우팅되도록 업데이트합니다.

예를 들어 example.com이라는 커스텀 도메인이 있고 모든 Cloud Run(완전 관리형) 서비스가 이 도메인에 매핑된 경우 example.com의 DNS A 레코드가 부하 분산기의 IP 주소를 가리키도록 업데이트해야 합니다.

DNS 레코드를 업데이트하기 전에 커스텀 도메인의 로컬 DNS 확인을 부하 분산기의 IP 주소로 강제 실행하여 구성을 로컬에서 테스트할 수 있습니다. 로컬에서 테스트하려면 로컬 머신의 /etc/hosts/ 파일을 수정하여 example.com이 부하 분산기의 IP 주소를 가리키도록 하거나 curl --resolve 플래그를 사용하여 curl이 요청에 대한 부하 분산기의 IP를 사용하도록 강제합니다.

example.com의 DNS 레코드가 HTTP(S) 부하 분산기의 IP 주소로 확인되면 example.com으로 전송된 요청이 부하 분산기를 통해 라우팅됩니다. 부하 분산기는 URL 맵에 따라 관련 백엔드 서비스로 요청을 전달합니다. 또한 백엔드 서비스가 URL 마스크로 구성된 경우 서버리스 NEG는 마스크를 사용하여 요청을 적절한 Cloud Run(완전 관리형), Cloud Functions 또는 App Engine 서비스로 라우팅합니다.

Google 관리형 인증서를 사용하는 경우 기존 서비스를 외부 HTTP(S) 부하 분산기로 마이그레이션하면 보통 1시간 이하인 다운타임이 발생할 수 있습니다. 이는 부하 분산기의 IP 주소를 가리키도록 DNS 레코드를 업데이트할 때까지 외부 HTTP(S) 부하 분산기의 SSL 인증서가 프로비저닝되지 않기 때문입니다.

외부 HTTP(S) 부하 분산기 테스트

부하 분산기를 구성했으므로 부하 분산기의 IP 주소로 트래픽을 전송할 수 있습니다. 도메인을 구성한 경우 도메인 이름으로도 트래픽을 보낼 수 있습니다. 그러나 DNS 전파를 완료하려면 시간이 걸릴 수 있으므로 IP 주소를 사용하여 테스트를 시작할 수 있습니다.

  1. Google Cloud Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 방금 만든 부하 분산기를 클릭합니다.
  3. 부하 분산기의 IP 주소를 확인합니다.
  4. HTTP 부하 분산기를 만든 경우 http://IP_ADDRESS로 이동하여 웹브라우저를 사용하여 부하 분산기를 테스트할 수 있습니다. IP_ADDRESS부하 분산기의 IP 주소로 바꿉니다. helloworld 서비스 홈페이지로 이동해야 합니다.

    HTTPS 부하 분산기를 만든 경우 https://IP_ADDRESS로 이동한 뒤 웹브라우저를 사용하여 부하 분산기를 테스트할 수 있습니다. IP_ADDRESS부하 분산기의 IP 주소로 바꿉니다. helloworld 서비스 홈페이지로 이동해야 합니다.

    그래도 문제가 해결되지 않고 Google 관리형 인증서를 사용 중인 경우 인증서 리소스가 활성 상태인지 확인합니다. 자세한 내용은 Google 관리형 SSL 인증서 리소스 상태를 참조하세요.

    자체 서명 인증서를 테스트에 사용하면 브라우저에 경고가 표시됩니다. 브라우저가 자체 서명 인증서를 수락하도록 명시적으로 지시해야 합니다. 실제 페이지를 보려면 경고를 클릭하세요.

    또는 로컬 머신의 명령줄에서 curl을 사용할 수도 있습니다. IP_ADDRESS부하 분산기의 IPv4 주소로 바꿉니다. helloworld 서비스 홈페이지로 이동해야 합니다.

    Google 관리형 인증서를 사용하는 경우 부하 분산기의 IP 주소를 가리키는 도메인을 테스트합니다. 예:

    curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS:443
    

    자체 서명 인증서를 사용하는 경우 -k 플래그도 지정해야 합니다. curl -k 옵션을 사용해야 자체 서명 인증서가 있는 경우 curl이 작동합니다. 자체 사이트를 테스트할 때는 -k 매개변수만 사용해야 합니다. 일반적인 상황에서는 유효한 인증서가 중요한 보안 수단이므로 인증서 경고를 무시하면 안 됩니다.

  5. (선택사항) 커스텀 도메인을 사용하는 경우 업데이트된 DNS 설정이 적용될 때까지 기다려야 할 수 있습니다. 그런 다음 웹브라우저에서 도메인(예: https://test.example.com)을 테스트합니다. helloworld 서비스 홈페이지로 이동해야 합니다.

추가 구성 옵션

이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 작업은 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.

멀티 리전 부하 분산 설정

위에 설명된 예시에서는 백엔드로 제공되는 Cloud Run(완전 관리형) 서비스가 하나뿐입니다. 서버리스 NEG는 한 번에 하나의 엔드포인트만 가리킬 수 있으므로 실제로 부하 분산은 수행되지 않습니다. 외부 HTTP(S) 부하 분산기는 프런트엔드 역할만 하며 지정된 helloworld 앱 엔드포인트로 트래픽을 프록시합니다. 그러나 서비스의 가용성을 개선하고 사용자의 지연 시간을 개선하기 위해 둘 이상의 리전에서 Cloud Run(완전 관리형) 앱을 제공할 수 있습니다.

백엔드 서비스에 여러 NEG가 포함된 경우 부하 분산기는 사용 가능한 가장 가까운 리전의 서버리스 NEG로 요청을 전달하여 트래픽을 분산합니다. 그러나 백엔드 서비스는 리전당 서버리스 NEG 하나만 포함할 수 있습니다. 여러 리전에서 Cloud Run(완전 관리형) 서비스를 사용하려면 리전 간 라우팅을 설정해야 합니다. 전 세계 어디서나 작동하지만 사용자와 가장 가까운 리전의 사용자 요청을 처리하는 단일 URL 스키마를 사용할 수 있어야 합니다. 가장 가까운 리전을 사용할 수 없거나 용량이 부족하면 요청이 다른 리전으로 라우팅됩니다.

멀티 리전 제공을 설정하려면 모든 리전 Cloud Run(완전 관리형) 배포가 호환되고 모든 리전의 트래픽을 처리할 수 있는 프리미엄 네트워크 등급을 사용해야 합니다.

멀티 리전 부하 분산기를 설정하려면 다음 안내를 따르세요.

  1. 서로 다른 리전에 2개의 Cloud Run(완전 관리형) 서비스를 설정합니다. 유럽 리전과 미국 리전에 각각 2개의 Cloud Run(완전 관리형) 서비스를 배포했다고 가정합시다.
  2. 다음 설정을 사용하여 외부 HTTP(S) 부하 분산기를 만듭니다.
    1. 서버리스 NEG 2개로 전역 백엔드 서비스를 설정합니다.
      1. 유럽에 배포된 Cloud Run 서비스와 동일한 리전에 첫 번째 NEG를 만듭니다.
      2. 미국에 배포된 Cloud Run 서비스와 동일한 리전에 두 번째 NEG를 만듭니다.
    2. 프리미엄 네트워크 등급으로 프런트엔드 구성을 설정합니다.

나머지 설정은 이전에 설명한 것과 동일해도 됩니다. 설정 결과는 다음과 같습니다.

서버리스 앱에 트래픽 분산(확대하려면 클릭)
서버리스 앱의 멀티 리전 라우팅(장애 조치 포함)

리전 라우팅 설정

여러 리전에서 애플리케이션을 제공하는 일반적인 이유는 데이터 지역 요구사항을 충족하기 위해서입니다. 예를 들어 유럽 사용자의 요청이 항상 유럽에 있는 리전에서 제공되도록 할 수 있습니다. 이를 설정하려면 EU 사용자와 EU 이외의 사용자를 위한 별도의 URL이 있는 URL 스키마가 필요하며 EU 사용자를 EU URL로 안내해야 합니다.

이러한 시나리오에서는 URL 맵을 사용하여 특정 URL의 요청을 해당 리전으로 라우팅합니다. 이렇게 설정하면 한 리전에 대한 요청이 다른 리전으로 전달되지 않습니다. 이렇게 하면 리전 간 격리할 수 있습니다. 반면 리전에 장애가 발생해도 요청이 다른 리전으로 라우팅되지 않습니다. 따라서 이 설정은 서비스의 가용성을 높이지 않습니다.

리전 라우팅을 설정하려면 단일 전달 규칙에서 여러 리전을 결합할 수 있도록 프리미엄 네트워크 등급을 사용해야 합니다.

리전 라우팅을 사용하여 부하 분산기를 설정하려면 다음 안내를 따르세요.

  1. 서로 다른 리전에 2개의 Cloud Run(완전 관리형) 서비스를 설정합니다. 유럽의 리전에 hello-world-eu, 미국 리전에 hello-world-us로 두 개의 Cloud Run(완전 관리형) 서비스를 배포했다고 가정합니다.
  2. 다음 설정을 사용하여 외부 HTTP(S) 부하 분산기를 만듭니다.
    1. 유럽에서 서버리스 NEG를 사용하여 백엔드 서비스를 설정합니다. 서버리스 NEG는 유럽에 배포된 Cloud Run(완전 관리형) 서비스와 동일한 리전에 생성해야 합니다.
    2. 미국에서 다른 서버리스 NEG로 두 번째 백엔드 서비스를 설정합니다. 이 서버리스 NEG는 미국에 배포된 Cloud Run 서비스와 동일한 리전에 생성해야 합니다.
    3. 모든 요청이 미국 백엔드 서비스로 라우팅되는 동시에 하나의 URL 집합이 유럽 백엔드 서비스로 라우팅되도록 적절한 호스트 및 경로 규칙을 사용하여 URL 맵을 설정합니다.
    4. 프리미엄 네트워크 등급으로 프런트엔드 구성을 설정합니다.

나머지 설정은 이전에 설명한 것과 동일해도 됩니다. 설정 결과는 다음과 같습니다.

서버리스 앱에 트래픽 분산(확대하려면 클릭)
서버리스 앱의 리전별 라우팅(장애 조치 없음)

URL 마스크 사용

서버리스 NEG를 만들 때 특정 Cloud Run(완전 관리형) 서비스를 선택하는 대신 URL 마스크를 사용하여 동일한 도메인에서 제공되는 여러 서비스를 가리킬 수 있습니다. URL 마스크는 URL 스키마의 템플릿입니다. 서버리스 NEG는 이 템플릿을 사용하여 수신 요청의 URL에서 서비스 이름을 추출하고 요청을 적절한 서비스에 매핑합니다.

URL 마스크는 Google Cloud가 배포된 서비스에 제공하는 기본 주소가 아닌 커스텀 도메인에 서비스가 매핑되는 경우에 특히 유용합니다. URL 마스크를 사용하면 애플리케이션이 커스텀 URL 패턴을 사용하는 경우에도 단일 규칙으로 여러 서비스와 버전을 타겟팅할 수 있습니다.

아직 읽어보지 않았다면 서버리스 NEGS 개요: URL 마스크를 읽어보세요.

URL 마스크 구성

부하 분산기의 URL 마스크를 구성하려면 서비스의 URL로 시작합니다. 이 예시에서는 https://example.com/login에서 실행되는 샘플 서버리스 앱을 사용합니다. 앱의 login 서비스가 제공될 URL입니다.

  1. URL에서 http 또는 https를 삭제합니다. example.com/login이 남았습니다.
  2. 서비스 이름을 URL 마스크의 자리표시자로 바꿉니다.
    1. Cloud Run(완전 관리형): Cloud Run(완전 관리형) 서비스 이름을 자리표시자 <service>로 바꿉니다. Cloud Run(완전 관리형) 서비스에 연결된 태그가 있는 경우 태그 이름을 자리표시자 <tag>으로 바꿉니다. 이 예시에서 남은 URL 마스크는 example.com/<service>입니다.
    2. Cloud Functions: 함수 이름을 자리표시자 <function>으로 바꿉니다. 이 예시에서 남은 URL 마스크는 <function>.example.com입니다.
    3. App Engine: 서비스 이름을 자리표시자 <service>로 바꿉니다. 서비스에 연결된 버전이 있는 경우 버전을 자리표시자 <version>으로 바꿉니다. 이 예시에서 남은 URL 마스크는 example.com/<service>입니다.
  3. (선택 사항) URL의 경로 부분에서 서비스 이름(또는 함수, 버전, 태그)을 추출할 수 있으면 도메인을 생략할 수 있습니다. URL 마스크의 경로 부분은 첫 번째 / 문자로 구분됩니다. URL 마스크에 /가 없으면 마스크는 호스트만 나타내는 것으로 이해됩니다. 따라서 이 예시에서는 URL 마스크를 /<service> 또는 /<function>으로 줄일 수 있습니다.

    마찬가지로 URL의 호스트 부분에서 서비스 이름을 추출할 수 있으면 URL 마스크에서 경로를 모두 생략할 수 있습니다.

    또한 첫 번째 자리표시자 앞에 오는 모든 호스트 또는 하위 도메인 구성요소와 마지막 자리표시자 다음에 오는 모든 경로 구성요소를 생략할 수 있습니다. 이러한 경우 자리표시자는 구성요소에 필요한 정보를 캡처합니다.

다음은 이러한 규칙을 보여주는 몇 가지 예시입니다.

Cloud Run

이 표에서는 example.com이라는 커스텀 도메인이 있고 모든 Cloud Run(완전 관리형) 서비스가 이 도메인에 매핑되어 있다고 가정합니다.

서비스, 태그 이름 Cloud Run(완전 관리형) 커스텀 도메인 URL URL 마스크
서비스: 로그인 https://login-home.example.com/web <service>-home.example.com
서비스: 로그인 https://example.com/login/web example.com/<service> 또는 /<service>
서비스: 로그인, 태그: 테스트 https://test.login.example.com/web <tag>.<service>.example.com
서비스: 로그인, 태그: 테스트 https://example.com/home/login/test example.com/home/<service>/<tag> 또는 /home/<service>/<tag>
서비스: 로그인, 태그: 테스트 https://test.example.com/home/login/web <tag>.example.com/home/<service>

Cloud Functions

이 표에서는 example.com이라는 커스텀 도메인이 있고 모든 Cloud Functions 서비스가 이 도메인에 매핑되어 있다고 가정합니다.

함수 이름 Cloud Functions 커스텀 도메인 URL URL 마스크
로그인 https://example.com/login /<function>
로그인 https://example.com/home/login /home/<function>
로그인 https://login.example.com <function>.example.com
로그인 https://login.home.example.com <function>.home.example.com

App Engine

이 표에서는 example.com이라는 커스텀 도메인이 있고 모든 App Engine 서비스가 이 도메인에 매핑되어 있다고 가정합니다.

서비스 이름, 버전 App Engine 커스텀 도메인 URL URL 마스크
서비스: 로그인 https://login.example.com/web <service>.example.com
서비스: 로그인 https://example.com/home/login/web example.com/home/<service>, 또는 /home/<service>
서비스: 로그인, 버전: 테스트 https://test.example.com/login/web <version>.example.com/<service>
서비스: 로그인, 버전: 테스트 https://example.com/login/test example.com/<service>/<version>

URL 마스크를 사용하여 서버리스 NEG 만들기

Console

새 부하 분산기의 경우 이 주제의 앞에서 설명한 동일한 엔드 투 엔드 프로세스를 사용할 수 있습니다. 백엔드 서비스를 구성할 때 특정 서비스를 선택하는 대신 URL 마스크를 입력합니다.

기존 부하 분산기가 있는 경우 백엔드 구성을 수정하여 서버리스 NEG가 특정 서비스 대신 URL 마스크를 가리키도록 할 수 있습니다.

URL 마스크 기반 서버리스 NEG를 기존 백엔드 서비스에 추가하려면 다음 안내를 따르세요.

  1. Google Cloud Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 백엔드 서비스를 수정할 부하 분산기의 이름을 클릭합니다.
  3. 부하 분산기 세부정보 페이지에서 수정 을 클릭합니다.
  4. HTTP(S) 부하 분산기 수정 페이지에서 백엔드 구성을 클릭합니다.
  5. 백엔드 구성 페이지에서 수정하려는 백엔드 서비스에 대해 수정 을 클릭합니다.
  6. 백엔드 추가를 클릭합니다.
  7. 서버리스 네트워크 엔드포인트 그룹 만들기를 선택합니다.
    1. 이름helloworld-serverless-neg을 입력합니다.
    2. 리전에서 us-central1을 선택합니다.
    3. 서버리스 네트워크 엔드포인트 그룹 유형에서 서버리스 앱(또는 서비스 또는 함수)을 만든 플랫폼을 선택합니다.
      1. URL 마스크 사용을 선택합니다.
      2. URL 마스크를 입력합니다. URL 마스크를 만드는 방법에 대한 자세한 내용은 URL 마스크 구성을 참조하세요.
      3. 만들기를 클릭합니다.
  8. 새 백엔드 창에서 완료를 클릭합니다.
  9. 업데이트를 클릭합니다.

gcloud: Cloud Run

샘플 URL 마스크가 example.com/<service>인 서버리스 NEG를 만들려면 다음 안내를 따르세요.

gcloud compute network-endpoint-groups create helloworld-neg-mask \
    --region=us-central1 \
    --network-endpoint-type=serverless \
    --cloud-run-url-mask="example.com/<service>"

gcloud: Cloud Functions

샘플 URL 마스크가 example.com/<function>인 서버리스 NEG를 만들려면 다음 안내를 따르세요.

gcloud compute network-endpoint-groups create helloworld-neg-mask \
    --region=us-central1 \
    --network-endpoint-type=serverless \
    --cloud-function-url-mask="example.com/<function>"

gcloud: App Engine

샘플 URL 마스크가 example.com/<service>인 서버리스 NEG를 만들려면 다음 안내를 따르세요.

gcloud compute network-endpoint-groups create helloworld-neg-mask \
    --region=us-central1 \
    --network-endpoint-type=serverless \
    --app-engine-url-mask="example.com/<service>"

부하 분산기가 URL 마스크 불일치 문제를 처리하는 방법을 알아 보려면 서버리스 NEG 관련 문제해결을 참조하세요.

Cloud CDN 사용

Cloud Run(완전 관리형) 서비스에 Cloud CDN을 사용 설정하면 사용자에게 가까운 콘텐츠를 캐싱하여 콘텐츠 전송을 최적화 할 수 있습니다.

gcloud compute backend-services update 명령어를 사용하여 외부 HTTP(S) 부하 분산기의 백엔드 서비스에서 Cloud CDN을 사용 설정할 수 있습니다.

  gcloud compute backend-services update helloworld-backend-service \
    --enable-cdn \
    --global

Cloud CDN은 Cloud Run(완전 관리형), Cloud Functions, App Engine 백엔드가 있는 백엔드 서비스에서 지원됩니다.

Google Cloud Armor 사용 설정

Google Cloud Armor는 모든 GCLB 프록시 부하 분산기에 DDoS 공격에 대한 보호 기능을 제공하는 보안 제품입니다. Google Cloud Armor는 외부 HTTP(S) 부하 분산기를 통해 액세스한 서비스에 구성 가능한 보안 정책도 제공합니다. HTTP(S) 부하 분산용 Google Cloud Armor 보안 정책에 대한 자세한 내용은 Google Cloud Armor 보안 정책 개요를 참조하세요.

Cloud Run(완전 관리형), Cloud Functions, App Engine 백엔드가 있는 백엔드 서비스에 Google Cloud Armor를 구성할 수 있지만 이 기능과 관련된 제한사항, 특히 Cloud Run(완전 관리형) 및 App Engine과 관련된 제한사항이 있습니다. Google Cloud가 이러한 서비스에 할당한 기본 URL에 대한 액세스 권한이 있는 사용자는 구성된 Google Cloud Armor 보안 정책을 뚫고 부하 분산기를 우회하여 서비스 URL로 직접 이동할 수 있습니다.

Cloud Functions를 사용하는 경우 internal-and-gclb 인그레스 설정으로 이를 완화하여 기본 cloudfunctions.net URL로 전송된 요청이나 Cloud Functions를 통해 설정된 커스텀 도메인이 차단되는지 확인합니다.

서버리스 NEG 삭제

네트워크 엔드포인트 그룹이 백엔드 서비스에 연결되어 있으면 삭제할 수 없습니다. NEG를 삭제하기 전에 백엔드 서비스에서 분리하세요.

백엔드 서비스에서 서버리스 NEG를 삭제하려면 NEG가 생성된 리전을 지정해야 합니다. helloworld-backend-service는 전역 리소스이므로 --global 플래그도 지정해야 합니다.

gcloud compute backend-services remove-backend helloworld-backend-service \
    --network-endpoint-group=helloworld-serverless-neg \
    --network-endpoint-group-region=us-central1 \
    --global

서버리스 NEG를 삭제하려면 다음 안내를 따르세요.

gcloud compute network-endpoint-groups delete helloworld-serverless-neg \
    --region=us-central1

서버리스 NEG 백엔드로 부하 분산기를 삭제하면 부하 분산기와 연결된 백엔드 서비스만 삭제됩니다. 서버리스 NEG가 자동으로 삭제되지 않습니다. 이 섹션에 나온 것처럼 서버리스 NEG를 수동으로 삭제해야 합니다.

다음 단계