외부 SSL 프록시 부하 분산 설정

이 문서에서는 외부 SSL 프록시 부하 분산 설정 방법을 안내합니다. 시작하기 전에 외부 SSL 프록시 부하 분산 개요를 읽고 외부 SSL 프록시 부하 분산의 작동 방식에 대한 자세한 내용을 확인하세요.

설정 개요

이 예시에서는 us-central1us-east1이라는 두 리전에 존재하는 간단한 서비스에 전역 외부 SSL 프록시 부하 분산을 설정하는 방법을 보여줍니다. 다음 항목을 구성합니다.

  1. 2개 리전에 분산된 4개의 인스턴스
  2. 인스턴스를 보관할 인스턴스 그룹
  3. 다음을 포함하는 백엔드 구성요소:
    • 상태 확인 - 인스턴스 상태 모니터링에 사용
    • 백엔드 서비스 - 인스턴스 그룹을 모니터링하고 구성된 사용량을 초과하지 못하도록 차단
    • 백엔드 - 인스턴스 그룹 보관
  4. 다음을 포함하는 프런트엔드 구성요소:
    • SSL 인증서 리소스: 자체 SSL 인증서를 제공하는 자체 관리형 인증서 또는 Google이 모든 도메인에 유효한 인증서를 발급하는 Google 관리 인증서를 사용할 수 있습니다. 자세한 내용은 SSL 인증서 유형을 참조하세요.
    • 자체 SSL 인증서가 있는 SSL 프록시
    • 외부 정적 IPv4 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
    • 외부 정적 IPv6 주소 및 사용자 트래픽을 프록시로 전송하는 전달 규칙
  5. 부하 분산기 및 상태 확인기에서 인스턴스로 전송되는 트래픽을 허용하는 방화벽 규칙
  6. 필요한 경우 SSL 프록시 부하 분산기가 클라이언트와 협상하는 SSL 기능을 제어하는 SSL 정책

그런 다음 구성을 테스트합니다.

권한

이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나, 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.

태스크 필요한 역할
네트워크, 서브넷, 부하 분산기 구성요소 만들기 네트워크 관리자
방화벽 규칙 추가 및 삭제 보안 관리자
인스턴스 만들기 Compute 인스턴스 관리자

자세한 내용은 다음 가이드를 참조하세요.

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

이 섹션에서는 인스턴스 및 인스턴스 그룹을 만든 다음 인스턴스 그룹에 인스턴스를 추가하는 방법을 보여줍니다. 일반적으로 프로덕션 시스템에서는 인스턴스 템플릿에 기반을 둔 관리형 인스턴스 그룹을 사용하지만 초기 테스트에서는 이렇게 설정하는 방식이 더 빠릅니다.

인스턴스 만들기

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

ssl-lb 태그를 포함하여 이러한 인스턴스를 만듭니다. 이 태그는 나중에 방화벽 규칙에서 사용합니다.

Console

인스턴스 만들기

  1. Google Cloud 콘솔의 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기를 클릭합니다.

  3. 이름ig-us-central1-1로 설정합니다.

  4. 영역us-central1-b로 설정합니다.

  5. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하여 고급 설정을 표시합니다.

  6. 관리에서 태그 필드를 ssl-lb로 채웁니다.

  7. 시작 스크립트를 다음과 같이 설정합니다.

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html

  8. 나머지 필드는 기본값 그대로 둡니다.

  9. 만들기를 클릭합니다.

  10. 동일한 설정으로 ig-us-central1-2를 만듭니다. 단, 시작 스크립트를 다음과 같이 설정합니다.

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html

  11. 동일한 설정으로 ig-us-east1-1을 만듭니다. 단, 영역us-east1-b로 설정하고 시작 스크립트를 다음과 같이 설정합니다.

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html

  12. 동일한 설정으로 ig-us-east1-2를 만듭니다. 단, 영역us-east1-b로 설정하고 시작 스크립트를 다음과 같이 설정합니다.

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    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-big-us-central1-1 만들기

    gcloud compute instances create ig-us-central1-1 \
       --image-family debian-10 \
       --image-project debian-cloud \
       --tags ssl-lb \
       --zone us-central1-b \
       --metadata startup-script="#! /bin/bash
         sudo apt-get update
         sudo apt-get install apache2 -y
         sudo a2ensite default-ssl
         sudo a2enmod ssl
         sudo service apache2 restart
         echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  2. 영역 us-central1-big-us-central1-2 만들기

    gcloud compute instances create ig-us-central1-2 \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=us-central1-b \
       --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  3. 영역 us-east1-big-us-east1-1 만들기

    gcloud compute instances create ig-us-east1-1 \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=us-east1-b \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    
  4. 영역 us-east1-big-us-east1-2 만들기

    gcloud compute instances create ig-us-east1-2 \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=us-east1-b \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    

