외부 HTTP(S) 부하 분산기의 트래픽 관리 개요

외부 HTTP(S) 부하 분산은 다음 기능을 사용할 수 있는 고급 트래픽 관리 기능을 지원합니다.

부하 분산기의 URL 맵을 사용하여 이러한 기능을 구성합니다. 배경 정보는 다음 주제를 참조하세요.

트래픽 관리 구성요소

높은 수준에서 외부 HTTP(S) 부하 분산기는 전역 URL 맵을 사용하여 트래픽 관리를 제공합니다.

부하 분산기는 다음과 같은 상호 배타적인 기본 작업을 제공합니다.

  • 백엔드 서비스로 요청 라우팅
  • 리디렉션 수행

부하 분산기를 설정할 때 부하 분산기가 백엔드 서비스 또는 백엔드 버킷에 요청을 보내기 전에 URL 재작성 작업을 구성할 수 있습니다.

재작성 또는 리디렉션은 URL 맵의 세 가지 수준에서 적용할 수 있습니다.

  • pathRule: 경로가 일치할 때 작업 적용
  • pathMatcher: 이 pathMatcher에 일치하는 경로가 없을 때 작업 적용
  • urlMap: 호스트 규칙에 지정된 호스트가 모두 일치하지 않을 때 작업 적용

pathRules 대신 pathMatcher에서 routeRules를 사용할 수 있습니다. pathRulesrouteRules는 동일한 pathMatcher에 나올 수 없습니다. 순서가 중요하지 않은 pathRules와 달리 routeRules는 순서대로 검사합니다. routeRule은 URL 경로, HTTP 헤더, URL 쿼리 매개변수를 테스트할 수 있습니다.

사용 사례

트래픽 관리는 많은 사용 사례를 해결합니다. 이 섹션에서는 몇 가지 상위 수준의 예시를 설명합니다.

재작성

URL 재작성을 사용하면 서비스에서 사용하는 URL과 다른 URL을 외부 사용자에게 표시할 수 있습니다.

URL 재작성은 URL을 리소스와 구분합니다. 사용자가 쉽게 기억하고 사용할 수 있는 사용자 친화적인 URL에서 검색 엔진에서 쉽게 찾을 수 있는 검색 엔진 친화적인 URL로 변환하거나 내부 구현용으로 지정된 URL로 변환할 수 있습니다.

HTTP(S) 부하 분산 URL 재작성 기능:

  1. 요청에서 수신 URL을 읽습니다.
  2. 트래픽을 백엔드 서비스 또는 백엔드 버킷으로 전달하기 전에 URL을 변환하여 호스트, 경로 또는 호스트와 경로를 모두 바꿉니다.

다음 다이어그램에 표시된 예시는 다음과 같습니다.

  1. 일본의 사용자가 URL www.mydomain.com/static/images/someimage.jpg에 대한 요청을 보냅니다.
  2. 요청이 외부 HTTP(S) 부하 분산기에 도달하면 부하 분산기는 URL 맵의 정보를 사용하여 URL을 www.myorigin.com/august_snapshot/images/someimage.jpg에 재작성합니다.
  3. (선택사항) 이 예시에서 URL 맵은 요청을 커스텀 원본으로 보냅니다.
HTTP(S) 부하 분산 재작성(확대하려면 클릭)
외부 HTTP(S) 부하 분산기 재작성

구성 예시는 재작성을 참조하세요.

리디렉션

URL 리디렉션을 사용하면 한 URL에서 다른 URL로 클라이언트 요청을 리디렉션할 수 있습니다.

여기에는 다음과 같은 기능이 포함됩니다.

  • 모든 HTTP 요청을 HTTPS 요청으로 리디렉션합니다.
  • URL의 호스트, 경로 또는 호스트 및 경로 부분을 둘 다 수정하고 쿼리 매개변수를 제거하거나 보관하여 다른 URL로 리디렉션합니다.
  • 발급할 리디렉션 응답 코드를 선택합니다.

