TCP 프록시 부하 분산 설정

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

이 가이드에는 TCP 프록시 부하 분산 설정에 대한 지침이 포함되어 있습니다. 시작하기 전에 TCP 프록시 부하 분산의 작동 방식에 대한 TCP 프록시 부하 분산 개념을 읽어보세요.

개요

이 예시는 us-central1us-east1의 두 리전에서 운영되는 간단한 서비스를 위한 글로벌 TCP 프록시 부하 분산을 설정하는 방법을 보여줍니다. 이 예시에서 서비스는 포트 110에서 응답하도록 구성된 Apache 서버 세트입니다. 대부분의 브라우저는 포트 110을 허용하지 않으므로 테스트 섹션에서는 curl을 사용합니다.

이 예시에서는 다음 항목을 구성합니다.

  1. 두 리전 간에 분산된 4개의 인스턴스
  2. 인스턴스를 포함하는 인스턴스 그룹
  3. 인스턴스 상태 검증을 위한 상태 확인
  4. 인스턴스를 모니터링하고 구성된 사용량 초과를 방지하는 백엔드 서비스
  5. 대상 TCP 프록시
  6. 외부 정적 IPv4 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
  7. 외부 정적 IPv6 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
  8. 부하 분산기와 상태 검사기의 트래픽이 인스턴스에 도달하도록 허용하는 방화벽 규칙

부하 분산기가 구성된 후 구성을 테스트합니다.

인스턴스 및 인스턴스 그룹 구성

이 섹션에서는 간단한 인스턴스 그룹을 만들고 여기에 인스턴스를 추가한 후 해당 인스턴스를 상태 확인을 통해 백엔드 서비스에 추가하는 방법을 보여줍니다. 일반적으로 프로덕션 시스템에서는 인스턴스 템플릿을 기반으로 관리형 인스턴스 그룹을 사용하지만, 초기 테스트에서는 이렇게 구성하는 방식이 더 빠릅니다.

인스턴스 구성

테스트를 위해 4개의 인스턴스(2개의 인스턴스 그룹에 각각 2개씩)에 Apache를 설치합니다. 일반적으로 TCP 트래픽 부하 분산은 HTTP 트래픽에 사용되지 않지만 Apache는 일반적으로 많이 사용되는 소프트웨어이며 테스트용으로 쉽게 설정할 수 있습니다.

이 예시에서 인스턴스는 tcp-lb 태그로 생성됩니다. 이 태그는 나중에 방화벽 규칙에 의해 사용됩니다.

Console


인스턴스 만들기

  1. Google Cloud Platform 콘솔의 VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스 만들기를 클릭합니다.
  3. 이름ig-us-central1-1로 설정합니다.
  4. 리전us-central1로 설정합니다.
  5. 영역us-central1-b로 설정합니다.
  6. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하여 고급 설정을 표시합니다.
  7. 관리에서 네트워킹을 클릭하여 태그 필드를 tcp-lb로 채웁니다.
  8. 관리를 클릭하고 시작 스크립트 필드에 다음 스크립트를 입력합니다.
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo sed -i '/<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. 나머지 필드는 기본값 그대로 둡니다.
  10. 만들기를 클릭합니다.
  11. 시작 스크립트 필드에 다음 스크립트를 제외하고 동일한 설정으로 ig-us-central1-2를 만듭니다.
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo sed -i '/<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. 동일한 설정으로 ig-us-east1-1을 만듭니다. 단, 리전us-east1로 설정하고 영역us-east1-b로 설정합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo sed -i '/<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. 동일한 설정으로 ig-us-east1-2을 만듭니다. 단, 리전us-east1로 설정하고 영역us-east1-b로 설정합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo sed -i '/<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud


  1. 영역 us-central1-b에서 ig-us-central1-1을 만듭니다.

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\/c\\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING
    
  2. 영역 us-central1-b에서 ig-us-central1-2를 만듭니다.

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\/c\\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING
    
  3. 영역 us-east1-b에서 ig-us-east1-1을 만듭니다.

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\/c\\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | tee /var/www/html/index.html
              EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING
    
  4. 영역 us-east1-b에서 ig-us-east1-2를 만듭니다.

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\/c\\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING
    