각 영역별로 인스턴스 그룹을 만들고 인스턴스 추가

콘솔

  1. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 인스턴스 그룹 만들기를 클릭합니다.

  3. 이름us-ig1로 설정합니다.

  4. 영역us-central1-b로 설정합니다.

  5. 포트 매핑에서 포트 추가를 클릭합니다. 부하 분산기는 이름이 지정된 포트를 통해 인스턴스 그룹으로 트래픽을 전송합니다. 이름이 지정된 포트를 만들어 수신 트래픽을 특정 포트 번호로 매핑합니다.

    1. 포트 이름ssl-lb를, 포트 번호443을 입력합니다.
  6. 인스턴스 정의에서 기존 인스턴스 선택을 클릭합니다.

  7. VM 인스턴스에서 ig-us-central1-1ig-us-central1-2를 선택합니다.

  8. 다른 설정은 그대로 둡니다.

  9. 만들기를 클릭합니다.

  10. 단계를 반복하되 다음과 같이 설정합니다.

    • 이름: us-ig2
    • 영역: us-east1-b
    • 포트 이름: ssl-lb포트 번호: 443
    • 인스턴스: ig-us-east1-1ig-us-east1-2
  11. 인스턴스가 2개인 인스턴스 그룹이 2개 있는지 확인합니다.

gcloud

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

    gcloud compute instance-groups unmanaged create us-ig1 --zone us-central1-b
    
  2. 인스턴스 그룹에 이름이 지정된 포트를 설정합니다.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports=ssl-lb:443 \
        --zone=us-central1-b
    
  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
    
  4. us-ig2 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups unmanaged create us-ig2 --zone us-east1-b
    
  5. 인스턴스 그룹에 이름이 지정된 포트를 설정합니다.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports=ssl-lb:443 \
        --zone=us-east1-b
    
  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
    

이제 2개의 리전에 각각 2개의 인스턴스가 있는 인스턴스 그룹이 만들어졌습니다.

SSL 부하 분산기의 방화벽 규칙 만들기

부하 분산기 및 상태 확인기에서 인스턴스로 전송되는 트래픽을 허용하도록 방화벽을 구성합니다.

콘솔

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

gcloud

gcloud compute firewall-rules create allow-ssl-lb-and-health \
   --source-ranges=130.211.0.0/22,35.191.0.0/16 \
   --target-tags=ssl-lb \
   --allow=tcp:443

Google 관리 인증서를 사용하는 경우 인증서 리소스의 상태가 ACTIVE인지 확인합니다. 자세한 내용은 Google 관리 SSL 인증서 리소스 상태를 참조하세요.

gcloud compute ssl-certificates list

부하 분산기 구성

콘솔

  1. Google Cloud 콘솔의 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 부하 분산기 만들기를 클릭합니다.

  3. TCP 부하 분산에서 구성 시작을 클릭합니다.

  4. 인터넷 연결 또는 내부 전용 아래에서 인터넷 트래픽을 VM으로 분산을 선택합니다.

  5. 여러 리전 또는 단일 리전에서 여러 리전(또는 확실하지 않음)을 선택합니다.

백엔드 구성

  1. 백엔드 구성을 클릭합니다.
  2. 부하 분산기의 이름my-ssl-lb로 설정합니다.
  3. 프로토콜SSL로 설정합니다.
  4. 이름이 지정된 포트ssl-lb를 입력합니다.
  5. 제한 시간에 기본값을 그대로 둡니다.
  6. 백엔드 유형인스턴스 그룹으로 설정된 상태로 둡니다.
  7. 새 백엔드에서 인스턴스 그룹 us-ig1을 선택합니다.
  8. 포트 번호443으로 설정합니다.
  9. 다른 설정은 그대로 둡니다.
  10. 새 백엔드에서 인스턴스 그룹 us-ig2을 선택합니다.
  11. 포트 번호443으로 설정합니다.
  12. 다른 설정은 그대로 둡니다.
  13. 완료를 클릭합니다.
  14. 상태 확인에서 상태 확인 만들기를 선택합니다.
    1. 상태 확인 이름my-ssl-health-check로 설정합니다.
    2. 프로토콜SSL로 설정합니다.
    3. 다른 설정은 동일하게 유지합니다.
    4. 저장 후 계속을 클릭합니다.
  15. Google Cloud 콘솔에서 백엔드 구성 옆에 초록색 체크표시가 있는지 확인합니다. 없으면 위의 단계를 모두 완료했는지 다시 한번 확인합니다.