URL 리디렉션을 사용하여 다음을 수행합니다.

  • URL 단축을 제공합니다. 클라이언트 연결 URL은 상당히 짧아질 수 있습니다. 이 서비스는 긴 URL을 사용하여 웹페이지로 리디렉션합니다.
  • 웹페이지가 이동하거나 오래된 경우 링크가 깨지는 것을 방지합니다.
  • 동일한 소유자에게 속한 여러 도메인 이름이 단일 웹사이트를 참조하도록 허용합니다.
  • 필요한 리디렉션을 지원하기 위해 백엔드 서버에서 해결 방법을 구성하는 번거로움과 비효율성을 피하세요.
  • 지연 시간 감소 에지에서 생성된 리디렉션은 백엔드 엔드포인트에서 생성된 리디렉션보다 지연 시간이 짧을 수 있습니다.

HTTP-HTTPS 리디렉션은 특히 다음을 수행하는 데 도움이 됩니다.

  • 암호화된 트래픽의 규정 준수 요구사항(예: HIPAA)을 충족합니다.
  • HTTP 프로토콜로 전송된 요청을 거부하는 대신 HTTPS를 사용하여 요청을 리디렉션합니다.
  • 백엔드 서버에서 리디렉션을 구현하는 대신 Layer-7 부하 분산기 자체에서 트래픽을 리디렉션하여 애플리케이션의 보안 프로필을 개선합니다.

다음 다이어그램에 표시된 예시는 다음과 같습니다.

  1. 일본의 사용자가 GET http://example.com/img1 요청을 보냅니다.
  2. URL 맵에 정의된 리디렉션을 기준으로 부하 분산기는 HTTP/1.1 302 Found Location: https://example.com/img1 리디렉션을 다시 보내 HTTP 요청을 HTTPS 요청으로 리디렉션합니다.
  3. 사용자의 브라우저가 GET https://example.com/img1 요청을 보냅니다.
외부 HTTP(S) 부하 분산기 재작성
HTTP(S) 부하 분산 리디렉션

구성 예시는 리디렉션을 참조하세요.

지원되는 응답 코드

지원되는 리디렉션 응답 코드는 아래 표에 나와 있습니다.

응답 코드 숫자 참고
MOVED_PERMANENTLY_DEFAULT 301
FOUND 302
PERMANENT_REDIRECT 308 이 경우 요청 메서드는 유지됩니다.
TEMPORARY_REDIRECT 307 이 경우 요청 메서드는 유지됩니다.
SEE_OTHER 303

헤더 기반 및 매개변수 기반 라우팅

헤더 기반 및 매개변수 기반 라우팅을 사용하면 부하 분산기가 HTTP 헤더 및 URL 쿼리 매개변수를 기반으로 라우팅을 결정할 수 있습니다.

이 기능을 사용하면 라우팅을 위해 추가 프록시 등급(예: NGINX)을 배포하지 않고도 클라우드 아키텍처를 단순화할 수 있습니다.

외부 HTTP(S) 부하 분산기를 사용하여 다음을 수행할 수 있습니다.

  • A/B 테스트
  • 백엔드에서 실행되는 여러 서비스 집합에 고객 할당
  • 요청이 발생한 다양한 기기 카테고리를 기반으로 다양한 페이지 및 환경 제공

호스트 문자열을 기반으로 pathMatcher를 선택한 후 pathMatcherrouteRules가 URL 경로를 선택합니다. 자세한 내용은 URL 맵 개요를 참조하세요.

예시: 쿼리 매개변수 기반 라우팅으로 A/B 테스트 구성

다음 예시는 쿼리 문자열을 일치시켜 실험 및 입력을 지정하여 A/B 테스트를 수행하는 방법을 보여줍니다.

요청을 다음과 같이 처리해야 하는 경우를 가정해 보세요.

  • 쿼리 매개변수 값이 A인 모든 요청은 BackendServiceForProcessingOptionA 백엔드 서비스로 이동합니다.
  • 쿼리 매개변수 값이 B인 모든 요청은 BackendServiceForProcessingOptionB 백엔드 서비스로 이동합니다.

이러한 요구사항은 다음 표에 요약되어 있습니다.

요청 백엔드 서비스
http://test.mydomain.com?ABTest=A BackendServiceForProcessingOptionA
http://test.mydomain.com?ABTest=B BackendServiceForProcessingOptionB

전역 URL 맵에서 이를 구성하려면 다음 설정을 만드세요.

일치 작업
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].name = ABTest

pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].exactMatch = A
pathMatchers[].routeRules[].service = BackendServiceForProcessingOptionA
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].name = ABTest

pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].exactMatch = B
pathMatchers[].routeRules[].service = BackendServiceForProcessingOptionB

