TCP 프록시 부하 분산 개념

Google Cloud TCP 프록시 부하 분산을 사용하면 전 세계 모든 사용자에게 단일 IP 주소를 사용할 수 있습니다. TCP 프록시 부하 분산기는 자동으로 트래픽을 사용자와 가장 가까운 인스턴스로 라우팅합니다.

전역 부하 분산을 사용하려면 기본 등급인 프리미엄 등급의 네트워크 서비스 등급을 사용해야 합니다. 그렇지 않으면 부하 분산이 리전 단위로 처리됩니다.

TCP 프록시 부하 분산은 HTTP 트래픽이 아닌 트래픽용입니다. HTTP 트래픽의 경우 HTTP 부하 분산을 대신 사용합니다. 프록시 처리된 SSL 트래픽은 SSL 프록시 부하 분산을 사용합니다.

TCP 프록시 부하 분산은 클라이언트 트래픽의 IPv4 주소 및 IPv6 주소를 모두 지원합니다. 클라이언트 IPv6 요청은 부하 분산 레이어에서 종료된 후 IPv4를 통해 백엔드로 프록시 처리됩니다.

Google Cloud 부하 분산기의 차이점에 대한 자세한 내용은 다음 문서를 참조하세요.

개요

TCP 트래픽에 TCP 프록시 부하 분산을 사용하면 부하 분산 레이어에서 고객의 TCP 세션을 종료한 후 TCP 또는 SSL을 사용하여 가상 머신 인스턴스로 트래픽을 전달할 수 있습니다.

TCP 프록시 부하 분산을 전역 부하 분산 서비스로 구성할 수 있습니다. 이 구성을 사용하면 인스턴스를 여러 리전에 배포할 수 있으며 전역 부하 분산은 자동으로 트래픽을 사용자와 가장 가까운 리전에 전달합니다. 트래픽 집중 리전의 경우 부하 분산기가 자동으로 새 연결을 사용 가능한 용량이 있는 다른 리전에 전달합니다. 기존 사용자 연결은 현재 리전에서 그대로 유지됩니다.

TCP 프록시 부하 분산 장점:

  • 지능형 라우팅 - 부하 분산기는 용량이 있는 백엔드 위치로 요청을 라우팅할 수 있습니다. 반대로 L3/L4 부하 분산기는 용량에 관계없이 지역 백엔드로 라우팅해야 합니다. 더 스마트한 라우팅을 사용하면 x*N이 아닌 N+1 또는 N+2에서 프로비저닝할 수 있습니다.
  • 보안 패치 적용 - TCP 스택에 취약점이 발생하면 Cloud Load Balancing은 인스턴스가 안전하게 유지되도록 자동으로 부하 분산기에 패치를 적용합니다.
  • TCP 프록시 부하 분산은 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222 포트를 지원합니다.

다른 네트워크 서비스 등급의 부하 분산기 동작

프리미엄 네트워크 서비스 등급을 사용하는 경우 TCP 프록시 부하 분산은 글로벌 서비스입니다. 한 리전에 2개 이상의 백엔드 서비스가 존재할 수 있고 백엔드 서비스를 2개 이상의 리전에서 생성할 수 있으며, 이러한 서비스는 모두 동일한 전역 부하 분산기에서 처리됩니다. 트래픽은 다음과 같이 백엔드 서비스에 할당됩니다.

  1. 사용자 요청이 수신되면 부하 분산 서비스가 소스 IP 주소에서 요청의 대략적인 출처를 확인합니다.
  2. 부하 분산 서비스는 백엔드 서비스가 소유한 인스턴스의 위치, 인스턴스의 전체 용량, 현재 총 사용량을 인식합니다.
  3. 사용자에게 가장 가까운 인스턴스에 이용 가능한 용량이 있으면 요청은 이 가장 가까운 인스턴스 세트로 전달됩니다.
  4. 한 지역에 수신되는 요청은 해당 지역의 이용 가능한 모든 백엔드 서비스와 인스턴스에 균등하게 분산됩니다. 하지만 부하가 아주 적은 경우에는 분산이 균등하지 않게 나타날 수 있습니다.
  5. 지정한 리전에 이용 가능한 용량이 있는 정상 인스턴스가 없는 경우, 부하 분산기는 이용 가능한 용량이 있는 가장 가까운 다음 리전으로 요청을 전송합니다.

표준 네트워크 서비스 등급이 사용되는 경우 TCP 프록시 부하 분산은 리전 서비스입니다. 백엔드 인스턴스 그룹은 모두 부하 분산기의 외부 IP 주소 및 전달 규칙에서 사용하는 리전에 있어야 합니다.