프런트엔드 구성

  1. 프런트엔드 구성을 클릭합니다.
  2. 새 프런트엔드 IP 및 포트my-ssl-lb-forwarding-rule이름을 입력합니다.
  3. 프로토콜SSL로 설정합니다.
  4. IP 주소에서 IP 주소 만들기를 선택합니다.
    1. ssl-lb-static-ipv4이름을 입력합니다.
    2. 예약을 클릭합니다.
  5. 인증서에서 새 인증서 만들기를 선택합니다.
    1. my-ssl-cert이름을 입력합니다.
    2. 인증서 업로드를 선택한 경우 다음 단계를 완료합니다.
      1. 인증서를 붙여넣거나 업로드를 클릭하여 인증서 파일로 이동합니다.
      2. 비공개 키를 붙여넣거나 업로드를 클릭하여 비공개 키 파일로 이동합니다.
    3. Google 관리 인증서 만들기를 선택한 경우 도메인을 입력합니다.
      1. 추가 도메인을 입력하려면 도메인 추가를 클릭합니다.
      2. 만들기를 클릭합니다.
    4. 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 추가 인증서를 클릭합니다. 그런 다음 인증서 메뉴에서 다른 인증서를 선택하거나 새 인증서 만들기를 클릭하고 위 안내를 따릅니다.
  6. (선택사항) SSL 정책을 만들려면 다음 안내를 따르세요.
    1. SSL 정책에서 정책 만들기를 선택합니다.
    2. my-ssl-policy이름을 입력합니다.
    3. 최소 TLS 버전TLS 1.0을 선택합니다.
    4. 프로필최신을 선택합니다. 사용 설정된 기능사용 중지된 기능이 표시됩니다.
    5. 만들기를 클릭합니다.
  7. (선택 사항) 원하는 경우 프록시 프로토콜을 사용 설정합니다.
  8. 완료를 클릭합니다.
  9. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  10. my-ssl-lb-ipv6-forwarding-rule이름을 입력합니다.
  11. IP 버전IPv6로 설정합니다.
  12. IP 주소에서 IP 주소 만들기를 선택합니다.
    1. ssl-lb-static-ipv6이름을 입력합니다.
    2. 예약을 클릭합니다.
  13. 인증서에서 my-ssl-cert를 선택합니다.
    1. 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 인증서 목록에서 인증서를 선택하거나 새 인증서 만들기를 클릭합니다.
  14. (선택사항) SSL 정책을 사용하거나 원하는 경우 프록시 프로토콜을 사용 설정합니다.
  15. 완료를 클릭합니다.
  16. Google Cloud 콘솔에서 프런트엔드 구성 옆에 초록색 체크표시가 있는지 확인합니다. 없으면 위의 단계를 모두 완료했는지 다시 한번 확인합니다.

검토 및 완료

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

