외부 HTTPS 부하 분산기 설정

이 설정 가이드에서 다음 리소스를 사용하여 단순 외부 HTTPS 부하 분산기를 만드는 방법을 보여줍니다.
  • 기본 VPC 네트워크
  • Compute Engine 관리형 인스턴스 그룹
  • 기본 URL 맵
  • 예약된 외부 IP 주소

  • SSL 인증서

IPv6 및 SSL 인증서 설정을 포함하는 콘텐츠 기반의 멀티 리전 예시는 HTTPS 부하 분산기 설정을 참조하세요.

외부 HTTP(S) 부하 분산의 일반적인 개요는 개요 페이지를 참조하세요.

GKE를 사용하는 경우 부하 분산기는 일반적으로 Kubernetes 인그레스 컨트롤러에 의해 구성됩니다. 자세한 내용은 외부 부하 분산을 위한 인그레스 구성을 참조하세요.

토폴로지

이 방법 문서에서는 다음 다이어그램에 나와 있는 구성을 만듭니다.

단순 HTTPS 부하 분산(확대하려면 클릭)
단순 HTTPS 부하 분산(확대하려면 클릭)

다이어그램의 이벤트 순서는 다음과 같습니다.

  1. 클라이언트가 전달 규칙에 정의된 외부 IPv4 주소로 콘텐츠 요청을 보냅니다.
  2. 전달 규칙은 요청을 대상 HTTPS 프록시로 전달합니다.
  3. 대상 프록시는 URL 맵의 규칙을 사용하여 단일 백엔드 서비스가 모든 요청을 수신하는지 확인합니다.
  4. 부하 분산기는 백엔드 서비스에 인스턴스 그룹이 하나만 있는지 확인하고 해당 그룹의 VM으로 요청을 전달합니다.
  5. VM은 사용자가 요청한 콘텐츠를 제공합니다.

시작하기 전에

설정이 기본 요건을 충족하는지 확인합니다.

SSL 인증서 리소스 설정

다음에 설명된 대로 SSL 인증서 리소스를 만듭니다.

Google 관리형 인증서를 사용하는 것이 좋습니다.

이 예시에서는 이름이 www-ssl-cert인 SSL 인증서 리소스가 이미 있다고 가정합니다.

권한

이 가이드의 단계를 수행하려면 프로젝트에서 Compute Engine 인스턴스, 방화벽 규칙, 예약된 IP 주소를 만들 수 있는 권한이 있어야 합니다. 프로젝트 소유자 또는 편집자 역할이 있거나 Compute Engine IAM 역할이 있어야 합니다.

작업 필요한 역할
인스턴스 만들기 인스턴스 관리자
방화벽 규칙 추가 및 삭제 보안 관리자
부하 분산기 구성요소 만들기 네트워크 관리자
프로젝트 만들기(선택사항) 프로젝트 생성자

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

관리형 인스턴스 그룹 만들기

Compute Engine 백엔드로 부하 분산기를 설정하려면 VM이 인스턴스 그룹에 있어야 합니다. 이 가이드에서는 Apache가 실행중인 Linux VM을 사용하여 관리형 인스턴스 그룹을 만들고 부하 분산을 설정하는 방법을 설명합니다.

관리형 인스턴스 그룹은 외부 HTTPS 부하 분산기의 백엔드 서버를 실행하는 VM을 제공합니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다.

Console

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

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

  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 왼쪽에서 새 관리형 인스턴스 그룹을 선택합니다.
  4. 이름lb-backend-example을 입력합니다.
  5. 위치에서 단일 영역을 선택합니다.
  6. 리전으로 원하는 리전을 선택합니다. 다음 예시에서는 us-east1을 사용합니다.
  7. 영역us-east1-b를 선택합니다.
  8. 인스턴스 템플릿에서 새 인스턴스 템플릿 만들기를 선택합니다.
  9. 이름lb-backend-template을 입력합니다.
  10. 부팅 디스크가 Debian GNU/Linux 9 (stretch) 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get 같이 Debian에서만 사용할 수 있는 명령어를 사용합니다.
  11. 관리 탭의 관리, 보안, 디스크, 네트워킹, 단독 테넌시에서 시작 스크립트 필드에 다음 스크립트를 삽입합니다

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  12. 네트워킹 아래에서 네트워크 태그 allow-health-check를 추가합니다.

  13. 저장 후 계속을 클릭합니다.

  14. 자동 확장 모드에서 자동 확장 안함을 선택합니다.

  15. 인스턴스 수2를 입력합니다.

  16. 만들기를 클릭하여 새 인스턴스 그룹을 만듭니다.