구성요소

TCP 프록시 부하 분산기의 구성요소는 다음과 같습니다.

전달 규칙 및 주소

전달 규칙은 IP 주소, 포트, 프로토콜별로 트래픽을 백엔드 서비스 1개 이상과 대상 프록시로 구성된 부하 분산 구성으로 라우팅합니다.

각 전달 규칙은 애플리케이션의 DNS 레코드에 사용할 수 있는 단일 IP 주소를 제공합니다. DNS 기반 부하 분산은 필요 없습니다. 고정 IP 주소를 예약하여 사용하거나 Cloud Load Balancing에서 할당받을 수 있습니다. 고정 IP 주소를 예약하는 것이 좋습니다. 그렇지 않으면 전달 규칙을 삭제하고 새 규칙을 만들 때마다 DNS 레코드를 새로 할당된 임시 IP 주소로 업데이트해야 합니다.

대상 프록시

TCP 프록시 부하 분산은 클라이언트에서 TCP 연결을 종료하고 인스턴스에 새 연결을 만듭니다. 기본적으로 원래 클라이언트 IP 주소와 포트 정보는 유지되지 않습니다. 이 정보를 유지하려면 PROXY 프로토콜을 사용하면 됩니다. 대상 프록시는 들어오는 요청을 직접 백엔드 서비스로 라우팅합니다.

백엔드 서비스

백엔드 서비스는 들어오는 트래픽을 연결된 백엔드 1개 이상에 전달합니다. 각 백엔드는 인스턴스 그룹 또는 네트워크 엔드포인트 그룹과 제공 용량 메타데이터로 구성됩니다. 백엔드 제공 용량은 CPU 또는 초당 요청 수(RPS)를 기반으로 합니다.

각 백엔드 서비스는 사용 가능한 인스턴스에 수행할 상태 확인을 지정합니다.

사용자에 대한 중단이 최소화되도록 백엔드 서비스에서 연결 드레이닝을 사용 설정할 수 있습니다. 이러한 중단은 인스턴스가 종료되거나, 수동으로 삭제되거나, 자동 확장 처리 과정에서 삭제될 때 발생할 수 있습니다. 연결 드레이닝을 사용하여 서비스 중단을 최소화하는 방법을 알아보려면 연결 드레이닝 사용 설정 문서를 참조하세요.

백엔드 프로토콜

TCP 프록시 부하 분산기에 백엔드 서비스를 구성할 때 백엔드 서비스가 백엔드와 통신하는 데 사용할 프로토콜을 설정합니다. SSL 또는 TCP를 선택할 수 있습니다. 부하 분산기는 사용자가 지정한 프로토콜만 사용하고 다른 프로토콜과의 연결 협상을 시도하지 않습니다.

백엔드 버킷

백엔드 버킷은 들어오는 트래픽을 인스턴스 그룹 대신 Google Cloud Storage 버킷에 전달합니다.

버킷은 데이터를 저장하는 컨테이너입니다. 버킷을 VM 인스턴스, Google App Engine, 기타 클라우드 서비스 간의 공통 스토리지로 사용할 수 있습니다. 단일 VM 인스턴스에 로컬로 저장할 필요가 없는 대량의 데이터가 있는 경우에 스토리지 버킷을 사용합니다.

방화벽 규칙

방화벽 규칙은 트래픽이 인스턴스에 도달하도록 허용합니다. 부하 분산기와 상태 확인기의 트래픽을 허용하도록 방화벽 규칙을 구성해야 합니다.

다음과 같은 경우에 단일 방화벽 규칙을 사용할 수 있습니다.

  • 규칙이 전역 전달 규칙에서 사용하는 포트의 트래픽을 허용합니다.
  • 상태 확인기가 동일한 포트를 사용합니다.

상태 확인기가 다른 포트를 사용하는 경우 이 포트에 대한 방화벽 규칙을 별도로 만들어야 합니다.

방화벽 규칙은 네트워크 에지가 아닌 인스턴스 수준에서 트래픽을 차단하거나 허용합니다. 트래픽이 부하 분산기 자체에 도달하는 것을 막을 수 없습니다.

또한 Google Cloud Platform은 시간이 경과함에 따라 변하는 광범위한 IP 주소를 사용합니다. 특정 시점의 외부 IP 주소를 확인하려면 Google Compute Engine FAQ의 안내를 따르세요.

소스 IP 주소

각 백엔드 가상 머신(VM) 인스턴스 또는 컨테이너에서 확인되는 패킷의 소스 IP 주소는 다음 범위의 IP 주소입니다.

  • 35.191.0.0/16
  • 130.211.0.0/22