각 영역에 인스턴스 그룹 생성 및 인스턴스 추가

Console


  1. GCP 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
    인스턴스 그룹 페이지로 이동
  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 이름us-ig1로 설정합니다.
  4. 영역us-central1-b로 설정합니다.
  5. 포트 이름 매핑 지정을 클릭합니다.
    1. 포트 이름tcp110으로 설정합니다.
    2. 포트 번호110으로 설정합니다.
  6. 그룹 유형에서 비관리형 인스턴스 그룹을 선택합니다.
  7. VM 인스턴스에서 ig-us-central1-1ig-us-central1-2를 선택합니다.
  8. 다른 설정은 그대로 둡니다.
  9. 만들기를 클릭합니다.
  10. 단계를 반복하되 다음 값을 설정합니다.
    • 이름: us-ig2
    • 리전: us-east1
    • 영역: us-east1-b
    • 포트 이름: tcp110
    • 포트 번호: 110
    • 인스턴스: ig-us-east1-1ig-us-east1-2

gcloud


  1. us-ig1 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups unmanaged create us-ig1 \
        --zone us-central1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME    LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig1  us-central1-b  zone                     0
    
  2. 인스턴스 그룹에 대해 이름이 지정된 포트를 만듭니다.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  3. ig-us-central1-1ig-us-central1-2us-ig1에 추가합니다.

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
  4. us-ig2 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups unmanaged create us-ig2 \
        --zone us-east1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME    LOCATION    SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig2  us-east1-b  zone                     0
    
  5. 인스턴스 그룹에 대해 이름이 지정된 포트를 만듭니다.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports tcp110:110 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  6. ig-us-east1-1ig-us-east1-2us-ig2에 추가합니다.

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
        --instances ig-us-east1-1,ig-us-east1-2 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

이제 리전당 하나의 인스턴스 그룹이 생성됩니다. 각 인스턴스 그룹에는 2개의 VM 인스턴스가 있습니다.

부하 분산기 구성

Console


부하 분산기 생성 및 백엔드 서비스 구성

  1. Google Cloud Platform 콘솔의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 만들기를 클릭합니다.
  3. TCP 부하 분산에서 구성 시작을 클릭합니다.
  4. 인터넷 연결 또는 내부 전용인터넷 트래픽을 VM으로 분산으로 설정합니다.
  5. 여러 리전 또는 단일 리전여러 리전으로 설정합니다.
  6. 계속을 클릭합니다.
  7. 이름my-tcp-lb로 설정합니다.
  8. 백엔드 구성을 클릭합니다.
  9. 백엔드 서비스의 이름my-tcp-lb로 표시됩니다.
  10. 프로토콜TCP로 설정합니다.
  11. 새 백엔드에서 인스턴스 그룹 us-ig1을 선택합니다.
  12. 인스턴스 그룹에 이름이 지정된 포트가 있음 대화상자에서 기존 포트 이름 사용을 클릭합니다.
  13. 다른 설정은 그대로 둡니다.
  14. 백엔드 추가를 클릭합니다.
  15. 인스턴스 그룹 us-ig2을 선택합니다.
  16. 포트 번호를 110으로 설정합니다.
  17. 상태 확인에서 상태 확인 만들기를 선택합니다.
    1. 상태 확인 이름my-tcp-health-check로 설정합니다.
    2. 프로토콜TCP로 설정합니다.
    3. 포트110으로 설정합니다.
    4. 다른 설정은 동일하게 유지합니다.
    5. 저장 후 계속을 클릭합니다.
  18. Google Cloud Platform Console의 백엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 위의 단계를 모두 완료했는지 다시 한번 확인합니다.

