인터넷 네트워크 엔드포인트 그룹 개요

Cloud Load Balancing은 Google Cloud 외부의 외부 백엔드로의 트래픽 프록시를 지원합니다. 부하 분산기의 외부 백엔드를 정의하려면 인터넷 네트워크 엔드포인트 그룹(NEG)이라는 전역 리소스를 사용합니다.

외부 백엔드에서 콘텐츠를 제공하려고 하지만 Google Cloud 부하 분산기를 프런트엔드로 지정하려는 경우 이 유형의 배포를 사용할 수 있습니다. 이를 통해 다음 작업을 할 수 있습니다.

  • Google Edge 인프라를 사용하여 사용자 연결을 종료합니다.
  • 연결을 외부 백엔드에 전달합니다.
  • Cloud CDN을 사용하여 외부 백엔드의 콘텐츠를 캐시합니다.
  • Google의 비공개 백본에서 공개 엔드포인트로 트래픽을 전달하여 안정성을 개선하고 클라이언트와 서버 간 대기 시간을 줄일 수 있습니다.

그림 1은 여러 백엔드 유형이 있는 외부 애플리케이션 부하 분산기를 보여줍니다. 그 중 하나는 인터넷 NEG로 구성된 외부 백엔드입니다.

부하 분산의 인터넷 네트워크 엔드포인트 그룹
그림 1. 부하 분산의 인터넷 네트워크 엔드포인트 그룹(확대하려면 클릭)

인터넷 NEG 백엔드는 전역 외부 애플리케이션 부하 분산기, 기본 애플리케이션 부하 분산기, Traffic Director에서 지원됩니다. 다음 섹션에서는 애플리케이션 부하 분산기와 함께 외부 백엔드가 사용되는 방법을 설명합니다. Traffic Director, DNS, 상태 점검, 트래픽 라우팅과 함께 외부 백엔드를 사용하는 경우 동작은 다릅니다. 자세한 내용은 인터넷 네트워크 엔드포인트 그룹을 사용하는 Traffic Director를 참조하세요.

전역 외부 애플리케이션 부하 분산기가 있는 인터넷 NEG 백엔드 지원은 미리보기 상태입니다.

용어

다음 용어는 의미가 동일하거나 유사하기 때문에 구분 없이 사용되는 경우가 많습니다.

  • 외부 백엔드: Google Cloud 외부에 위치하며 인터넷을 통해 연결할 수 있는 백엔드입니다. 인터넷 NEG의 엔드포인트입니다.
  • 커스텀 원본: 외부 백엔드와 동일합니다. CDN에서 원본은 웹 콘텐츠를 제공하는 백엔드 인스턴스의 업계 표준 용어입니다.
  • 인터넷 네트워크 엔드포인트 그룹(NEG): 외부 백엔드를 지정하는 데 사용하는 Google Cloud API 리소스입니다.
  • 외부 엔드포인트: 외부 백엔드와 동일합니다.

이 문서에서는 인터넷 NEG API 리소스를 참조하는 경우 외에는 외부 백엔드라는 용어를 사용합니다.

부하 분산기 구성요소

이 섹션에서는 외부 백엔드로 부하 분산기를 구성하는 데 필요한 부하 분산 아키텍처와 리소스를 설명합니다. 부하 분산기에는 백엔드 서비스만 위한 특수 구성이 필요합니다. 프런트엔드 구성은 다른 전역 외부 애플리케이션 부하 분산기와 동일합니다.

그림 2는 외부 백엔드를 사용하는 전역 외부 애플리케이션 부하 분산기를 설정하는 데 필요한 Google Cloud 리소스를 보여줍니다.

외부 백엔드가 있는 전역 외부 애플리케이션 부하 분산기
그림 2. 외부 백엔드가 있는 전역 외부 애플리케이션 부하 분산기(확대하려면 클릭)

프리미엄 네트워크 서비스 등급에서만 인터넷 NEG를 사용할 수 있습니다.

프런트엔드 구성

인터넷 NEG 백엔드를 사용하는 부하 분산기를 만들기 위해 특별한 프런트엔드 구성이 필요하지 않습니다. 전달 규칙은 IP 주소, 포트, 프로토콜별로 트래픽을 대상 프록시로 라우팅하는 데 사용됩니다. 그런 다음 대상 프록시는 클라이언트의 연결을 종료합니다.

URL 맵은 HTTP(S) 부하 분산기에서 적절한 백엔드 서비스로의 URL 기반 요청 라우팅을 설정하는 데 사용됩니다.

이러한 각 구성요소에 대한 자세한 내용은 외부 애플리케이션 부하 분산기 개요의 아키텍처 섹션을 참조하세요.

인터넷 NEG