gcloud

  1. 상태 확인을 만듭니다.

    gcloud compute health-checks create ssl my-ssl-health-check --port=443
    
  2. 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create my-ssl-lb \
      --global-health-checks \
      --protocol=SSL \
      --port-name=ssl-lb \
      --health-checks=my-ssl-health-check \
      --timeout=5m \
      --global
    

    또는 --protocol=TCP를 사용하여 부하 분산기와 인스턴스 간에 암호화되지 않은 통신을 구성할 수도 있습니다.

  3. 백엔드 서비스에 인스턴스 그룹을 추가합니다.

    gcloud compute backend-services add-backend my-ssl-lb \
      --instance-group=us-ig1 \
      --instance-group-zone=us-central1-b \
      --balancing-mode=UTILIZATION \
      --max-utilization=0.8 \
      --global
    
    gcloud compute backend-services add-backend my-ssl-lb \
      --instance-group=us-ig2 \
      --instance-group-zone=us-east1-b \
      --balancing-mode=UTILIZATION \
      --max-utilization=0.8 \
      --global
    
  4. SSL 인증서 리소스를 구성합니다.

    자체 관리형 인증서를 사용 중인 경우 업로드할 SSL 인증서가 하나 이상 있어야 합니다. 그렇지 않으면 SSL 인증서를 참조하세요. 여러 SSL 인증서를 사용하는 경우에는 한 번에 하나씩 인증서를 만들어야 합니다.

    자체 관리형 SSL 인증서를 사용 중이며 비공개 키와 서명된 인증서가 없는 경우 테스트용으로 자체 서명된 인증서를 만들어 사용할 수 있습니다.

    자체 관리형 SSL 인증서 리소스를 만들려면 다음을 사용하세요.

    gcloud compute ssl-certificates create my-ssl-cert \
      --certificate=[CRT_FILE_PATH] \
      --private-key=[KEY_FILE_PATH]
    

    Google 관리형 SSL 인증서 리소스를 만들려면 다음 안내를 따르세요.

      gcloud beta compute ssl-certificates create www-ssl-cert \
        --domains=[DOMAIN_1],[DOMAIN_2]
    
  5. 대상 SSL 프록시를 구성합니다.

    외부 SSL 프록시 부하 분산은 1~15개의 SSL 인증서가 있는 대상 SSL 프록시 만들기를 지원합니다. 이 명령어를 실행하기 전에 각 인증서에 SSL 인증서 리소스를 만들어야 합니다.

    프록시 헤더를 사용하도록 설정하려면 none 대신 PROXY_V1로 설정합니다. 선택사항으로 SSL 정책을 대상 프록시에 연결할 수 있습니다. 먼저 정책을 만듭니다.

    gcloud compute ssl-policies create my-ssl-policy \
      --profile=MODERN \
      --min-tls-version=1.0
    

    그런 다음 정책을 대상 프록시에 연결합니다.

    gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \
      --backend-service=my-ssl-lb \
      --ssl-certificates=[SSL_CERT_1][,[SSL_CERT_2],...] \
      --ssl-policy=my-ssl-policy \
      --proxy-header=NONE
    
  6. 전역 고정 IP 주소를 예약합니다.

    고객은 이러한 IP 주소를 사용하여 부하 분산된 서비스에 액세스합니다.

    gcloud compute addresses create ssl-lb-static-ipv4 \
          --ip-version=IPV4 \
          --global
    
    gcloud compute addresses create ssl-lb-static-ipv6 \
          --ip-version=IPV6 \
          --global
    
  7. 전역 전달 규칙을 구성합니다.

    대상 프록시와 연결된 전역 전달 규칙을 만듭니다. LB_STATIC_IPLB_STATIC_IPV6전역 고정 IP 주소 예약에서 생성한 IP 주소로 바꿉니다.

    gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \
      --global \
      --target-ssl-proxy=my-ssl-lb-target-proxy \
      --address=LB_STATIC_IP \
      --ports=443
    
    gcloud compute forwarding-rules create my-ssl-lb-ipv6-forwarding-rule \
      --global \
      --target-ssl-proxy=my-ssl-lb-target-proxy \
      --address=LB_STATIC_IPV6 \
      --ports=443
    

부하 분산기에 도메인 연결

부하 분산기를 만든 후 부하 분산기와 연결된 IP 주소를 확인합니다(예: 30.90.80.100). 도메인이 부하 분산기를 가리키도록 하려면 도메인 등록 서비스를 사용하여 A 레코드를 만듭니다. SSL 인증서에 여러 도메인을 추가했다면 모두 부하 분산기의 IP 주소를 가리키는 A 레코드를 도메인마다 추가해야 합니다. 예를 들어 www.example.comexample.comA 레코드를 만들려면 다음 안내를 따르세요.

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Google Domains를 사용하는 경우 자세한 내용은 Google Domains 도움말 페이지를 참조하세요.

부하 분산기 테스트

웹브라우저에서 HTTPS를 사용하여 고정 IP 주소에 연결합니다. 이 테스트 설정에서 인스턴스는 자체 서명된 인증서를 사용합니다. 따라서 처음으로 페이지에 액세스할 때 브라우저에 경고가 표시됩니다. 실제 페이지를 보려면 경고를 클릭하세요. [IP_ADDRESS]를 이전에 만든 IPv4 또는 IPv6 주소로 바꿉니다.