프런트엔드 서비스 구성

  1. 프런트엔드 구성을 클릭합니다.
  2. 이름my-tcp-lb-forwarding-rule으로 입력합니다.
  3. 프로토콜TCP로 설정합니다.
  4. IP에서 IP 주소 만들기를 선택합니다.
    1. 이름tcp-lb-static-ip로 입력합니다.
    2. 예약을 클릭합니다.
  5. 포트110으로 설정합니다.
  6. 필요한 경우 프록시 프로토콜을 사용 설정합니다.
  7. 완료를 클릭합니다.
  8. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  9. 이름my-tcp-lb-ipv6-forwarding-rule으로 입력합니다.
  10. TCP의 프로토콜을 선택합니다.
  11. IP 버전IPv6으로 설정합니다.
  12. IP 주소에서 IP 주소 만들기를 클릭합니다.
    1. tcp-lb-ipv6-static-ip의 이름을 입력합니다.
    2. 예약을 클릭합니다.
  13. 포트110으로 설정합니다.
  14. 필요한 경우 프록시 프로토콜을 사용 설정합니다.
  15. 완료를 클릭합니다.
  16. Google Cloud Platform Console의 프런트엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 위의 단계를 모두 완료했는지 다시 한번 확인합니다.

검토 및 완료

  1. 검토 및 완료를 클릭합니다.
  2. 설정한 내용을 다시 한 번 확인합니다.
  3. 만들기를 클릭합니다.

gcloud


상태 확인 만들기

gcloud compute health-checks create tcp my-tcp-health-check --port 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-tcp-health-check].
NAME                PROTOCOL
my-tcp-health-check TCP

백엔드 서비스 만들기

gcloud compute backend-services create my-tcp-lb \
    --global \
    --protocol TCP \
    --health-checks my-tcp-health-check \
    --timeout 5m \
    --port-name tcp110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
NAME      BACKENDS PROTOCOL
my-tcp-lb          TCP

또는 --protocol SSL을 사용하여 부하 분산기에서 인스턴스로 암호화된 통신을 구성할 수 있습니다.

백엔드 서비스에 인스턴스 그룹 추가

gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].

대상 TCP 프록시 구성

프록시 헤더를 사용하도록 설정하려면 none 대신 PROXY_V1로 설정합니다.

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
    --backend-service my-tcp-lb \
    --proxy-header NONE
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetTcpProxies/my-tcp-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE
my-tcp-lb-target-proxy NONE         my-tcp-lb

글로벌 정적 IPv4 및 IPv6 주소 예약

고객이 이 IP 주소를 사용하여 부하 분산된 서비스에 도달할 수 있습니다.

gcloud compute addresses create tcp-lb-static-ipv4 \
    --ip-version=IPV4 \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv4].
NAME                 REGION ADDRESS                 STATUS
tcp-lb-static-ip            [LB_STATIC_IPV4]        RESERVED
gcloud compute addresses create tcp-lb-static-ipv6 \
    --ip-version=IPV6 \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv6].
NAME                   REGION ADDRESS                 STATUS
tcp-lb-static-ip-ipv6         [LB_STATIC_IPV6]        RESERVED

2개의 주소에 글로벌 전달 규칙 구성

[LB_STATIC_IPV4] 및 [LB_STATIC_IPV4] 자리에 관련 IP 주소를 입력합니다. gcloud compute addresses list를 사용하여 주소를 찾을 수 있습니다.

gcloud beta compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV4] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv4-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv4-forwarding-rule        [LB_STATIC_IPV4] TCP         my-tcp-lb-target-proxy
gcloud beta compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv6-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv6-forwarding-rule        [LB_STATIC_IPV6] TCP         my-tcp-lb-target-proxy

TCP 부하 분산기에 대한 방화벽 규칙 만들기

부하 분산기 및 상태 확인기에서 인스턴스로 전송되는 트래픽을 허용하도록 방화벽을 구성합니다. 이 경우 TCP 포트 110이 열립니다. 상태 검사기는 동일한 포트를 사용합니다. 부하 분산기와 인스턴스 간의 트래픽이 IPv4를 사용하므로 IPv4 범위만 열려있어야 합니다.

콘솔


  1. Google Cloud Platform 콘솔에서 방화벽 규칙 페이지로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭합니다.
  3. 이름allow-tcp-lb-and-health로 입력합니다.
  4. 네트워크에서 default를 선택합니다.
  5. 대상에서 지정된 대상 태그를 선택합니다.
  6. 대상 태그tcp-lb로 설정합니다.
  7. 소스 필터IP ranges로 설정합니다.
  8. 소스 IP 범위130.211.0.0/2235.191.0.0/16으로 설정합니다.
  9. 허용되는 프로토콜 및 포트tcp:110으로 설정합니다.
  10. 만들기를 클릭합니다.