구성 예시는 헤더 기반 및 매개변수 기반 라우팅을 참조하세요.

백엔드로 요청 라우팅

HTTP(S) 부하 분산에서 트래픽의 백엔드는 2단계 접근 방식을 사용하여 결정됩니다.

  • 부하 분산기는 백엔드가 있는 백엔드 서비스를 선택합니다. 백엔드는 다음일 수 있습니다.

    • 비관리형 인스턴스 그룹의 Compute Engine 가상 머신(VM) 인스턴스
    • 관리형 인스턴스 그룹(MIG)의 Compute Engine VM
    • 영역 네트워크 엔드포인트 그룹(NEG)의 Google Kubernetes Engine(GKE) 노드를 통한 컨테이너
    • 인터넷 NEG에서 Google Cloud 외부의 커스텀 출처
    • 백엔드 버킷의 Cloud Storage

    부하 분산기는 전역 URL 맵에 정의된 규칙에 따라 백엔드 서비스를 선택합니다.

  • 백엔드 서비스는 전역 백엔드 서비스에 정의된 정책을 기반으로 백엔드 인스턴스를 선택합니다.

라우팅을 구성할 때는 다음 모드 중에서 선택할 수 있습니다.

  • pathRules를 사용하여 단순한 호스트 및 경로 테스트
  • routeRules를 사용하여 고급 요청 테스트

각 URL 맵에서 단순한 호스트 및 경로 규칙 또는 고급 호스트, 경로, 라우팅 규칙을 선택할 수 있습니다. 두 모드는 상호 배타적입니다. 각 URL 맵에는 하나의 모드만 포함하거나 다른 모드도 포함할 수도 있습니다.

단순한 호스트 및 경로 규칙

단순한 호스트 및 경로 규칙에서 URL 맵은 URL 맵 개요에 설명된 대로 작동합니다.

다음 다이어그램은 단순한 호스트 및 경로 규칙의 논리적 흐름을 보여줍니다.

단순한 URL 맵 흐름
단순한 URL 맵 흐름

요청은 먼저 호스트 규칙을 사용하여 평가됩니다. 호스트는 요청에 의해 지정된 도메인입니다. host 요청이 hosts 필드에 있는 항목 중 하나와 일치하는 경우 관련 경로 일치자가 사용됩니다.

다음으로 경로 일치자가 평가됩니다. 경로 규칙은 가장 긴 길이의 경로부터 일치 방식으로 평가되며 원하는 순서로 경로 규칙을 지정할 수 있습니다. 가장 구체적인 일치 항목이 발견되면 해당 백엔드 서비스로 요청이 라우팅됩니다. 요청이 일치하지 않으면 기본 백엔드 서비스가 사용됩니다.

일반적인 단순한 호스트 및 경로 규칙은 동영상 트래픽이 video-backend-service로 이동하고 다른 모든 트래픽은 web-backend-service로 이동합니다.

$ gcloud compute url-maps describe ext-https-map
defaultService: global/backendServices/web-backend-service
hostRules:
- hosts:
  - '*'
  pathMatcher: pathmap
