SSL 프록시 부하 분산 개요

SSL 프록시 부하 분산은 인터넷에서 들어오는 SSL 트래픽을 Google Cloud VPC 네트워크의 가상 머신(VM) 인스턴스로 분산하는 역방향 프록시 부하 분산기입니다.

SSL 트래픽에 SSL 프록시 부하 분산을 사용하면 사용자 SSL(TLS) 연결이 부하 분산 레이어에서 종료된 후 SSL(권장)이나 TCP를 통해 사용 가능한 가장 가까운 백엔드 인스턴스로 프록시 처리됩니다. 지원되는 백엔드 유형은 백엔드를 참조하세요.

프리미엄 등급에서 SSL 프록시 부하 분산을 전역 부하 분산 서비스로 구성할 수 있습니다. 표준 등급을 사용하면 SSL 프록시 부하 분산기가 리전별 부하 분산을 처리합니다. 자세한 내용은 네트워크 서비스 등급의 부하 분산기 동작을 참조하세요.

이 예시에서는 아이오와 및 보스턴의 사용자 트래픽이 부하 분산 레이어에서 종료되었고 선택된 백엔드에 대한 별도의 연결이 설정되었습니다.

SSL 종료를 사용하는 Cloud Load Balancing(확대하려면 클릭)
SSL 종료를 사용하는 Cloud Load Balancing(확대하려면 클릭)

SSL 프록시 부하 분산은 HTTP(S) 이외의 트래픽용입니다. HTTP(S) 트래픽의 경우 HTTP(S) 부하 분산을 사용하는 것이 좋습니다.

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

장점

다음은 SSL 프록시 부하 분산을 사용할 때의 몇 가지 장점입니다.

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

  • 지능형 라우팅. 부하 분산기는 용량이 있는 백엔드 위치로 요청을 라우팅할 수 있습니다. 반대로 L3/L4 부하 분산기는 용량에 관계없이 리전 백엔드로 라우팅해야 합니다. 더 스마트한 라우팅을 사용하면 x*N이 아니라 N+1 또는 N+2에서 프로비저닝할 수 있습니다.

  • 백엔드 사용률 향상. 사용되는 암호의 CPU 효율성이 낮다면 SSL 처리 시 CPU가 집중적으로 소비될 수 있습니다. CPU 성능을 최대화하려면 ECDSA SSL 인증서, TLS 1.2를 사용하고 부하 분산기와 인스턴스 간에 SSL용 ECDHE-ECDSA-AES128-GCM-SHA256 암호 모음을 우선적으로 사용하세요.

  • 인증서 관리 고객용 SSL 인증서는 직접 발급받아서 관리하는 인증서(자체 관리 인증서)이거나 Google이 대신 발급받아서 관리하는 인증서(Google 관리 인증서)일 수 있습니다. Google 관리 SSL 인증서는 각각 최대 100개의 도메인을 지원합니다. Google 관리 인증서에는 여러 도메인이 지원됩니다. 부하 분산기에 인증서를 프로비저닝하기만 하면 됩니다. VM에서는 자체 서명 인증서를 사용하여 관리를 간소화할 수 있습니다.

  • 보안 패치. SSL 또는 TCP 스택에 취약점이 발생하면 VM이 안전하게 유지되도록 자동으로 부하 분산기에 패치를 적용합니다.

  • 많이 사용되는 포트 지원: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 3389, 5222, 5432, 5671, 5672, 5900, 5901, 6379, 8085, 8099, 9092, 9200, 9300. Google 관리 SSL 인증서를 SSL 프록시 부하 분산과 함께 사용하는 경우 트래픽의 프런트엔드 포트가 443이어야 Google 관리 SSL 인증서를 프로비저닝하고 갱신할 수 있습니다.

  • SSL 정책 SSL 정책을 사용하면 SSL 프록시 부하 분산기에서 클라이언트와 협상하는 SSL 기능을 제어할 수 있습니다.

  • TLS가 종료되는 위치에 대한 지리적 제어. SSL 프록시 부하 분산기는 클라이언트와 부하 분산기 간의 지연을 최소화하도록 전역으로 분산된 위치에서 TLS를 종료합니다. TLS가 종료되는 위치를 지리적으로 제어해야 하는 경우 네트워크 부하 분산을 대신 사용하고 요구사항에 적합한 리전에 있는 백엔드에서 TLS를 종료해야 합니다.

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