https://[IP_ADDRESS]

가장 가까운 리전의 호스트 중 하나가 표시됩니다. 해당 지역의 다른 인스턴스가 표시될 때까지 페이지를 새로 고치세요. 다른 리전의 인스턴스를 보려면 가장 가까운 리전의 인스턴스를 중지하세요.

또는 로컬 머신의 명령줄에서 curl을 사용할 수 있습니다. SSL 프록시에서 자체 서명된 인증서를 사용하는 경우 -k도 지정해야 합니다. curl -k 옵션을 사용하면 자체 서명 인증서가 있거나 아예 인증서가 없어도 curl이 작동합니다. 일반 인증서가 있으면 해당 매개변수를 삭제할 수 있습니다. 자체 사이트를 테스트할 때는 -k 매개변수만 사용해야 합니다. 일반적인 상황에서는 유효한 인증서가 중요한 보안 수단이므로 인증서 경고를 무시하면 안 됩니다.

[IP_ADDRESS]를 이전에 만든 IPv4 또는 IPv6 주소로 바꿉니다.

curl -k https://[IP_ADDRESS]

부하 분산기에 도달할 수 없는 경우 설정 문제 해결에 설명된 단계를 시도하세요.

추가 구성 옵션

이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 작업은 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.

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

SSL 프록시를 사용하는 Google Cloud Load Balancing은 클라이언트의 SSL 연결을 종료하고 인스턴스에 대한 새 연결을 만듭니다. 따라서 원래 클라이언트 IP 및 포트 정보는 기본적으로 보존되지 않습니다.

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

TCP 및 SSL 상태 확인에 PROXY 프로토콜을 설정할 수도 있습니다.

외부 SSL 프록시 부하 분산기의 백엔드 인스턴스가 PROXY 프로토콜 헤더를 지원하는 HTTP(S) 서버를 실행하는지 확인합니다. HTTP(S) 서버가 PROXY 프로토콜 헤더를 지원하도록 구성되지 않았으면 백엔드 인스턴스가 빈 응답을 반환합니다. 예를 들어 PROXY 프로토콜은 Apache HTTP 서버 소프트웨어에서 작동하지 않습니다. Nginx와 같은 다른 웹 서버 소프트웨어를 사용할 수 있습니다.

사용자 트래픽에 프록시 프로토콜을 설정한 경우 상태 확인에도 이를 설정해야 합니다. 동일한 포트에서 상태를 확인하고 콘텐츠를 제공하는 경우 상태 확인의 --proxy-header를 부하 분산기 설정에 맞게 설정합니다.

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

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

이 예시에서 클라이언트 IP 주소는 192.0.2.1, 부하 분산 IP 주소는 198.51.100.1, 클라이언트 포트는 15221, 대상 포트는 443입니다.

PROXY TCP4 192.0.2.1 198.51.100.1 15221 443\r\n

클라이언트 IP 주소를 알 수 없는 경우 부하 분산기는 다음 형식으로 PROXY 프로토콜 헤더를 생성합니다.

PROXY UNKNOWN\r\n

기존 대상 프록시의 PROXY 프로토콜 헤더 업데이트

이 페이지의 부하 분산기 설정 예시에서는 외부 SSL 프록시 부하 분산기를 만드는 동안 프록시 프로토콜 헤더를 사용 설정하는 방법을 보여줍니다. 기존 대상 SSL 프록시의 프록시 프로토콜 헤더를 변경하려면 다음 단계를 수행합니다.

콘솔

  1. Google Cloud 콘솔의 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 부하 분산기의 편집 을 클릭합니다.

  3. 프런트엔드 구성을 클릭합니다.

  4. 프록시 프로토콜 필드의 값을 변경합니다.

  5. 업데이트를 클릭하여 변경사항을 저장합니다.

gcloud

gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
    --proxy-header=[NONE | PROXY_V1]

세션 어피니티 구성

이 절차에서는 백엔드 서비스가 클라이언트 IP 어피니티를 사용하도록 예시 SSL 프록시 부하 분산기의 백엔드 서비스를 업데이트하는 방법을 보여줍니다.

클라이언트 IP 어피니티가 사용 설정되면 부하 분산기는 클라이언트의 IP 주소 및 부하 분산기의 IP 주소(외부 전달 규칙의 외부 IP 주소)에서 생성된 해시를 기반으로 특정 클라이언트의 요청을 동일한 백엔드 VM에 전달합니다.

