URL 맵 개념

Google Cloud Platform HTTP(S) 부하 분산기는 URL 맵을 사용하여 수신 요청을 백엔드 서비스백엔드 버킷으로 전달합니다.

모든 HTTP(S) 부하 분산기에는 URL 맵이 있어야 합니다. GCP Console을 사용하여 HTTP(S) 부하 분산기를 만들면 부하 분산기의 이름과 URL 맵은 동일합니다. 각 URL 맵은 트래픽을 기본 백엔드 서비스 또는 기본 백엔드 버킷으로 보냅니다. 이 기본값 외에도 URL의 요청된 호스트 이름과 경로 부분을 기반으로 다른 백엔드 서비스 및 백엔드 버킷에 트래픽을 전달할 수 있습니다.

예를 들어 https://example.com/video 요청을 한 백엔드 서비스로, https://example.com/audio 요청을 다른 백엔드 서비스로, https://example.com/graphics 요청을 Cloud Storage 백엔드 버킷으로 모두 단일 URL 맵 및 HTTP(S) 부하 분배기 내에서 라우팅할 수 있습니다.

이 내용을 읽으려면 전반적인 HTTP(S) 부하 분산 개념에 익숙해야 합니다.

이 문서는 URL 맵이 HTTPS(S) 부하 분산기로 작동하는 방식을 설명합니다. 서비스 메시를 위한 GCP의 완전 관리형 트래픽 제어 영역 Traffic Director는 URL 맵을 사용하고 추가 구성 매개변수를 지원합니다. 이러한 매개변수에 대한 상세 정보는 Traffic Director 문서를 참조하세요.

URL 맵 정보

요청이 부하 분산기에 도달하면 부하 분산기는 URL 맵의 구성에 따라 이 요청을 특정 백엔드 서비스 또는 백엔드 버킷으로 라우팅합니다.

예를 들어 다음과 같은 설정을 가정하겠습니다.

  • 하나의 IP 주소. 조직을 향한 모든 요청은 동일한 IP 주소 및 동일한 부하 분산기로 이동합니다. 요청 URL을 기반으로 다른 백엔드 서비스로 트래픽이 전달됩니다.
  • 두 개의 도메인
    • 학습 동영상을 호스팅하는 example.net
    • 조직 웹사이트를 호스팅하는 example.org
  • 네 개의 서버 집합
    • 조직 웹사이트 호스팅(백엔드 서비스: org-site)
    • 전체 학습 동영상 웹사이트 호스팅합니다(백엔드 서비스: video-site)
    • 고화질(HD) 학습 동영상 호스팅(백엔드 서비스: video-hd)
    • 일반 화질(SD) 학습 동영상을 호스팅(백엔드 서비스: video-sd)