name: ext-https-map
pathMatchers:
- defaultService: global/backendServices/web-backend-service
  name: pathmap
  pathRules:
  - paths:
    - /video
    - /video/*
    service: global/backendServices/video-backend-service

구성 예시는 호스트 및 경로를 참조하세요.

고급 호스트, 경로, 라우팅 규칙

고급 호스트, 경로, 라우팅 규칙은 간단한 호스트 및 경로 규칙과 비교하여 추가 구성 옵션을 제공합니다. 이러한 옵션은 고급 트래픽 관리 패턴을 지원하고 일부 시맨틱스를 수정합니다. 예를 들어 라우팅 규칙은 가장 긴 길이의 경로부터 일치 시맨틱스를 사용하는 대신 순서대로 실행됩니다.

앞의 단순한 호스트 및 경로 규칙 예시에서와 같이 전역 URL 맵을 사용하여 고급 트래픽 관리를 구성할 수 있지만 pathMatchers[].pathRules[] 대신 pathMatchers[].routeRules[]를 사용합니다.

다음 섹션에서는 고급 호스트, 경로, 라우팅 규칙 구성요소를 설명합니다.

호스트 규칙

요청이 부하 분산기에 도달하면 요청의 host 필드는 URL 맵에서 정의된 hostRules에 대해 평가됩니다. 각 호스트 규칙은 하나 이상의 호스트 목록과 단일 경로 일치자(pathMatcher)로 구성됩니다. hostRules가 정의되지 않은 경우 요청은 defaultService로 라우팅됩니다.

자세한 내용은 전역 URL 맵 API 문서hostRules[]defaultService를 참조하세요.

경로 일치자

요청이 호스트 규칙과 일치하면 부하 분산기는 호스트에 해당하는 경로 일치자를 평가합니다.

경로 일치자는 다음으로 구성됩니다.

  • 하나 이상의 경로 규칙(pathRules) 또는 라우팅 규칙(routeRules)
  • 일치하는 다른 백엔드 서비스가 없을 때 실행되는 기본 규칙. 규칙에는 다음과 같은 상호 배타적인 옵션이 있습니다.

    • 기본 서비스는 일치하는 다른 백엔드 서비스가 없을 때 라우팅할 기본 백엔드 서비스를 지정합니다.
    • 기본 리디렉션은 일치하는 다른 백엔드 서비스가 없을 때 리디렉션할 URL을 지정합니다.

기본 서비스에 부하 분산기를 구성하면 요청을 기본 서비스로 보내기 전에 URL을 재작성하도록 추가로 구성할 수 있습니다.

자세한 내용은 전역 URL 맵 API 문서pathMatchers[], pathMatchers[].pathRules[], pathMatchers[].routeRules[]를 참조하세요.

경로 규칙

경로 규칙(pathRules)은 / 또는 /video와 같은 하나 이상의 URL 경로를 지정합니다. 경로 규칙은 일반적으로 앞에서 설명한 단순한 호스트 및 경로 기반 라우팅 유형을 위한 것입니다.

자세한 내용은 전역 URL 맵 API 문서pathRules[]를 참조하세요.

라우팅 규칙

라우팅 규칙(routeRules)은 들어오는 요청의 정보를 일치시켜 이 일치를 기반으로 라우팅을 결정합니다.

라우팅 규칙에는 다양한 일치 규칙(matchRules) 및 라우팅 작업(routeAction)이 포함될 수 있습니다.

일치 규칙은 HTTP(S) 요청의 경로, 헤더, 쿼리 매개변수를 기반으로 들어오는 요청을 평가합니다. 일치 규칙은 다양한 유형의 일치(예: 프리픽스 일치) 및 수정자(예: 대소문자 구분 안 함)를 지원합니다. 예를 들어 커스텀 정의 HTTP 헤더의 존재 여부에 따라 HTTP(S) 요청을 백엔드 세트로 보낼 수 있습니다.

matchRules에서 지원하는 옵션의 자세한 목록은 전역 URL 맵 API 문서matchRules[]를 참조하세요.

경로 규칙이 여러 개인 경우 부하 분산기가 규칙을 순서대로 실행하여 일치, 라우팅, 기타 작업을 위한 커스텀 로직을 지정할 수 있습니다.

지정된 경로 규칙 내에서 첫 번째 일치가 이루어지면 부하 분산기는 일치 규칙 평가를 중지하고 나머지 일치 규칙은 무시됩니다.

Google Cloud는 다음 작업을 수행합니다.

  1. 요청과 일치하는 첫 번째 일치 규칙을 찾습니다.
  2. 다른 일치 규칙을 찾지 않습니다.
  3. 해당 라우팅 작업에 해당하는 작업을 적용합니다.

다음 표에 설명된 대로 경로 규칙에는 여러 구성요소가 있습니다.

경로 규칙 구성요소(API field name) 설명
우선순위(priority) 라우팅 규칙 평가 순서를 결정하기 위해 지정된 경로 일치자 내의 경로 규칙에 할당된 0~2,147,483,647(즉, (2^31)-1)의 숫자입니다.

가장 높은 우선순위는 0입니다. 가장 낮은 우선순위는 2147483647입니다. 예를 들어 우선순위가 4인 규칙이 우선 순위가 25인 규칙보다 먼저 평가됩니다. 요청과 일치하는 첫 번째 규칙이 적용됩니다.

우선순위 번호에는 차이가 있을 수 있으며 연속적일 필요는 없습니다. 우선순위가 같은 여러 규칙을 만들 수 없습니다.
설명(description) 최대 1,024자에 대한 설명입니다(선택사항).
서비스(service) 이 규칙이 일치하는 경우 트래픽이 전송되는 백엔드 서비스 리소스의 전체 또는 부분 URL입니다.
일치 규칙(matchRules) 요청에 대해 평가되는 하나 이상의 규칙입니다. 이러한 matchRules는 경로, HTTP 헤더, 쿼리(GET) 매개변수와 같은 요청의 HTTP 속성의 전체 또는 하위 집합을 일치시킬 수 있습니다.

matchRule 내에서 routeRulerouteActions를 적용하려면 모든 일치 기준을 충족해야 합니다. routeRule에 여러 개의 matchRules가 있으면 요청이 routeRulematchRules와 일치하는 경우 routeRulerouteActions가 적용됩니다.
라우팅 작업(routeAction) 일치 규칙 기준이 충족되면 수행할 URL 재작성 작업을 지정할 수 있습니다.
리디렉션 작업(urlRedirect) 일치 규칙 기준이 충족되면 HTTP 리디렉션으로 응답하도록 작업을 구성할 수 있습니다. 이 필드는 라우팅 작업과 함께 사용할 수 없습니다.

자세한 내용은 전역 URL 맵 API 문서의 다음 필드를 참조하세요.

  • routeRules[]
  • routeRules[].priority
  • routeRules[].description
  • routeRules[].service
  • routeRules[].matchRules[]
  • routeRules[].routeAction
  • routeRules[].urlRedirect

일치 규칙

일치 규칙(matchRules)은 요청에 대한 1개 이상의 속성을 일치시키고 라우팅 규칙에 지정된 조치를 취합니다. 다음 목록은 일치 규칙을 사용하여 일치시킬 수 있는 요청 속성의 몇 가지 예시를 제공합니다.

  • 호스트: 호스트 이름은 URL의 도메인 이름 부분입니다. 예를 들어 URL http://example.net/video/hd의 호스트 이름 부분은 example.net입니다. 요청에서 호스트 이름은 curl 명령어 예시에 표시된 대로 Host 헤더에서 가져옵니다. 여기서 10.1.2.9는 부하 분산된 IP 주소입니다.

    curl -v http://10.1.2.9/video/hd --header 'Host: example.com'
    
  • 경로는 호스트 이름을 따릅니다(예: /images). 전체 경로 또는 경로의 앞 부분만 일치시킬지 여부는 규칙에서 지정할 수 있습니다.

  • HTTP 헤더 같은 다른 HTTP 요청 매개변수는 쿠키 일치뿐만 아니라 쿼리 매개변수(GET 변수) 기반의 일치도 허용합니다. 헤더 값에 대한 정규 표현식 일치는 지원되지 않습니다.

지원되는 일치 규칙의 전체 목록은 전역 URL 맵 API 문서pathMatchers[].routeRules[].matchRules[]를 참조하세요.

트래픽 관리 구성

Cloud Console, gcloud 또는 Cloud Load Balancing API를 사용하여 트래픽 관리를 구성할 수 있습니다. 선택한 구성 환경 내에서 YAML 구성을 사용하여 트래픽 관리를 설정합니다.

이러한 YAML 파일을 작성하는 데 도움이 되는 리소스는 다음과 같습니다.

제한사항

  • UrlMap.tests는 현재 단순한 라우팅의 테스트를 지원합니다.
  • gcloud import 명령어는 defaultService, defaultRouteAction, defaultUrlRedirect 같은 URL 맵의 최상위 필드를 삭제하지 않습니다. 해결 방법은 최상위 필드 값이 업데이트된 YAML 파일을 사용하여 새 URL 맵을 생성한 후 해당 대상 프록시와 연결하는 것입니다.
  • 정규 표현식은 지원되지 않습니다.
  • 헤더 추가 또는 삭제와 같은 URL 맵의 헤더 작업은 지원되지 않습니다.
  • 복잡성 제한:
    • pathMatcherrouteRules 50개를 초과할 수 없습니다.
    • routeRulematchRules 50개를 초과할 수 없습니다.
    • matchRuleheaderMatches 50개를 초과할 수 없습니다.
    • matchRulequeryParameterMatches 50개를 초과할 수 없습니다.
  • pathRulesrouteRules가 있는 서로 다른 pathMatcher가 있으면 안 됩니다.
  • routeRules에서 백엔드 버킷을 지정할 수 없습니다.

다음 단계