인터넷 NEG는 부하 분산기의 외부 백엔드를 정의하는 데 사용되는 전역 리소스입니다. 인터넷 NEG를 통해 참조되는 외부 백엔드는 인터넷을 통해 연결할 수 있어야 합니다. 엔드포인트는 Cloud VPN 또는 Cloud Interconnect 이외에 다른 방법으로도 연결할 수 있습니다. 외부 백엔드가 Google API 또는 서비스를 참조하는 경우 80 또는 443 TCP 포트를 통하거나 HTTP, HTTPS 또는 HTTP/2 프로토콜을 사용하여 서비스에 연결할 수 있어야 합니다.

NEG에서 참조하는 외부 엔드포인트는 INTERNET_FQDN_PORT 또는 INTERNET_IP_PORT로 구성하는 두 가지 방법이 있습니다.

엔드포인트 주소 유형 정의 사용 시기
호스트 이름 및 선택적 포트 INTERNET_FQDN_PORT

외부 애플리케이션 부하 분산기의 경우 공개적으로 확인할 수 있는 정규화된 도메인 이름 및 선택적 포트입니다. 예를 들면 backend.example.com:443입니다.(기본 포트는 HTTP의 경우 80, HTTPS 및 HTTP/2의 경우 443)

정의된 도메인 이름은 Google의 공개 DNS 인프라에서 확인할 수 있어야 합니다.

Traffic Director에서는 VPC 네트워크의 이름 확인 순서를 사용해 FQDN을 확인합니다.

공개 DNS로 정규화된 도메인 이름을 통해 외부 백엔드를 확인할 수 있는 경우 외부 애플리케이션 부하 분산기와 함께 이 엔드포인트를 사용합니다.

Traffic Director에서 이 엔드포인트를 사용하여 외부 서비스로 트래픽을 전송합니다.

IP 주소 및 선택적 포트 INTERNET_IP_PORT

공개적으로 라우팅 가능한 IP 주소 및 선택적 포트입니다. 예를 들면 8.8.8.8 또는 8.8.8.8:443입니다(기본 포트는 HTTP의 경우 80, HTTPS 및 HTTP/2의 경우 443).

IP 주소는 RFC 1918 주소일 수 없습니다.

외부 애플리케이션 부하 분산기에서만 이 엔드포인트를 사용하여 공개적으로 액세스할 수 있는 IP 주소와 연결할 포트를 지정합니다.

INTERNET_FQDN_PORT 엔드포인트의 IP 주소 확인

INTERNET_FQDN_PORT 엔드포인트가 여러 IP 주소를 반환하는 DNS 레코드를 가리키는 경우 다음과 같은 방법으로 IP 주소를 확인합니다.

  • 부하 분산기는 인터넷에서 클라이언트에 가장 가까운 Google Cloud 리전의 DNS 리졸버를 사용합니다. INTERNET_FQDN_PORT 엔드포인트의 DNS 레코드가 클라이언트의 위치에 따라 다른 IP 주소를 반환하는 경우 각 IP 주소에 부하 분산기가 도달할 수 있는지 확인합니다.

  • 부하 분산기가 DNS 응답의 첫 번째 IP 주소에 연결을 시도합니다. 해당 IP 주소에 연결할 수 없는 경우 부하 분산기는 HTTP 502 (Bad Gateway) 응답을 반환합니다. DNS 응답의 다른 IP 주소를 사용할 수 있는 경우에도 마찬가지입니다.

Google DNS 리졸버 인프라에서 사용되는 IP 범위 및 위치에 대한 자세한 내용은 Google 공개 DNS 문서를 참조하세요. 공개 DNS 시스템에서 확인할 수 없는 이름은 외부 백엔드로 사용될 수 없습니다.

백엔드 서비스

백엔드 서비스는 부하 분산기에 구성 정보를 제공합니다. 부하 분산기는 백엔드 서비스의 정보를 사용하여 수신 트래픽을 하나 이상의 연결된 백엔드로 보냅니다.