실제 부하 분산 트래픽의 소스 IP 주소는 상태 확인 프로브 IP 범위와 같습니다.

백엔드에서 확인되는 트래픽의 소스 IP 주소는 로드 밸런서의 Google Cloud 외부 IP 주소가 아닙니다. 다시 말해 HTTP, SSL 또는 TCP 세션이 두 개 있습니다.

  • 원래 클라이언트에서 부하 분산기(GFE)로 이동하는 세션 1:

    • 원본 IP 주소: 원래 클라이언트 또는 클라이언트가 NAT 뒤에 있는 경우 외부 IP 주소입니다.
    • 대상 IP 주소: 부하 분산기의 IP 주소입니다.
  • 부하 분산기(GFE)에서 백엔드 VM 또는 컨테이너로 이동하는 세션 2:

    • 소스 IP 주소: IP 주소는 35.191.0.0/16 또는 130.211.0.0/22 범위 중 하나입니다.

      실제 소스 주소는 예측할 수 없습니다.

    • 대상 IP 주소: Virtual Private Cloud(VPC) 네트워크의 백엔드 VM 또는 컨테이너의 내부 IP 주소입니다.

TCP 프록시 부하 분산 예시

TCP 프록시를 사용하면 TCP 연결을 통해 들어오는 트래픽이 부하 분산 레이어에서 종료된 후 가장 가까운 인스턴스 그룹으로 프록시 처리됩니다.

이 예시에서 Iowa 및 Boston에 있는 사용자의 트래픽 연결은 부하 분산 레이어에서 종료됩니다. 다이어그램에서 이러한 연결은 1a2a로 표시되어 있습니다. 부하 분산기에서 선택한 백엔드 인스턴스로 별도의 연결이 설정됩니다. 이러한 연결은 1b2b로 표시되어 있습니다.

TCP 종료를 사용한 Google Cloud Load Balancing(확대하려면 클릭)
TCP 종료를 사용한 Google Cloud Load Balancing(확대하려면 클릭)

세션 어피니티

세션 어피니티는 인스턴스가 정상이고 인스턴스에 용량이 있으면 동일한 클라이언트의 모든 요청을 동일한 가상 머신 인스턴스로 보냅니다.

TCP 프록시 부하 분산은 동일한 클라이언트 IP 주소의 모든 요청을 동일한 인스턴스에 전달하는 클라이언트 IP 어피니티를 제공합니다.

인터페이스

다음 인터페이스를 사용하여 TCP 프록시 부하 분산 서비스를 구성하고 업데이트합니다.

  • gcloud 명령줄 도구: Cloud SDK에 포함된 명령줄 도구입니다. TCP 프록시 부하 분산 문서에서는 이 도구를 사용하는 샘플을 제공합니다. 이 도구에 관한 개요는 gcloud 도구 가이드를 참조하세요. 부하 분산 관련 명령어는 gcloud compute 명령어 그룹에서 확인할 수 있습니다.

    또한 --help 플래그를 사용하면 gcloud 명령어에 대한 상세한 도움말을 이용할 수 있습니다.

    gcloud compute http-health-checks create --help
        
  • Google Cloud Console: Google Cloud Console에서 모든 부하 분산 작업을 수행할 수 있습니다.

  • REST API: Cloud Load Balancing API로 모든 부하 분산 작업을 수행할 수 있습니다. API 참조 문서에서는 사용 가능한 리소스와 메서드를 설명합니다.

열린 포트

TCP 프록시 부하 분산기는 역방향 프록시 부하 분산기입니다. 부하 분산기는 수신 연결을 종료한 다음 부하 분산기에서 백엔드로 새 연결을 엽니다. 역방향 프록시 기능은 Google 프런트 엔드(GFE)에서 제공합니다.

설정한 방화벽 규칙은 GFE에서 백엔드로 들어오는 트래픽을 차단하지만 GFE로 들어오는 트래픽은 차단하지 않습니다.

TCP 프록시 부하 분산기에는 동일한 아키텍처에서 실행되는 다른 Google 서비스를 지원하는 열린 포트가 여러 개 있습니다. 부하 분산기의 외부 IP 주소에 대해 보안 또는 포트 검사를 실행하면 추가 포트가 열려 있는 것처럼 보입니다.

이는 TCP 프록시 부하 분산기에 영향을 주지 않습니다. SSL 부하 분산기의 정의에 사용되는 외부 전달 규칙특정 포트 집합 만 참조할 수 있습니다. 다른 TCP 대상 포트를 사용하는 트래픽은 부하 분산기의 백엔드에 전달되지 않습니다.

다음 단계