참고: 외부 HTTP(S) 부하 분산기는 프록시이므로 방화벽에서 HTTPS 트래픽 허용을 선택할 필요가 없습니다. 방화벽 규칙 구성에서 이 부하 분산기에 필요한 방화벽 규칙만 만듭니다.

gcloud

  1. 템플릿을 만듭니다.

    gcloud compute instance-templates create lb-backend-template \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-9 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://169.254.169.254/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    
  2. 템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create lb-backend-example \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    

방화벽 규칙 구성

이 예시에서는 fw-allow-health-check 방화벽 규칙을 만듭니다. Google Cloud 상태 확인 시스템(130.211.0.0/2235.191.0.0/16)의 트래픽을 허용하는 인그레스 규칙입니다. 이 예시에서는 대상 태그 allow-health-check를 사용하여 VM을 식별합니다.

Console

  1. Google Cloud Console의 방화벽 페이지로 이동합니다.
    방화벽 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭하여 두 번째 방화벽 규칙을 만듭니다.
  3. fw-allow-health-check이름을 입력합니다.
  4. 네트워크에서 기본값을 선택합니다.
  5. 대상에서 지정된 대상 태그를 선택합니다.
  6. allow-health-check대상 태그 필드를 채웁니다.
  7. 소스 필터IP ranges로 설정합니다.
  8. 소스 IP 범위130.211.0.0/2235.191.0.0/16으로 설정합니다.
  9. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다.
  10. tcp 옆의 체크박스를 선택하고 포트 번호로 80을 입력합니다.
  11. 만들기를 클릭합니다.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

외부 IP 주소 예약

인스턴스가 준비되어 실행 중이므로 고객이 부하 분산기에 연결하는 데 사용하는 전역 고정 외부 IP 주소를 설정합니다.

Console

  1. Google Cloud Console의 외부 IP 주소 페이지로 이동합니다.
    외부 IP 주소 페이지로 이동
  2. 고정 주소 예약을 클릭하여 IPv4 주소를 예약합니다.
  3. lb-ipv4-1이름을 할당합니다.
  4. 네트워크 등급을 프리미엄으로 설정합니다.
  5. IP 버전IPv4로 설정합니다.
  6. 유형전역으로 설정합니다.
  7. 예약을 클릭합니다.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

예약된 IPv4 주소를 확인합니다.

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

부하 분산기 설정

이 예시에서는 클라이언트와 부하 분산기 사이에 HTTPS를 사용하므로 프록시를 구성하려면 하나 이상의 SSL 인증서 리소스가 필요합니다. Google 관리형 인증서를 사용하는 것이 좋습니다.

Console

  1. 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 만들기를 클릭합니다.
  3. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.
  4. 계속을 클릭합니다.
  5. 인터넷에서 내 VM으로를 선택합니다.
  6. 부하 분산기 이름으로 web-map-https를 입력합니다.
  7. 백엔드 구성을 클릭합니다.
    1. 백엔드 서비스 및 백엔드 버킷 만들기 또는 선택에서 백엔드 서비스 > 백엔드 서비스 만들기를 선택합니다.
    2. 백엔드 서비스의 이름을 추가합니다(예: web-backend-service).
    3. 프로토콜에서 HTTP를 선택합니다.
    4. 백엔드 > 새 백엔드 > 인스턴스 그룹에서 인스턴스 그룹인 lb-backend-example을 선택합니다.
    5. 다른 기본 설정은 유지합니다.
    6. 상태 확인 > 상태 확인 만들기에서 상태 확인의 이름을 추가합니다(예: http-basic-check).
    7. 프로토콜을 HTTP로 설정합니다.
    8. 다른 기본 설정은 유지합니다.
    9. 저장 후 계속을 클릭합니다.
    10. 만들기를 클릭합니다.
  8. 호스트 및 경로 규칙에서 기본 설정을 유지할 수 있습니다.
  9. 프런트엔드 구성에서 다음 값을 사용합니다.
    1. 프로토콜 아래에서 HTTPS를 선택합니다.
    2. IP 주소에서 앞서 만든 lb-ipv4-1을 선택합니다.
    3. HTTPS 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
    4. 인증서 드롭다운 목록을 클릭하고 기본 SSL 인증서를 선택합니다.
    5. 완료를 클릭합니다.
  10. 검토 및 완료를 클릭합니다.
  11. 부하 분산기 구성을 마쳤으면 만들기를 클릭합니다.
  12. 부하 분산기가 생성될 때까지 기다립니다.
  13. 부하 분산기 이름을 클릭합니다.
  14. 부하 분산기 세부정보 화면에서 부하 분산기의 IP:포트를 기록해 둡니다.