외부 백엔드로 부하 분산기를 설정하려면 인터넷 NEG 백엔드로 백엔드 서비스를 구성합니다. 백엔드 서비스에 인터넷 NEG를 추가하면 다음 제한사항이 적용됩니다.

  • 백엔드 서비스는 다른 백엔드 유형(예: 영역별 NEG 또는 인스턴스 그룹)도 백엔드로 사용할 수 없습니다.

  • 동일한 백엔드 서비스에는 하나의 인터넷 NEG 백엔드만 추가할 수 있습니다.

  • 인터넷 NEG에는 엔드포인트를 하나만 추가할 수 있습니다.

    각 인터넷 NEG에는 하나의 엔드포인트만 허용되므로 부하 분산은 실제로 수행되지 않습니다. 프런트엔드 역할만 하는 부하 분산기는 지정된 외부 백엔드로 트래픽을 프록시합니다. 즉, 속도 또는 사용률과 같은 부하 분산 모드는 사용할 수 없습니다.

  • 백엔드 서비스는 상태 확인을 참조할 수 없습니다.

  • 백엔드 서비스의 부하 분산 스킴은 전역 외부 애플리케이션 부하 분산기의 경우 EXTERNAL_MANAGED 또는 기본 애플리케이션 부하 분산기의 경우 EXTERNAL이어야 합니다.

  • 백엔드 서비스 프로토콜은 HTTP, HTTPS, HTTP2 중 하나여야 합니다.

    공개 HTTP를 전송할 때 부하 분산기와 백엔드 간의 통신이 암호화 및 인증되도록 인터넷 NEG로 백엔드 서비스를 구성할 때 HTTPS 또는 HTTP/2를 프로토콜로 사용하는 것이 좋습니다.

    또한 HTTPS 또는 HTTP/2를 백엔드 프로토콜로 사용하는 경우 INTERNET_FQDN_PORT 엔드포인트를 사용하여 외부 백엔드를 만들어야 합니다. 이렇게 하면 다음과 같은 두 가지 이점이 있습니다.

    • 부하 분산기가 외부 백엔드에서 제공하는 SSL 서버 인증서의 유효성을 검사하고 다음 정보가 올바른지 확인합니다.

      • 인증서가 잘 알려진 인증 기관(CA)에서 서명하는지 여부
      • 인증서가 만료되지 않았는지 여부.
      • 인증서 서명이 유효한지 여부
      • 구성된 FQDN이 인증서의 주체 대체 이름(SAN) 중 하나와 일치하는지 여부

      INTERNET_IP_PORT 엔드포인트를 사용하여 외부 백엔드를 만드는 경우 SSL 서버 인증서 검증이 수행되지 않습니다.

    • SSL 서버 이름 표시(SNI) 확장 프로그램은 INTERNET_FQDN_PORT 엔드포인트에서만 지원됩니다. 부하 분산기와 외부 엔드포인트 간 SSL 핸드셰이크 중에 클라이언트 hello에 구성된 FQDN이 SNI를 전송합니다. IP 주소 리터럴이 SNI 페이로드의 HostName 필드에서 허용되지 않으므로 INTERNET_IP_PORT 엔드포인트를 사용할 때 SNI가 전송되지 않습니다.

인터넷 NEG를 사용할 때는 다음과 같은 백엔드 서비스 기능이 지원됩니다.

상태 점검

인터넷 NEG를 사용하는 백엔드 서비스는 상태 점검을 지원하지 않습니다. Google Cloud는 외부 백엔드의 상태 점검을 제공하지 않습니다.

외부 백엔드에 연결할 수 없거나 구성된 호스트 이름(FQDN)을 확인할 수 없는 경우 부하 분산기는 클라이언트에 HTTP 502 (Bad Gateway) 응답을 반환합니다.

요청을 수신하도록 외부 백엔드 사용 설정

부하 분산기의 요청을 외부 백엔드에 연결하려면 Google이 외부 백엔드에 요청을 보내는 데 사용하는 IP 주소 범위를 허용 목록에 추가해야 합니다. 허용 목록에 추가할 IP 주소를 조회하려면 dig 또는 nslookup과 같은 도구를 사용하여 _cloud-eoips.googleusercontent.com DNS TXT 레코드를 쿼리합니다.

자세한 내용은 외부 백엔드에서 Google Cloud의 트래픽 수신 허용을 참조하세요.

외부 백엔드에 대한 요청 인증

외부 백엔드로 전송된 요청을 인증하려면 다음을 수행합니다.

  • 요청이 커스텀 요청 헤더를 사용하여 Google Cloud 외부 애플리케이션 부하 분산기에서 전송되었음을 나타내도록 커스텀 헤더를 설정합니다. 예를 들어 16개 이상의 암호화된 임의의 바이트를 공유 키로 사용할 수 있습니다.

    예를 들어 HTTP 요청의 Host 헤더로 특정 값을 예상하도록 외부 백엔드를 구성하고 백엔드 서비스가 Host 헤더를 예상되는 값으로 설정하도록 구성할 수 있습니다. 커스텀 요청 헤더를 구성하지 않으면 백엔드 서비스는 클라이언트가 부하 분산기에 연결하는 데 사용한 헤더를 보존하며 응답에 동일한 헤더를 포함합니다.

    전역 외부 애플리케이션 부하 분산기를 사용하는 경우 Host 헤더 구성과 관련된 몇 가지 제한사항이 있습니다. 자세한 내용은 백엔드 서비스에서 커스텀 헤더 만들기를 참조하세요. 구체적인 예시는 외부 백엔드로 기본 애플리케이션 부하 분산기 설정을 참조하세요.

  • IAP를 사용 설정하고 요청 헤더에서 서명된 JWT를 Google에서 서명했는지 그리고 aud(대상) 클레임에 외부 애플리케이션 부하 분산기에서 정의된 프로젝트 번호가 포함되어 있는지 확인할 수 있습니다. IAP는 Cloud CDN과 호환되지 않습니다.

  • 비공개 출처 인증을 사용 설정하면 외부 애플리케이션 부하 분산기에 비공개 Amazon Simple Storage Service(Amazon S3) 버킷 또는 기타 호환 가능한 객체 저장소에 대한 장기 액세스 권한이 부여됩니다. 비공개 출처 인증은 Cloud CDN과 호환됩니다.