TCP 프록시 부하 분산을 프리미엄 등급의 전역 부하 분산 서비스와 표준 등급의 리전 서비스로 구성할 수 있습니다.

프리미엄 등급

백엔드 서비스 하나만 가질 수 있으며 백엔드 서비스는 여러 리전에서 백엔드를 가질 수 있습니다. 전역 부하 분산의 경우 백엔드를 여러 리전에 배포하면 부하 분산기에서 자동으로 트래픽을 사용자와 가장 가까운 리전에 전달합니다. 트래픽 집중 리전의 경우 부하 분산기가 자동으로 새 연결을 사용 가능한 용량이 있는 다른 리전에 전달합니다. 기존 사용자 연결은 현재 리전에 계속 유지됩니다.

트래픽은 다음과 같이 백엔드에 할당됩니다.

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

표준 등급

표준 등급에서 TCP 프록시 부하 분산은 리전 서비스입니다. 백엔드는 모두 부하 분산기의 외부 IP 주소 및 전달 규칙에서 사용하는 리전에 있어야 합니다.

아키텍처

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

전달 규칙 및 IP 주소

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

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

SSL 프록시 부하 분산기에서 사용하는 외부 전달 규칙마다 전달 규칙 포트 사양에 나와 있는 포트 중 하나를 정확하게 참조할 수 있습니다.

대상 프록시

SSL 프록시 부하 분산은 클라이언트에서 SSL 연결을 종료하고 백엔드에 새 연결을 만듭니다. 대상 프록시는 들어오는 요청을 직접 백엔드 서비스로 라우팅합니다.

기본적으로 원래 클라이언트 IP 주소와 포트 정보는 유지되지 않습니다. 이 정보를 유지하려면 PROXY 프로토콜을 사용하면 됩니다.

SSL 인증서

대상 SSL 프록시에 하나 이상의 SSL 인증서를 설치해야 합니다.

이러한 인증서는 대상 SSL 프록시가 Google 프런트엔드(GFE)와 클라이언트 간의 통신을 보호하는 데 사용됩니다. 이러한 인증서는 자체 관리 또는 Google 관리 SSL 인증서일 수 있습니다.

SSL 인증서 한도 및 할당량에 대한 자세한 내용은 부하 분산 할당량 페이지의 SSL 인증서를 참조하세요.

최고 수준의 보안을 위해 SSL 프록시 부하 분산기 배포에 엔드 투 엔드 암호화를 사용하세요. 자세한 내용은 부하 분산기에서 백엔드로의 암호화를 참조하세요.

Google에서 사용자 트래픽을 암호화하는 방법에 대한 일반적인 내용은 Google Cloud의 전송 중인 데이터 암호화 백서를 참조하세요.

백엔드 서비스

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

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

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

방화벽 규칙

백엔드 인스턴스는 부하 분산기 GFE/상태 확인 범위에서의 연결을 허용해야 합니다. 즉, 130.211.0.0/2235.191.0.0/16의 트래픽이 백엔드 인스턴스 또는 엔드포인트에 도달하도록 허용하는 방화벽 규칙을 만들어야합니다. 이러한 IP 주소 범위는 상태 확인 패킷과 백엔드로 전송되는 모든 부하 분산 패킷의 소스로 사용됩니다.

이 방화벽 규칙에 대해 구성하는 포트는 백엔드 인스턴스 또는 엔드포인트에 대한 트래픽을 허용해야 합니다.

  • 각 전달 규칙에서 사용하는 포트를 허용해야 합니다.
  • 각 백엔드 서비스에 구성된 각 상태 확인에 사용하는 포트를 허용해야 합니다.

방화벽 규칙은 Google 프런트엔드(GFE) 프록시가 아닌 VM 인스턴스 수준에서 구현됩니다. Google Cloud 방화벽 규칙을 사용하여 트래픽이 부하 분산기에 도달하는 것을 막을 수 없습니다.

상태 확인 프로브와 130.211.0.0/2235.191.0.0/16의 트래픽을 허용해야 하는 이유에 대한 자세한 내용은 프로브 IP 범위 및 방화벽 규칙을 참조하세요.

소스 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 주소입니다.

클라이언트 소스 IP 주소 유지

