외부 애플리케이션 부하 분산기 설정

IAP(Identity-Aware Proxy)를 사용한 외부 애플리케이션 부하 분산기는 다음 백엔드 유형으로 지원됩니다.

이 설정 가이드에서는 IAP가 사용 설정된 Compute Engine 관리형 인스턴스 그룹을 사용해서 외부 애플리케이션 부하 분산기를 만드는 방법을 보여줍니다.

이 예시가 본인의 사용 사례와 일치하지 않으면 다음 페이지 중 하나를 참조하세요.

일반적인 개념은 외부 애플리케이션 부하 분산기 개요를 참조하세요.

기본 애플리케이션 부하 분산기의 기존 사용자인 경우 전역 외부 애플리케이션 부하 분산기를 사용하여 새 배포를 계획할 때 전역 외부 애플리케이션 부하 분산기로의 마이그레이션 계획을 검토하세요.

부하 분산기 토폴로지

HTTPS 부하 분산기의 경우 다음 다이어그램에 표시된 구성을 만듭니다.

관리형 인스턴스 그룹(MIG) 백엔드가 있는 외부 애플리케이션 부하 분산기
그림 1. 관리형 인스턴스 그룹(MIG) 백엔드가 있는 외부 애플리케이션 부하 분산기(확대하려면 클릭)

HTTP 부하 분산기의 경우 다음 다이어그램에 표시된 구성을 만듭니다.

관리형 인스턴스 그룹(MIG) 백엔드가 있는 외부 애플리케이션 부하 분산기
그림 2. 관리형 인스턴스 그룹(MIG) 백엔드가 있는 외부 애플리케이션 부하 분산기(확대하려면 클릭)

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

  1. 클라이언트가 전달 규칙에 정의된 외부 IPv4 주소로 콘텐츠 요청을 보냅니다.
  2. HTTPS 부하 분산기의 경우 전달 규칙은 요청을 대상 HTTPS 프록시로 전달합니다.

    HTTP 부하 분산기의 경우 전달 규칙은 요청을대상 HTTP 프록시로 전달합니다.

  3. 대상 프록시는 URL 맵의 규칙을 사용하여 단일 백엔드 서비스가 모든 요청을 수신하는지 확인합니다.

  4. 부하 분산기는 백엔드 서비스에 인스턴스 그룹이 하나만 있는지 확인하고 해당 그룹의 가상 머신(VM)으로 요청을 전달합니다.

  5. VM은 사용자가 요청한 콘텐츠를 제공합니다.

시작하기 전에

부하 분산기를 만들려면 먼저 다음 단계를 완료하세요.

SSL 인증서 리소스 설정

HTTPS 부하 분산기의 경우 다음에 설명된 대로 SSL 인증서 리소스를 만듭니다.

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

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

권한 설정

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

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

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

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

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

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

관리형 인스턴스 그룹을 만들기 전에 인스턴스 템플릿을 만듭니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

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

  3. 이름lb-backend-template를 입력합니다.

  4. 부팅 디스크가 Debian GNU/Linux 10(buster)과 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다.

  5. 방화벽 옵션을 구성하지 마세요.

    외부 애플리케이션 부하 분산기는 프록시이므로 방화벽에서 HTTPS 트래픽 허용 또는 HTTP 트래픽 허용을 선택할 필요가 없습니다. 방화벽 규칙 구성에서 이 부하 분산기에 필요한 방화벽 규칙만 만듭니다.

  6. 고급 옵션을 클릭합니다.

  7. 네트워킹을 클릭하고 다음 필드를 구성합니다.

    1. 네트워크 태그allow-health-check를 입력합니다.
  8. 관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  9. 만들기를 클릭합니다.

gcloud

  1. 템플릿을 만듭니다.

    gcloud compute instance-templates create TEMPLATE_NAME \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-10 \
       --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://metadata.google.internal/computeMetadata/v1/instance/name)"
       echo "Page served from: $vm_hostname" | \
       tee /var/www/html/index.html
       systemctl restart apache2'
    

Terraform

인스턴스 템플릿을 만들려면 google_compute_instance_template 리소스를 사용합니다.

