단순 외부 HTTP 부하 분산기 설정

이 설정 가이드에서는 다음 리소스를 사용하여 단순 외부 HTTP 부하 분산기를 만드는 방법을 보여줍니다. TLS 종료를 사용하는 단순 외부 HTTPS 부하 분산기의 경우 단순 외부 HTTPS 부하 분산기 설정을 참조하세요.

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

일반적인 개념은 외부 HTTP(S) 부하 분산 개요를 참조하세요.

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

HTTP 부하 분산기 토폴로지

이 가이드에서는 다음 다이어그램에 설명된 구성을 만듭니다.

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

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

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

권한 설정

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

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

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

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

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

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

Console

  1. Google 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. 새 인스턴스 그룹을 만들려면 만들기를 클릭합니다.

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
    

인스턴스 그룹에 이름이 지정된 포트 추가

인스턴스 그룹에 대해 HTTP 서비스를 정의하고 해당 포트에 포트 이름을 매핑합니다. 구성된 후에는 부하 분산 서비스가 이름이 지정된 포트로 트래픽을 전달합니다.

Console

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

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

  2. 인스턴스 그룹 이름(이 예시에서는 lb-backend-example)을 클릭하고 그룹 수정을 클릭합니다.
  3. 포트 이름 매핑 지정을 클릭합니다.
  4. 항목 추가를 클릭합니다.
  5. 포트 이름으로 http를 입력합니다. 포트 번호로 80을 입력합니다.
  6. 저장을 클릭합니다.

gcloud

gcloud compute instance-groups unmanaged set-named-ports lb-backend-example \
    --named-ports http:80 \
    --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 범위로 설정합니다.
  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

부하 분산기 설정

Console

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 부하 분산기 만들기를 클릭합니다.
  3. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.
  4. 인터넷에서 내 VM으로를 선택하고 계속을 클릭합니다.
  5. 부하 분산기 이름으로 web-map-http를 입력합니다.
  6. 백엔드 구성을 클릭합니다.
    1. 백엔드 서비스 및 백엔드 버킷 만들기 또는 선택에서 백엔드 서비스 > 백엔드 서비스 만들기를 선택합니다.
    2. 백엔드 서비스의 이름(예: web-backend-service)을 추가합니다.
    3. 프로토콜에서 HTTP를 선택합니다.
    4. 이름이 지정된 포트http를 입력합니다.
    5. 백엔드 > 새 백엔드 > 인스턴스 그룹에서 인스턴스 그룹lb-backend-example을 선택합니다.
    6. 포트 번호80을 입력합니다.
    7. 다른 기본 설정은 유지합니다.
    8. 상태 확인에서 상태 확인 만들기를 선택한 다음 상태 확인의 이름(예: http-basic-check)을 추가합니다.
    9. 프로토콜을 HTTP로 설정한 다음 저장 후 계속을 클릭합니다.
    10. 다른 기본 설정은 유지합니다.
    11. 만들기를 클릭합니다.
  7. 호스트 및 경로 규칙에서 기본 설정을 유지합니다.
  8. 프런트엔드 구성에서 다음 값을 사용합니다.
    1. 프로토콜HTTP로 설정합니다.
    2. IP 주소를 이전에 만든 lb-ipv4-1로 설정합니다.
    3. HTTP 트래픽을 허용하려면 포트80으로 설정되어 있는지 확인합니다.
    4. 완료를 클릭합니다.
  9. 검토 및 완료를 클릭합니다.
  10. 부하 분산기 구성을 완료하면 만들기를 클릭합니다.
  11. 부하 분산기가 생성될 때까지 기다립니다.
  12. 부하 분산기 이름을 클릭합니다.
  13. 부하 분산기 세부정보 화면에서 부하 분산기의 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 \
            --port-name=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-http \
            --default-service web-backend-service
        
  5. 대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅합니다.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  6. 글로벌 전달 규칙을 만들어 들어오는 요청을 프록시로 라우팅합니다.
        gcloud compute forwarding-rules create http-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

인스턴스로 전송되는 트래픽 테스트

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

Console

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

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

다음 단계