다음 사항을 목표로 합니다.

  • example.org(또는 example.org 이외의 다른 도메인)에 org-site 백엔드 서비스로 이동 요청
  • example.net에 더 구체적인 경로와 일치시키지 않고 video-site 백엔드 서비스로 이동 요청
  • example.net/video/hd/*video-hd 백엔드 서비스로 이동 요청
  • example.net/video/sd/*video-sd 백엔드 서비스로 이동 요청
서비스 설정 예시(확대하려면 클릭)
서비스 설정 예시(확대하려면 클릭)

이를 설정하는 URL 맵을 만들 수 있습니다. 다음 섹션에서는 작업할 URL 맵 구성요소에 대해 설명합니다.

URL 맵 구성요소

URL 맵은 URL에 대한 요청을 백엔드 서비스 또는 백엔드 버킷으로 보내는 GCP 구성 리소스입니다. 이를 위해 URL 맵은 처리하는 각 URL의 호스트 이름 및 경로 부분을 사용합니다.

  • 호스트 이름: 호스트 이름은 URL의 도메인 이름 부분입니다. 예를 들어 URL http://example.net/video/hd의 호스트 이름 부분은 example.net입니다.
  • 경로: URL에서 호스트 이름 다음에 나오는 부분입니다. 예를 들어 URL http://example.net/video/hd의 경로 부분은 /video/hd입니다.

어떤 백엔드 서비스 또는 백엔드 버킷이 들어오는 요청을 수신할지 다음 URL 맵 구성 매개변수를 사용하여 제어합니다.

기본 URL 맵 흐름(확대하려면 클릭)
기본 URL 맵 흐름(확대하려면 클릭)
  • 기본 서비스 또는 기본 백엔드 버킷: URL 맵을 만들 때 기본 백엔드 서비스 또는 기본 백엔드 버킷 중 하나를 지정해야 하지만, 둘 다 지정할 수는 없습니다. 이 기본값은 해당되는 호스트 규칙이 있는 경우를 제외하고 호스트 이름을 포함하는 URL에 대해 GCP가 요청을 보낼 백엔드 서비스 또는 버킷을 나타냅니다.

  • 호스트 규칙: 호스트 규칙은 하나 이상의 연결된 호스트 이름으로 전송된 요청을 단일 경로 일치자로 보냅니다. URL의 호스트 이름 부분은 호스트 규칙에 구성된 호스트 이름 집합과 정확하게 일치합니다. http://example.net/video/hd에 대한 요청을 경로 일치 프로그램으로 보내려면 최소한 호스트 이름 example.net을 포함하는 단일 호스트 규칙이 필요합니다. 같은 호스트 규칙이 다른 호스트 이름에 대한 요청을 처리할 수도 있지만, 동일한 경로 일치자로 전달할 것입니다. 요청을 다른 경로 일치자에게 전달하려면 다른 호스트 규칙을 사용해야합니다. 한 URL 맵 내의 두 호스트 규칙은 동일한 호스트 이름을 포함할 수 없습니다. 호스트 규칙에 와일드 카드 문자 *를 지정하여 모든 호스트 이름을 일치시킬 수 있습니다. 예를 들어 URL http://example.org, http://example.net/video/hd, http://example.com/audio에 대해 세 개의 호스트 이름 example.org, example.net, example.com*를 호스트 규칙에 지정하여 일치될 수 있습니다. 호스트 이름 일부를 와일드 카드 문자 *와 일치시킬 수도 있습니다. 예를 들어 *.example.net 호스트 규칙은 foo.example.netbar.example.net 호스트 이름과 일치합니다.

  • 경로 일치자: 경로 일치자는 호스트 규칙에서 참조하는 구성 매개변수입니다. URL의 경로 부분과 요청을 처리할 백엔드 서비스 또는 백엔드 버킷 간의 관계를 정의합니다. 경로 일치자는 다음 두 요소로 구성됩니다.

    • 경로 일치자 기본 서비스 또는 경로 일치자 기본 백엔드 버킷: 각 경로 일치자에 대해 기본 백엔드 서비스 또는 기본 백엔드 버킷 중 하나를 반드시 지정해야 하지만, 둘 다 지정할 수는 없습니다. 이 기본값은 호스트 이름이 경로 일치자와 연관된 호스트 규칙에 일치하는 동시에 URL 경로가 경로 일치자의 어떤 경로 규칙과도 일치하지 않는 URL에 대해 GCP가 요청을 보낼 백엔드 서비스 또는 버킷을 나타냅니다.

    • 경로 규칙: 각 경로 일치자에 대해 URL 경로를 단일 백엔드 서비스 또는 백엔드 버킷에 매핑하는 키-값 쌍이 경로 규칙을 하나 이상 지정할 수 있습니다. 다음 섹션인 작업 순서에는 경로 규칙이 작동하는 방식에 대한 자세한 정보가 포함되어 있습니다.

작업 순서

요청된 URL의 지정된 호스트 이름경로의 경우 GCP는 URL 맵에 구성된 대로 다음 절차를 사용하여 올바른 백엔드 서비스 또는 백엔드 버킷으로 요청을 보냅니다.

  • URL 맵에 URL 호스트 이름을 위한 호스트 규칙이 없는 경우, GCP는 URL 맵의 기본 백엔드 서비스 또는 기본 백엔드 버킷으로 요청을 전달합니다.

  • URL 맵에 URL 호스트 이름을 포함하는 호스트 규칙이 있는 경우 해당 호스트 규칙이 참조하는 경로 일치자는 다음과 같이 참조됩니다.

    • 경로 일치자가 URL 경로와 정확히 일치하는 경로 규칙을 포함할 경우 GCP는 해당 경로 규칙의 백엔드 서비스 또는 백엔드 버킷으로 요청을 전달합니다.

    • 경로 일치자가 URL 경로와 정확하게 일치하는 경로 규칙을 포함하지 않지만 경로가/*로 끝나고 프리픽스가 URL 경로의 가장 긴 부분과 일치하는 경로 규칙을 포함하는 경우, GCP는 해당 경로 규칙의 백엔드 서비스 또는 백엔드 버킷으로 요청을 전달합니다. 예를 들어 두 경로 일치자 규칙 /video/hd/movie1/video/hd/*를 포함하는 URL 맵에 대해 URL이 정확하게 일치하는 경로 /video/hd/movie1을 포함할 경우, 그 경로 규칙에 일치됩니다.

    • 앞의 조건이 모두 참이 아닐 경우 GCP는 정의에 따라 경로 일치자의 기본 백엔드 서비스 또는 기본 백엔드 버킷으로 요청을 전달합니다.

경로 일치자 제약

경로 일치자 및 경로 규칙에는 다음과 같은 제약이 있습니다.

  • 경로 규칙은 슬래시 문자(/) 다음에만 와일드 카드 문자(*)를 포함할 수 있습니다. 예를 들어 경로 규칙에서 /videos/*/videos/hd/*는 유효하지만 /videos*/videos/hd*는 허용되지 않습니다.

  • 경로 규칙은 정규 표현식 또는 하위 문자열 일치를 사용하지 않습니다. 예를 들어 /videos/hd 또는 /videos/hd/* 대한 경로 규칙은 /video/hd-abcd 경로가 있는 URL에 적용되지 않습니다. 그러나 /video/*에 대한 경로 규칙은 해당 경로에 적용됩니다.

  • 경로 일치자(및 URL 맵 일반)은 Apache LocationMatch 지시문과 같은 기능을 제공하지 않습니다. /videos/hd-abcd/videos/hd-pqrs와 같이 공통 프리픽스를 갖는 동적 URL 경로를 생성하는 애플리케이션이 있고, 이 경로에 대한 요청을 각각 다른 백엔드 서비스에 보내야 하는 경우 URL 맵을 사용하여 이를 수행하지 못할 수도 있습니다. 동적 URL이 몇 개만 포함된 간단한 경우에는 제한된 경로 규칙 집합으로 경로 일치자를 만드는 것이 가능할 수도 있습니다. 보다 복잡한 경우에는 백엔드 VM에서 경로 기반 정규 표현식 일치를 수행해야 합니다.

호스트 이름은 단일 호스트 규칙만 참조할 수 있고 호스트 규칙은 단일 경로 일치자만 참조할 수 있습니다. 그러나 단일 호스트 규칙은 복수의 호스트 이름들을 처리할 수 있으며 단일 경로 일치자는 복수의 호스트 규칙에 의해 참조될 수 있습니다. 따라서 각 고유 URL은 하나의 백엔드 서비스 또는 백엔드 버킷으로만 전달됩니다.

  • GCP는 URL의 호스트 이름 부분을 사용하여 단일 호스트 규칙 및 참조된 경로 일치자를 선택합니다.
  • 경로 일치자에서 동일한 경로에 대해 둘 이상의 경로 규칙을 만들 수 없습니다. 예를 들어 /videos/hd에 대한 요청은 하나 이상의 백엔드 서비스 또는 백엔드 버킷으로 전달될 수 없습니다. 백엔드 서비스는 여러 영역 및 리전에서 백엔드 인스턴스 그룹 또는 백엔드 네트워크 엔드포인트 그룹을 가질 수 있으며, 다중 지역 스토리지 클래스를 사용하는 백엔드 버킷을 만들 수 있습니다.

URL 맵 및 프로토콜

URL 맵이 대상 HTTP 프록시 및 대상 HTTPS 프록시 모두에 의해 참조되는 경우에는 동일한 URL 맵, 호스트 규칙, 경로 일치자를 사용하여 클라이언트가 제출한 HTTP 및 HTTPs 요청을 둘 다 처리할 수 있습니다.

URL 맵은 클라이언트와 부하 분산기 사이의 연결에 프로토콜 리디렉션을 제공하지 않습니다. 예를 들어 URL 맵을 사용하여 클라이언트 시스템이 HTTP에서 HTTPS로 전환하도록 지시할 수 없습니다. 모든 클라이언트 프로토콜 리디렉션을 백엔드 VM에서 구현해야 합니다.

가장 간단한 URL 맵

가장 간단한 URL 맵은 기본 백엔드 서비스 또는 기본 백엔드 버킷만 포함합니다. 호스트 규칙도, 경로 일치자도 없습니다. 모든 요청된 URL은 기본 백엔드 서비스 또는 기본 백엔드 버킷 중 정의된 쪽에 의해 처리됩니다.

기본 백엔드 서비스를 정의하면 GCP는 백엔드 서비스 구성에 따라 백엔드 인스턴스 그룹 또는 백엔드 네트워크 엔드포인트 그룹에 요청을 보냅니다.

기본값을 제외한 규칙이 없는 URL 맵(확대하려면 클릭)
기본값을 제외한 규칙이 없는 URL 맵(확대하려면 클릭)

URL 맵 예시

다음 예시는 URL 맵의 작업 순서를 보여줍니다. 개념적 단순성을 위해 백엔드 서비스만 사용하지만 백엔드 버킷을 대신 사용할 수도 있습니다.

다음 단계는 GCP HTTP(S) 부하 분산기의 URL 맵을 구성합니다. HTTP(S) 부하 분산기의 다른 구성요소를 만드는 방법에 대한 예시는 콘텐츠 기반 및 교차 리전 부하 분산 만들기를 참조하세요. 이 예시에서 설명하는 모든 백엔드 서비스에는 외부 체계가 있으며 HTTP, HTTPS 또는 HTTP/2 프로토콜을 사용합니다.

  1. 부하 분산기에 대한 URL 맵을 만들고 기본 백엔드 서비스를 지정합니다. 이 예시에서는 org-site라는 기존 백엔드 서비스를 참조하는 video-org-url-map이라는 URL 맵을 만듭니다.

    gcloud compute url-maps create video-org-url-map \
        --default-service=org-site
    
  2. 다음 특성을 사용하여 video-matcher라는 이름의 경로 일치자를 만듭니다.

    • 기본 백엔드 서비스는 기존 백엔드 서비스인 video-site입니다.
    • 정확한 URL 경로인 /video/hd 또는 URL 경로 프리픽스 /video/hd/*에 대한 요청을 video-hd라는 기존 백엔드 서비스에 전달하는 경로 규칙을 추가합니다.
    • 정확한 URL 경로인 /video/sd 또는 URL 경로 프리픽스 /video/sd/*에 대한 요청을 video-sd라는 이름의 기존 백엔드 서비스에 전달하는 경로 규칙을 추가합니다.
    gcloud compute url-maps add-path-matcher video-org-url-map \
        --path-matcher-name=video-matcher \
        --default-service=video-site \
        --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd
    
  3. 경로 일치자 video-matcher를 참조하는 호스트 이름 example.net에 대한 호스트 규칙을 만듭니다.

    gcloud compute url-maps add-host-rule video-org-url-map \
        --hosts=example.net \
        --path-matcher-name=video-matcher
    

video-org-url-map URL 맵은 요청된 URL을 다음과 같은 방식으로 백엔드로 전달합니다.

경로 규칙, 경로 일치자, 호스트 규칙이 표시된 URL 맵(확대하려면 클릭)
경로 규칙, 경로 일치자, 호스트 규칙이 표시된 URL 맵(확대하려면 클릭)

GCP는 아래 표에 따라 URL 요청을 처리합니다.

호스트 이름 URL 경로 선택된 백엔드 서비스 선택 이유
호스트 이름
example.org 및 다음을 제외한 모든 호스트 이름
example.net
모든 경로 org-site 호스트 이름이 URL 맵의 호스트 규칙에 없으므로 요청이 URL 맵의 기본 백엔드 서비스로 전달됩니다.
호스트 이름은 다음과 같습니다.
example.net
/video
/video/examples
video-site /video/ 또는 /video/* 대한 경로 규칙이 없으므로 요청이 기본 백엔드 서비스로 이동합니다. example.net에 대한 호스트 규칙이 경로 일치자를 참조하지만 해당 경로 일치 자에는 이러한 경로에 적용할 경로 규칙이 없습니다.
호스트 이름은 다음과 같습니다.
example.net
/video/hd
/video/hd/movie1
/video/hd/movies/movie2
/video/hd/*로 시작하는 다른 URL
video-hd example.net에 대한 호스트 규칙은 /video/hd와 일치하거나 /video/hd/*로 시작하는 URL 경로에 대한 요청을 video-hd 백엔드 서비스에 전달하는 경로 규칙을 갖는 경로 일치자를 참조합니다.
호스트 이름은 다음과 같습니다.
example.net
/video/sd
/video/sd/show1
/video/sd/shows/show2
/video/sd/*로 시작하는 다른 URL
video-sd example.net에 대한 호스트 규칙은 /video/sd와 일치하거나 /video/sd/*로 시작하는 URL 경로에 대한 요청을 백엔드 서비스에 전달하는 경로 규칙을 갖는 경로 일치자를 참조합니다.

** 기타 참고사항

Traffic Director 문서에 설명된 일부 URL 맵 기능은 부하 분산기에서 사용할 수 없습니다.

다음 단계

  • URL 맵 구성에 대한 자세한 내용은 URL 맵 사용을 참조하세요.
  • HTTP(S) 부하 분산에서 URL 맵이 작동하는 방식에 대한 자세한 내용은 HTTP(S) 부하 분산 개념을 참조하세요.