resource "google_compute_instance_template" "default" {
  name = "lb-backend-template"
  disk {
    auto_delete  = true
    boot         = true
    device_name  = "persistent-disk-0"
    mode         = "READ_WRITE"
    source_image = "projects/debian-cloud/global/images/family/debian-11"
    type         = "PERSISTENT"
  }
  labels = {
    managed-by-cnrm = "true"
  }
  machine_type = "n1-standard-1"
  metadata = {
    startup-script = "#! /bin/bash\n     sudo apt-get update\n     sudo apt-get install apache2 -y\n     sudo a2ensite default-ssl\n     sudo a2enmod ssl\n     vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\"\n   sudo echo \"Page served from: $vm_hostname\" | \\\n   tee /var/www/html/index.html\n   sudo systemctl restart apache2"
  }
  network_interface {
    access_config {
      network_tier = "PREMIUM"
    }
    network    = "global/networks/default"
    subnetwork = "regions/us-east1/subnetworks/default"
  }
  region = "us-east1"
  scheduling {
    automatic_restart   = true
    on_host_maintenance = "MIGRATE"
    provisioning_model  = "STANDARD"
  }
  service_account {
    email  = "default"
    scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"]
  }
  tags = ["allow-health-check"]
}

관리형 인스턴스 그룹을 만들고 인스턴스 템플릿을 선택합니다.

콘솔

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

    인스턴스 그룹으로 이동

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

  3. 왼쪽에서 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다.

  4. 이름lb-backend-example를 입력합니다.

  5. 위치에서 단일 영역을 선택합니다.

  6. 리전에서 원하는 리전을 선택합니다. 이 예시에서는 us-east1을 사용합니다.

  7. 영역으로 us-east1-b를 선택합니다.

  8. 인스턴스 템플릿에서 인스턴스 템플릿 lb-backend-template을 선택합니다.

  9. 자동 확장 모드에서 사용: 그룹에 인스턴스 추가 및 삭제를 선택합니다.

    최소 인스턴스 수2로, 최대 인스턴스 수2 이상으로 설정합니다.

  10. 새 인스턴스 그룹을 만들려면 만들기를 클릭합니다.

gcloud

  1. 템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.

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

Terraform

관리형 인스턴스 그룹을 만들려면 google_compute_instance_group_manager 리소스를 사용합니다.