로그

외부 백엔드로 프록시된 요청은 다른 백엔드에 대한 요청이 로깅되는 것과 같은 방식으로 Cloud Logging에 로깅됩니다. 자세한 내용은 외부 애플리케이션 부하 분산기 로깅 및 모니터링을 참조하세요.

외부 백엔드에 Cloud CDN을 사용 설정하면 캐시 적중도 로깅됩니다.

외부 백엔드를 사용한 헤더 처리

외부 애플리케이션 부하 분산기가 외부 백엔드로 요청을 프록시하면 HTTP 헤더가 다음과 같이 조정됩니다.

  • 일부 헤더는 병합됩니다. 동일한 헤더 키의 인스턴스가 여러 개인 경우(예: Via) 부하 분산기는 단일 헤더 키의 단일 쉼표로 구분된 목록에 해당 값을 결합합니다. 값이 쉼표로 구분된 목록으로 표시될 수 있는 헤더만 병합됩니다. 다른 헤더(예: Set-Cookie)는 병합되지 않습니다.

  • 헤더는 백엔드 서비스 프로토콜이 HTTP 또는 HTTPS일 때 대문자로 시작됩니다.

    • 헤더의 키의 첫 번째 문자와 하이픈(-) 뒤에 오는 모든 문자는 HTTP/1.1 클라이언트와의 호환성을 유지하기 위해 대문자로 표기됩니다. 예를 들어 user-agentUser-Agent로, content-encodingContent-Encoding로 변경됩니다.

    • Accept-CH(클라이언트 힌트)와 같은 특정 헤더는 표준 혼합 문자 표현과 일치하도록 변환됩니다.

  • 일부 헤더가 추가되거나 헤더에 값이 추가됩니다. 외부 애플리케이션 부하 분산기는 항상 ViaX-Forwarded-For와 같은 특정 헤더를 추가 또는 수정합니다.

제한사항

  • 인터넷 NEG를 리전 외부 애플리케이션 부하 분산기의 백엔드로 사용할 수 없습니다.
  • 인터넷 NEG를 백엔드로 구성하는 것과 관련된 제한사항은 백엔드 서비스 섹션을 참조하세요.
  • 외부 백엔드에서는 상태 점검이 수행되지 않습니다. 외부 백엔드에 연결할 수 없거나 FQDN으로 지정되었지만 확인할 수 없는 경우 부하 분산기는 사용자 요청에 대한 응답으로 502 (Bad Gateway) 메시지를 보냅니다.
  • 부하 분산기를 수정하여 백엔드를 인터넷 NEG에서 다른 백엔드 유형으로 변경하거나 다른 백엔드 유형에서 인터넷 NEG로 변경하면 애플리케이션에 일시적 다운타임이 약 30~90초 동안 발생합니다. 이 시간 동안 클라이언트에는 오류 코드 failed_to_connect_to_backend와 함께 502 오류가 표시됩니다. 이는 정상적인 동작이므로,
  • 인터넷 NEG 백엔드에서는 다음 고급 트래픽 관리 기능이 지원되지 않습니다.
    • 요청 미러링
    • 재시도 정책
    • 트래픽 정책(부하 분산 지역 정책, 세션 어피니티, 이상점 감지 포함)

할당량

기존 네트워크 엔드포인트 그룹 할당량에서 허용하는 만큼 외부 네트워크 엔드포인트로 NEG를 구성할 수 있습니다. 자세한 내용은 NEG 백엔드 할당량NEG 할당량당 엔드포인트를 참조하세요.

가격 책정

인터넷 NEG 엔드포인트로 보내는 이그레스 트래픽은 프리미엄 등급 네트워킹의 인터넷 이그레스 요금이 적용됩니다. 소스는 클라이언트 위치를 기반으로 하며 대상은 공개 엔드포인트의 위치를 기반으로 합니다.

자세한 내용은 Cloud Load Balancing 가격 책정을 참조하세요.

다음 단계