Console

클라이언트 IP 세션 어피니티를 사용 설정하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔의 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 백엔드를 클릭합니다.

  3. my-ssl-lb(이 예시에서 만든 백엔드 서비스 이름)를 클릭하고 수정을 클릭합니다.

  4. 백엔드 서비스 세부정보 페이지에서 고급 구성을 클릭합니다.

  5. 세션 어피니티의 메뉴에서 클라이언트 IP를 선택합니다.

  6. 업데이트를 클릭합니다.

gcloud

클라이언트 IP 세션 어피니티를 지정하여 my-ssl-lb 백엔드 서비스를 업데이트하려면 다음 gcloud 명령어를 사용합니다.

gcloud compute backend-services update my-ssl-lb \
    --global \
    --session-affinity=CLIENT_IP

API

클라이언트 IP 세션 어피니티를 설정하려면 backendServices/patch 메서드에 PATCH 요청을 실행합니다.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-ssl-lb
{
  "sessionAffinity": "CLIENT_IP"
}

연결 드레이닝 사용 설정

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

설정 문제 해결

부하 분산기의 IP 주소에 액세스를 시도할 때 페이지가 로드되지 않는 경우 다음 단계에 따라 설정 문제를 해결하세요.

인스턴스의 상태 검증

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

  gcloud compute backend-services get-health my-ssl-lb
  

방화벽 규칙이 트래픽을 허용하는지 확인

  • 130.211.0.0/2235.191.0.0/16 트래픽을 허용하려면 상태 확인기와 부하 분산기 모두에 이러한 IP 주소가 필요합니다.
  • 부하 분산기와 인스턴스 간에 SSL을 사용 중인 경우 SSL 상태 확인을 사용합니다. 방화벽 규칙이 소스 IP 주소 범위 130.211.0.0/2235.191.0.0/16tcp:443을 허용하는지 확인합니다.
  • 부하 분산기와 인스턴스 간에 TCP를 사용 중인 경우 TCP 상태 확인을 사용합니다. 방화벽 규칙이 소스 IP 범위 130.211.0.0/2235.191.0.0/16tcp:80을 허용하는지 확인합니다.
  • 인스턴스 태그를 사용하는 경우 방화벽 규칙에서 태그가 TARGET_TAGS에 있는지 확인하고 모든 인스턴스에 해당 태그가 있는지 확인합니다. 이 예시에서는 인스턴스에 ssl-lb 태그가 지정되어 있습니다.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                  RULES                        SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health  default 130.211.0.0/22,35.191.0.0/16 tcp:443                      ssl-lb

개별 인스턴스에 접속 시도

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

  1. 모든 소스에서 태그 지정된 인스턴스로 전송되는 트래픽을 허용하도록 방화벽을 엽니다. 이렇게 하려면 ssl-lb 태그가 있는 인스턴스로 전달되는 HTTPS 트래픽에 대한 소스 IP 범위를 0.0.0.0/0으로 설정하는 소스 필터를 만듭니다.

    gcloud compute firewall-rules create allow-ssl-0-0-0-0 \
        --source-ranges=0.0.0.0/0 \
        --target-tags=ssl-lb \
        --allow=tcp:443
    
  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. 브라우저에서 직접 하나 이상의 인스턴스에 액세스합니다.

    https://<var>EXTERNAL_IP</var>
    
  4. 이 방법으로 인스턴스에 액세스할 수 없으면 소프트웨어가 올바르게 실행되고 있는지 확인합니다. 올바르게 실행되고 있다면 부하 분산기 방화벽 규칙이 올바른지 확인합니다.

    gcloud compute firewall-rules describe allow-ssl-lb-and-health
    
    allowed:
      IPProtocol: tcp
      ports:
      '443'
    creationTimestamp: '2016-02-20T22:27:15.094-08:00'
    description: ''
    id: '5304629236729177644'
    kind: compute#firewall
    name: allow-130-211-0-0-22-ssl
    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-ssl-lb-and-health
    sourceRanges:
      130.211.0.0/22,35.191.0.0/16
    targetTags:
      ssl-lb
  5. 인스턴스가 작동하고 있음이 확실하면 'from anywhere' 방화벽 규칙을 삭제합니다.

    gcloud compute firewall-rules delete allow-ssl-0-0-0-0
    

다음 단계