gcloud


 gcloud compute firewall-rules create allow-tcplb-and-health \
     --source-ranges 130.211.0.0/22,35.191.0.0/16 \
     --target-tags tcp-lb \
     --allow tcp:110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-130-211-0-0-22].
NAME                     NETWORK SRC_RANGES                   RULES      SRC_TAGS TARGET_TAGS
allow-tcplb-and-health   default 130.211.0.0/22,35.191.0.0/16 tcp:110             tcp-lb

부하 분산기 테스트

IP:포트 필드에서 lb_ip를 부하 분산기의 IPv4 또는 IPv6 주소로 바꾸면 다음 명령어를 실행하여 부하 분산기에 액세스할 수 있습니다.

curl lb_ip:110

클라이언트 연결 정보를 유지하기 위한 프록시 프로토콜

TCP 프록시 부하 분산은 클라이언트의 TCP 연결을 종료하고 인스턴스에 새 연결을 만듭니다. 기본적으로 원래 클라이언트 IP와 포트 정보는 유지되지 않습니다.

원래 연결 정보를 유지하고 인스턴스로 보내려면 프록시 프로토콜(버전 1)을 사용 설정합니다. 이 프로토콜은 요청의 일부로 소스 IP 주소, 대상 IP 주소 및 포트 번호가 포함된 추가 헤더를 인스턴스로 보냅니다.

사용자 트래픽에 대해 프록시 프로토콜을 설정한 경우 트래픽을 제공하고 동일한 포트에서 상태를 확인한다면 상태 확인을 위해 프로토콜도 설정해야 합니다.

프록시 프로토콜 헤더는 일반적으로 다음과 같은 형식의 사용자가 읽을 수 있는 텍스트 한 줄로 작성됩니다.

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

프록시 프로토콜의 예시는 다음과 같습니다.

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

여기서 클라이언트 IP는 192.0.2.1, 부하 분산 IP는 198.51.100.1, 클라이언트 포트는 15221, 대상 포트는 110입니다.

클라이언트 IP를 알 수 없는 경우에는 부하 분산기가 다음과 같은 형식으로 프록시 프로토콜 헤더를 생성합니다.

PROXY UNKNOWN\r\n

상태를 확인하고 동일한 포트에서 콘텐츠를 제공하는 경우 부하 분산기 설정과 일치하도록 상태 확인을 --proxy-header로 설정할 수 있습니다. 이 가이드에서는 상태 확인 및 컨텐츠 제공을 위해 포트 110을 사용합니다. 다른 포트를 사용 중인 경우 상태 확인에 이를 설정하거나 설정하지 않을 수 있습니다.

상태 확인 만들기

상태 확인은 새 연결을 수신할 수 있는 인스턴스를 판별합니다. 인스턴스 상태 판별을 위해 TCP, SSL, HTTP 또는 HTTPS 상태 확인을 구성할 수 있습니다.

  • 백엔드 인스턴스에서 실행 중인 서비스가 HTTP 기반이라면 HTTP 상태 확인을 사용하세요.
  • 백엔드 인스턴스에서 실행 중인 서비스가 HTTPS 기반이라면 HTTPS 상태 확인을 사용하세요.
  • 백엔드 인스턴스에서 실행 중인 서비스가 HTTP/2 기반이라면 HTTP/2 상태 확인을 사용하세요.
  • 백엔드 인스턴스에서 실행 중인 서비스가 SSL을 사용한다면 SSL 상태 확인을 사용하세요.
  • 다른 종류의 상태 확인을 사용해야 하는 명확한 이유가 없다면 TCP 상태 확인을 사용하세요.

상태 확인 방화벽 규칙

부하 분산된 인스턴스의 상태 확인 프로브는 130.211.0.0/2235.191.0.0/16 범위 내의 주소에서 들어옵니다. 부하 분산기는 이 IP 주소 범위를 사용하여 백엔드 인스턴스에 연결합니다. 방화벽 규칙은 관련 포트에서 이 연결을 허용해야 합니다.

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

상태 확인에 대한 자세한 내용은 상태 확인 페이지를 참조하세요.

연결 드레이닝