부하 분산기로 들어오는 연결의 원래 소스 IP 주소를 유지하려면 PROXY 프로토콜 버전 1 헤더 앞에 부하 분산기를 추가하여 원래 연결 정보를 유지하도록 구성할 수 있습니다. 자세한 내용은 프록시의 프록시 프로토콜 헤더 업데이트를 참조하세요.

열린 포트

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

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

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

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

트래픽 분산

TCP 프록시 부하 분산기가 트래픽을 백엔드로 배포하는 방식은 분산 모드와 백엔드를 선택하기 위해 선택한 해싱 메서드(세션 어피니티)에 따라 다릅니다.

분산 모드

백엔드 서비스에 백엔드를 추가할 때 부하 분산 모드를 설정합니다.

SSL 프록시 부하 분산의 경우 분산 모드는 CONNECTION 또는 UTILIZATION일 수 있습니다.

부하 분산 모드가 CONNECTION이면 백엔드에서 처리할 수 있는 동시 연결 수에 따라 부하가 분산됩니다. 매개변수 maxConnections(리전 관리형 인스턴스 그룹 제외), maxConnectionsPerInstance, maxConnectionsPerEndpoint 중 하나를 정확하게 지정해야 합니다.

부하 분산 모드가 UTILIZATION이면 인스턴스 그룹의 인스턴스 사용률에 따라 부하가 분산됩니다.

부하 분산기 유형과 지원되는 부하 분산 모드 비교에 대한 자세한 내용은 부하 분산 방법을 참조하세요.

세션 어피니티

세션 어피니티는 백엔드가 정상이고 용량이 있는 한 동일한 클라이언트의 모든 요청을 동일한 백엔드로 전송합니다.

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

장애 조치

백엔드가 비정상이 되면 트래픽은 자동으로 동일한 리전에 있는 정상 백엔드로 리디렉션됩니다. 한 리전 내 모든 백엔드가 비정상이면 트래픽이 다른 리전의 정상 백엔드로 분산됩니다(프리미엄 등급만 해당). 모든 백엔드가 비정상이면 부하 분산기가 트래픽을 삭제합니다.

사용 참고사항 및 제한사항

  • 부하 분산 레이어와 백엔드 인스턴스 간에 암호화되지 않은 TCP를 통해 트래픽을 전송하면 백엔드에서 SSL 처리를 오프로드할 수 있지만 보안이 저하됩니다. 따라서 권장하지 않습니다.

  • gcloud 명령줄 도구를 사용하여 SSL 정책을 만들 수 있습니다.

  • SSL 프록시 부하 분산기마다 하나의 백엔드 서비스 리소스가 있습니다. 백엔드 서비스 변경사항은 즉시 적용되지 않습니다. 변경사항이 Google 프런트엔드(GFE)에 적용되는 데 몇 분 정도 걸릴 수 있습니다.

  • SSL 프록시 부하 분산기는 클라이언트 인증서 기반 인증(상호 TLS 인증이라고도 함)을 지원하지 않습니다.

  • SSL 프록시 부하 분산은 HTTPS 트래픽을 처리할 수 있지만 권장되지 않습니다. 대신 HTTPS 트래픽에는 HTTP(S) 부하 분산을 사용하는 것이 좋습니다. HTTP(S) 부하 분산도 다음을 수행하므로 대부분의 경우에 이를 사용하는 것이 좋습니다.

    • HTTP/2 및 SPDY/3.1을 협상합니다.
    • 잘못된 HTTP 요청 또는 응답을 거부합니다.
    • URL 호스트 및 경로를 기반으로 다른 VM에 요청을 전달합니다.
    • Cloud CDN과 통합됩니다.
    • 요청 부하를 백엔드 인스턴스 간에 균등하게 분산하여 백엔드 사용률을 향상시킵니다. HTTPS는 각 요청을 개별적으로 부하 분산하지만 SSL 프록시 부하 분산은 동일한 SSL 또는 TCP 연결의 모든 바이트를 동일한 백엔드 인스턴스로 보냅니다.
  • Google 관리하는 SSL 인증서가 있는 SSL 프록시 부하 분산기의 경우 프런트엔드 포트에 인증서 프로비저닝 및 갱신에 필요한 443이 포함되어야 합니다.

    SSL 프록시 부하 분산을 SSL을 사용하는 다른 프로토콜(예: WebSocket, IMAP over SSL)에 사용할 수 있습니다.

다음 단계