resource "google_compute_instance_group_manager" "default" {
  name = "lb-backend-example"
  zone = "us-east1-b"
  named_port {
    name = "http"
    port = 80
  }
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  base_instance_name = "vm"
  target_size        = 2
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

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

인스턴스 그룹에 HTTP 서비스를 정의하고 해당 포트에 포트 이름을 매핑합니다. 부하 분산 서비스가 이름이 지정된 포트로 트래픽을 전달합니다. 자세한 내용은 이름이 지정된 포트를 참조하세요.

콘솔

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

    인스턴스 그룹으로 이동

  2. 인스턴스 그룹의 이름을 클릭합니다(이 예시에서는 lb-backend-example).

  3. 인스턴스 그룹의 개요 페이지에서 수정 을 클릭합니다.

  4. 포트 매핑에서 포트 추가를 클릭합니다.

    1. 포트 이름으로 http를 입력합니다. 포트 번호로 80을 입력합니다.
  5. 저장을 클릭합니다.

gcloud

gcloud compute instance-groups set-named-ports 명령어를 사용합니다.

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone us-east1-b

Terraform

named_port 속성은 관리형 인스턴스 그룹 샘플에 포함되어 있습니다.

방화벽 규칙 구성

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

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. 방화벽 규칙 만들기를 클릭하여 방화벽 규칙을 만듭니다.

  3. 이름fw-allow-health-check를 입력합니다.

  4. 네트워크에서 기본값을 선택합니다.

  5. 대상에서 지정된 대상 태그를 선택합니다.

  6. allow-health-check대상 태그 필드를 채웁니다.

  7. 소스 필터IPv4 범위로 설정합니다.

  8. 소스 IPv4 범위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:80

Terraform

방화벽 규칙을 만들려면 google_compute_firewall 리소스를 사용합니다.

resource "google_compute_firewall" "default" {
  name          = "fw-allow-health-check"
  direction     = "INGRESS"
  network       = "global/networks/default"
  priority      = 1000
  source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
  target_tags   = ["allow-health-check"]
  allow {
    ports    = ["80"]
    protocol = "tcp"
  }
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

외부 IP 주소 예약

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

콘솔

  1. Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.

    외부 IP 주소로 이동

  2. IPv4 주소를 예약하려면 외부 고정 IP 주소 예약을 클릭합니다.

  3. 이름lb-ipv4-1를 입력합니다.

  4. 네트워크 서비스 등급프리미엄으로 설정합니다.

  5. IP 버전IPv4로 설정합니다.

  6. 유형전역으로 설정합니다.

  7. 예약을 클릭합니다.

gcloud

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

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

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

Terraform

IP 주소를 예약하려면 google_compute_global_address 리소스를 사용합니다.

resource "google_compute_global_address" "default" {
  name       = "lb-ipv4-1"
  ip_version = "IPV4"
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

부하 분산기 설정

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

프런트엔드에서 HTTPS를 사용하는 경우에도 백엔드에서 HTTP를 사용할 수 있습니다. Google은 Google Cloud VPC 네트워크 내에 있는 Google 프런트엔드(GFE)와 백엔드 간의 트래픽을 자동으로 암호화합니다.

콘솔

구성 시작

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

    부하 분산으로 이동

  2. 부하 분산기 만들기를 클릭합니다.
  3. 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
  4. 공개 또는 내부에서 공개용(외부)을 선택하고 다음을 클릭합니다.
  5. 전역 또는 단일 리전 배포에서 전역 워크로드에 적합을 선택하고 다음을 클릭합니다.
  6. 부하 분산기 생성에서 기본 애플리케이션 부하 분산기를 선택하고 다음을 클릭합니다.
  7. 구성을 클릭합니다.

기본 구성

부하 분산기 이름web-map-https 또는 web-map-http를 입력합니다.

프런트엔드 구성

  1. 프런트엔드 구성을 클릭합니다.
  2. 프로토콜HTTPS로 설정합니다.
  3. IP 주소를 이전에 만든 lb-ipv4-1로 설정합니다.
  4. 포트443으로 설정합니다.
  5. 인증서를 클릭하고 기본 SSL 인증서를 선택합니다.
  6. 선택사항: SSL 정책을 만듭니다.
    1. SSL 정책 목록에서 정책 만들기를 선택합니다.
    2. SSL 정책 이름을 my-ssl-policy로 설정합니다.
    3. 최소 TLS 버전TLS 1.0을 선택합니다.
    4. 프로필최신을 선택합니다. 사용 설정된 기능사용 중지된 기능이 표시됩니다.
    5. 저장을 클릭합니다.
    SSL 정책을 만들지 않았으면 기본 GCP SSL 정책이 적용됩니다.
  7. 선택사항: HTTP-HTTPS 간 리디렉션 사용 설정 체크박스를 선택하여 리디렉션을 사용 설정합니다.

    이 체크박스를 사용 설정하면 HTTPS 부하 분산기와 동일한 IP 주소를 사용하는 추가적인 부분 HTTP 부하 분산기를 만들고 수신되는 HTTP 요청을 부하 분산기의 HTTPS 프런트엔드로 리디렉션합니다.

    이 체크박스는 HTTPS 프로토콜이 선택되었고 예약된 IP 주소가 사용될 때만 선택할 수 있습니다.

  8. 완료를 클릭합니다.

백엔드 구성

  1. 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 및 백엔드 버킷 만들기 또는 선택에서 백엔드 서비스 > 백엔드 서비스 만들기를 선택합니다.
  3. 백엔드 서비스 이름(예: web-backend-service)을 추가합니다.
  4. 프로토콜에서 HTTP를 선택합니다.
  5. 이름이 지정된 포트http를 입력합니다.
  6. 백엔드 > 새 백엔드 > 인스턴스 그룹에서 인스턴스 그룹인 lb-backend-example을 선택합니다.
  7. 포트 번호80을 입력합니다.
  8. 다른 기본 설정은 유지합니다.
  9. 상태 점검에서 상태 점검 만들기를 선택한 후 상태 점검 이름(예: http-basic-check)을 추가합니다.
  10. 프로토콜을 HTTP로 설정한 후 저장을 클릭합니다.
  11. 선택사항: 기본 백엔드 보안 정책을 구성합니다. 기본 보안 정책은 사용자가 구성한 기준점을 통해 트래픽을 제한합니다. 기본 보안 정책에 대한 자세한 내용은 비율 제한 개요를 참조하세요.

    1. Google Cloud Armor 기본 보안 정책을 선택 해제하려면 백엔드 보안 정책 목록 메뉴에서 None을 선택합니다.
    2. 보안 섹션에서 기본 보안 정책을 선택합니다.
    3. 정책 이름 필드에 자동으로 생성된 이름을 사용하거나 보안 정책 이름을 입력합니다.
    4. 요청 수 필드에서 기본 요청 수를 수락하거나 1~10,000 사이의 정수를 입력합니다.
    5. 간격 필드에서 간격을 선택합니다.
    6. 키에 적용 필드에서 모두, IP 주소, X-Forwarded-For IP 주소 값 중 하나를 선택합니다. 이러한 옵션에 대한 자세한 내용은 비율 제한을 위한 클라이언트 식별을 참조하세요.
  12. 다른 기본 설정은 유지합니다.
  13. 만들기를 클릭합니다.

호스트 및 경로 규칙

호스트 및 경로 규칙에서 기본 설정을 유지합니다.

검토 및 완료

  1. 검토 및 완료를 클릭합니다.
  2. 부하 분산기 구성 설정을 검토합니다.
  3. 선택사항: 부하 분산기를 만드는 데 사용할 REST API 요청을 보려면 상응하는 코드를 클릭합니다.
  4. 만들기를 클릭합니다.

부하 분산기가 생성될 때까지 기다립니다.

HTTPS 부하 분산기를 만들었고 HTTP-HTTPS 리디렉션 사용 설정 체크박스를 선택한 경우 -redirect 서픽스로 생성된 HTTP 부하 분산기도 표시됩니다.

  1. 부하 분산기 이름을 클릭합니다.
  2. 부하 분산기 세부정보 화면에서 부하 분산기의 IP:포트를 기록해 둡니다.

gcloud

  1. 상태 점검을 만듭니다.
     gcloud compute health-checks create http http-basic-check \
         --port 80
     
  2. 백엔드 서비스를 만듭니다.
    gcloud compute backend-services create web-backend-service \
        --load-balancing-scheme=EXTERNAL \
        --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. HTTP의 경우 URL 맵을 만들어 수신 요청을 기본 백엔드 서비스로 라우팅합니다.
    gcloud compute url-maps create web-map-http \
      --default-service web-backend-service
    
  5. HTTPS의 경우 URL 맵을 만들어 수신 요청을 기본 백엔드 서비스로 라우팅합니다.
    gcloud compute url-maps create web-map-https \
      --default-service web-backend-service
    

HTTPS 프런트엔드 설정

HTTP 부하 분산기의 경우 이 섹션을 건너뜁니다.

  1. HTTPS의 경우 아직 만들지 않았으면 다음과 같이 전역 SSL 인증서 리소스를 만듭니다.
  2. HTTPS의 경우 대상 HTTPS 프록시를 만들어 요청을 URL 맵에 라우팅합니다. 프록시는 HTTPS 부하 분산기의 SSL 인증서를 보유하는 부하 분산기의 일부이므로 이 단계에서 인증서도 로드합니다.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map-https \
      --ssl-certificates=www-ssl-cert
    
  3. HTTPS의 경우 전역 전달 규칙을 만들어 수신 요청을 프록시로 라우팅합니다.
    gcloud compute forwarding-rules create https-content-rule \
      --load-balancing-scheme=EXTERNAL \
      --network-tier=PREMIUM \
      --address=lb-ipv4-1 \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    
  4. 선택사항: HTTPS의 경우 전역 SSL 정책을 만들고 이를 HTTPS 프록시에 연결합니다.
    전역 SSL 정책을 만들려면 다음을 실행합니다.
    gcloud compute ssl-policies create my-ssl-policy \
      --profile MODERN \
      --min-tls-version 1.0
    
    전역 대상 HTTPS 프록시에 SSL 정책을 연결하려면 다음을 실행합니다.
    gcloud compute target-https-proxies update https-lb-proxy \
      --ssl-policy my-ssl-policy
    

HTTP 프런트엔드 설정

HTTPS 부하 분산기의 경우 이 섹션을 건너뜁니다.

  1. HTTP의 경우 대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅합니다.
    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map-http
    
  2. HTTP의 경우 전역 전달 규칙을 만들어 수신 요청을 프록시로 라우팅합니다.
    gcloud compute forwarding-rules create http-content-rule \
      --load-balancing-scheme=EXTERNAL \
      --address=lb-ipv4-1 \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    

Terraform

  1. 상태 점검을 만들려면 google_compute_health_check 리소스를 사용합니다.

    resource "google_compute_health_check" "default" {
      name               = "http-basic-check"
      check_interval_sec = 5
      healthy_threshold  = 2
      http_health_check {
        port               = 80
        port_specification = "USE_FIXED_PORT"
        proxy_header       = "NONE"
        request_path       = "/"
      }
      timeout_sec         = 5
      unhealthy_threshold = 2
    }
  2. 백엔드 서비스를 만들려면 google_compute_backend_service 리소스를 사용합니다.

    이 예시에서는 고급 트래픽 관리 기능으로 전역 외부 애플리케이션 부하 분산기를 설정하는 load_balancing_scheme="EXTERNAL_MANAGED"를 사용합니다. 기본 애플리케이션 부하 분산기를 만들려면 스크립트를 실행하기 전에 load_balancing_schemeEXTERNAL로 변경해야 합니다.

    resource "google_compute_backend_service" "default" {
      name                            = "web-backend-service"
      connection_draining_timeout_sec = 0
      health_checks                   = [google_compute_health_check.default.id]
      load_balancing_scheme           = "EXTERNAL_MANAGED"
      port_name                       = "http"
      protocol                        = "HTTP"
      session_affinity                = "NONE"
      timeout_sec                     = 30
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }
  3. URL 맵을 만들려면 google_compute_url_map 리소스를 사용합니다.

    resource "google_compute_url_map" "default" {
      name            = "web-map-http"
      default_service = google_compute_backend_service.default.id
    }
  4. 대상 HTTP 프록시를 만들려면 google_compute_target_http_proxy 리소스를 사용합니다.

    resource "google_compute_target_http_proxy" "default" {
      name    = "http-lb-proxy"
      url_map = google_compute_url_map.default.id
    }
  5. 전달 규칙을 만들려면 google_compute_global_forwarding_rule 리소스를 사용합니다.

    이 예시에서는 고급 트래픽 관리 기능으로 전역 외부 애플리케이션 부하 분산기를 설정하는 load_balancing_scheme="EXTERNAL_MANAGED"를 사용합니다. 기본 애플리케이션 부하 분산기를 만들려면 스크립트를 실행하기 전에 load_balancing_schemeEXTERNAL로 변경해야 합니다.

    resource "google_compute_global_forwarding_rule" "default" {
      name                  = "http-content-rule"
      ip_protocol           = "TCP"
      load_balancing_scheme = "EXTERNAL_MANAGED"
      port_range            = "80-80"
      target                = google_compute_target_http_proxy.default.id
      ip_address            = google_compute_global_address.default.id
    }

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

외부 애플리케이션 부하 분산기에서 IAP 사용 설정

참고: IAP는 Cloud CDN과 호환되지 않습니다.

IAP를 사용 설정 또는 사용 중지(기본값)하도록 구성할 수 있습니다. 사용 설정된 경우 oauth2-client-idoauth2-client-secret 값을 제공해야 합니다.

IAP를 사용 설정하려면 --iap=enabled 플래그를 oauth2-client-idoauth2-client-secret과 함께 포함하도록 백엔드 서비스를 업데이트하세요.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

부하 분산기에 도메인 연결

부하 분산기를 만든 후 부하 분산기와 연결된 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

Cloud DNS를 DNS 제공업체로 사용하는 경우 레코드 추가, 수정, 삭제를 참조하세요.

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

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

콘솔

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

    부하 분산으로 이동

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

gcloud

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

몇 분이 지난 후에 다음 curl 명령어를 실행하여 설정을 테스트할 수 있습니다.

curl http://IP_ADDRESS

-또는-

curl https://HOSTNAME

다음 단계