gcloud

  1. 상태 확인을 만듭니다.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. 백엔드 서비스를 만듭니다.
        gcloud compute backend-services create web-backend-service \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. 백엔드 서비스에 인스턴스 그룹을 백엔드로 추가합니다.
        gcloud compute backend-services add-backend web-backend-service \
            --instance-group=lb-backend-example \
            --instance-group-zone=us-east1-b \
            --global
        
  4. URL 맵을 만들어 들어오는 요청을 기본 백엔드 서비스로 라우팅합니다.
        gcloud compute url-maps create web-map-https \
            --default-service web-backend-service
        
  5. 아직 만들지 않은 경우 다음과 같이 전역 SSL 인증 리소스를 만듭니다. 다음 예시는 `certificate-file`이라는 인증서 파일과 `private-key-file`이라는 비공개 키 파일이 이미 있다고 가정합니다. 이 예시에서는 `www-ssl-cert`라는 SSL 인증서 리소스를 만듭니다.
        gcloud compute ssl-certificates create www-ssl-cert \
            --certificate=certificate-file \
            --private-key=private-key-file \
            --global
        
  6. 대상 HTTPS 프록시를 만들어 요청을 URL 맵으로 라우팅합니다. 프록시는 HTTPS 부하 분산을 위해 SSL 인증서를 포함하는 부하 분산기의 일부분이므로 이 단계에서 인증서도 로드합니다.
        gcloud compute target-https-proxies create https-lb-proxy \
            --url-map web-map-https --ssl-certificates www-ssl-cert
        
  7. 들어오는 요청을 프록시로 라우팅하는 글로벌 전달 규칙을 만듭니다.
        gcloud compute forwarding-rules create https-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-https-proxy=https-lb-proxy \
            --ports=443
        

인스턴스에 트래픽 보내기

부하 분산 서비스를 구성했으므로 이제 전달 규칙으로 트래픽을 전송하고 다른 인스턴스로 분산되는 트래픽을 살펴볼 수 있습니다.

  1. Google Cloud Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 앞에서 만든 부하 분산기를 클릭합니다.
  3. 백엔드 섹션에서 VM이 정상인지 확인합니다. 정상 열에 두 VM이 모두 정상으로 표시되어야 합니다(2/2). 그렇지 않으면 먼저 페이지를 새로고침해 보세요. Cloud Console에서 VM이 정상인지 확인하는 데 몇 분 정도 걸릴 수 있습니다. 몇 분 후에도 백엔드가 정상으로 표시되지 않으면 방화벽 구성과 백엔드 VM에 할당된 네트워크 태그를 검토합니다.
  4. Google 관리형 인증서를 사용하는 경우 인증서 리소스의 상태가 ACTIVE인지 확인합니다. 자세한 내용은 Google 관리형 SSL 인증서 리소스 상태를 참조하세요.
  5. Cloud Console에 백엔드 인스턴스가 정상인 것으로 표시되면 https://ip-address로 이동한 뒤 웹브라우저를 사용하여 부하 분산기를 테스트할 수 있습니다. 여기서 ip-address부하 분산기의 IP 주소입니다.
  6. 자체 서명 인증서를 테스트에 사용하면 브라우저에 경고가 표시됩니다. 브라우저가 자체 서명 인증서를 수락하도록 명시적으로 지시해야 합니다.
  7. 브라우저는 페이지를 제공한 인스턴스의 이름과 영역을 표시하는 콘텐츠로 페이지에 렌더링해야 합니다(예: Page served from: lb-backend-example-xxxx). 브라우저에서 이 페이지를 렌더링하지 않는 경우 이 가이드의 구성 설정을 검토하세요.

다음 단계