백엔드 서비스에서 연결 드레이닝을 사용하도록 설정하면 트래픽을 제공하는 인스턴스가 종료되거나 수동으로 삭제되거나 자동 확장 처리를 통해 삭제되는 경우 사용자에 대한 방해를 최소화할 수 있습니다. 연결 드레이닝에 대해 자세히 알아보려면 연결 드레이닝 사용 설정 문서를 참조하세요.

TCP 프록시 부하 분산 및 GCP 방화벽

네트워크 부하 분산과 달리 TCP 프록시 부하 분산에 대한 액세스는 방화벽 규칙을 사용하여 제어할 수 없습니다. 이는 TCP 프록시 부하 분산이 Google Cloud의 에지에 구현되고 방화벽 규칙이 데이터 센터의 인스턴스에 구현되기 때문입니다.

모니터링

TCP 프록시 부하 분산 모니터링에 대한 자세한 내용은 TCP/SSL 프록시 모니터링을 참조하세요.

문제해결

부하 분산 IP에서 페이지 로드 실패

포트 110은 대부분의 브라우저에서 제한되므로 curl과 같은 도구를 사용하여 부하 분산기를 테스트해야 합니다. curl을 사용하여 페이지에 접속할 수 없는 경우 이 섹션의 나머지 부분에서 일부 문제해결 단계를 참조하세요.

인스턴스의 상태 검증

인스턴스가 HEALTHY인지 확인합니다.

gcloud compute backend-services get-health [BACKEND-SERVICE]

방화벽 규칙이 올바른지 확인

  • 상태 검사기 및 부하 분산기를 모두 열려면 130.211.0.0/2235.191.0.0/16이 필요합니다.
  • 인스턴스 태그를 활용하는 경우 태그가 방화벽 규칙의 TARGET_TAGS 아래에 있는지 확인하고 인스턴스에 태그가 모두 있는지 확인합니다. 이 예시에서 인스턴스는 tcp-lb로 태그 지정되어 있습니다.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                    RULES          SRC_TAGS TARGET_TAGS
allow-tcplb-and-health    default 130.211.0.0/22,35.191.0.0/16  tcp:110                 tcp-lb

개별 인스턴스에 접속 시도

인스턴스에 개별적으로 액세스할 수 있는 방화벽 규칙을 임시로 설정한 다음, 특정 인스턴스에서 페이지 로드를 시도합니다.

  1. 모든 소스에서 태그 지정된 인스턴스로 전송되는 트래픽을 허용하도록 방화벽을 엽니다.

    gcloud compute firewall-rules create allow-tcp110-0-0-0-0   \
        --source-ranges 0.0.0.0/0   \
        --target-tags tcp-lb    \
        --allow tcp:110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].
    NAME                 NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-tcp110-0-0-0-0 default 0.0.0.0/0  tcp:110          tcp-lb
    
  2. 인스턴스 중 하나의 EXTERNAL_IP 주소를 찾습니다.

    gcloud compute instances list
    
    NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
    ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
    ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
    ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING
  3. 그런 다음 브라우저에서 직접 하나 이상의 인스턴스에 액세스합니다.

    curl [EXTERNAL_IP]:110
    
  4. 이 방법으로 인스턴스에 액세스할 수 없으면 소프트웨어가 올바르게 실행되고 있는지 확인합니다. 인스턴스에 개별적으로 액세스할 수 없을 경우 부하 분산기 방화벽 규칙이 올바른지 확인합니다.

    gcloud compute firewall-rules describe allow-tcp-lb-and-health
    
    allowed:
      IPProtocol: tcp
        ports:
        '110'
    creationTimestamp: '2017-03-16T15:21:34.119-07:00'
    description: ''
    id: '8144207668574597377'
    kind: compute#firewall
    name: allow-tcp-lb-and-health
    network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
    selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp-lb-and-health
    sourceRanges:
      130.211.0.0/22
      35.191.0.0/16
    targetTags:
      tcp-lb
  5. 인스턴스가 작동하고 있음이 확실하면 'from anywhere' 방화벽 규칙을 삭제합니다.

    gcloud compute firewall-rules delete allow-tcp110-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-tcp110-0-0-0-0]
    Do you want to continue (Y/n)?  y
    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...