공유 VPC로 내부 애플리케이션 부하 분산기 설정

이 문서에서는 공유 VPC 환경에서 내부 애플리케이션 부하 분산기를 설정하는 샘플 구성 2가지를 보여줍니다.

  • 첫 번째 예시에서는 단일 서비스 프로젝트에 모든 부하 분산기 구성요소와 백엔드를 만듭니다.
  • 두 번째 예시에서는 부하 분산기의 프런트엔드 구성요소 및 URL 맵은 단일 서비스 프로젝트에 만들지만 부하 분산기의 백엔드 서비스 및 백엔드를 다른 서비스 프로젝트에서 만듭니다. URL 맵이 다른 프로젝트의 백엔드 서비스를 참조하는 이러한 유형의 배포를 교차 프로젝트 서비스 참조라고 합니다.

두 예시 모두 동일한 선행 구성을 거쳐야 권한을 부여하고 공유 VPC를 설정하여 부하 분산기를 만들 수 있습니다.

이는 내부 애플리케이션 부하 분산기에서 지원하는 유일한 공유 VPC 구성이 아닙니다. 다른 유효한 공유 VPC 아키텍처는 공유 VPC 아키텍처를 참조하세요.

공유 VPC 네트워크를 사용하지 않으려면 내부 애플리케이션 부하 분산기 설정을 참조하세요.

시작하기 전에

  1. 공유 VPC 개요를 읽습니다.
  2. 공유 VPC 아키텍처 섹션을 포함한 내부 애플리케이션 부하 분산기 개요를 읽습니다.

권한 필요

공유 VPC 네트워크에서 부하 분산기를 설정하려면 관리자가 몇 가지 초기 설정과 프로비저닝을 수행해야 합니다. 초기 설정 후 서비스 프로젝트 소유자는 다음 중 하나를 수행할 수 있습니다.

  • 모든 부하 분산기의 모든 구성요소와 백엔드를 서비스 프로젝트에 배포합니다.
  • 부하 분산기의 백엔드 구성요소(백엔드 서비스와 백엔드)를 다른 서비스 또는 호스트 프로젝트의 URL 맵에서 참조할 수 있는 서비스 프로젝트에 배포합니다.

이 섹션에서는 이 가이드에 따라 공유 VPC 네트워크에 부하 분산기를 설정하는 데 필요한 권한을 요약합니다.

공유 VPC 설정

다음 태스크에는 다음 역할이 필요합니다.

  1. 공유 VPC 설정 및 호스트 프로젝트 사용 설정과 같은 일회성 관리 태스크를 수행합니다.
  2. 새 서비스 프로젝트를 온보딩할 때마다 반복해야 하는 관리 작업을 수행합니다. 여기에는 서비스 프로젝트 연결, 네트워킹 리소스 프로비저닝 및 구성, 서비스 프로젝트 관리자에게 액세스 권한 부여가 포함됩니다.

이러한 작업은 공유 VPC 호스트 프로젝트에서 수행해야 합니다. 공유 VPC 관리자를 공유 VPC 호스트 프로젝트의 소유자로 지정하는 것이 좋습니다. 이렇게 하면 네트워크 관리자 및 보안 관리자 역할이 자동으로 부여됩니다.

작업 필요한 역할
공유 VPC 설정, 호스트 프로젝트 사용 설정 및 서비스 프로젝트 관리자에게 액세스 권한 부여 공유 VPC 관리자
공유 VPC 호스트 프로젝트에서 서브넷을 만들기 및 서비스 프로젝트 관리자에게 액세스 권한 부여 네트워크 관리자
방화벽 규칙 추가 및 삭제 보안 관리자

서브넷이 프로비저닝되면 호스트 프로젝트 소유자는 호스트 프로젝트에서 이러한 리소스를 사용해야 하는 모든 사용자(일반적으로 서비스 프로젝트 관리자, 개발자 또는 서비스 계정)에게 네트워크 사용자 역할을 부여해야 합니다.

작업 필요한 역할
호스트 프로젝트에 속한 VPC 네트워크 및 서브넷 사용 네트워크 사용자

이 역할은 프로젝트 수준 또는 개별 서브넷에 부여할 수 있습니다. 개별 서브넷에 역할을 부여하는 것이 좋습니다. 프로젝트에 대한 역할을 부여하면 호스트 프로젝트의 VPC 네트워크에서 현재 및 향후의 모든 서브넷에 액세스할 수 있습니다.

부하 분산기 및 백엔드 배포

부하 분산 리소스 및 백엔드를 만들려면 서비스 프로젝트 관리자는 서비스 프로젝트에서 다음과 같은 역할이 필요합니다. 이러한 권한은 서비스 프로젝트 소유자나 편집자에게 자동으로 부여됩니다.

서비스 프로젝트에서 부여된 역할
작업 필요한 역할
부하 분산기 구성요소 만들기 네트워크 관리자
인스턴스 만들기 인스턴스 관리자
SSL 인증서 생성 및 수정 보안 관리자

기본 요건

이 섹션에서는 다음 단계를 수행해야 합니다.

  1. 호스트 프로젝트에서 네트워크 및 서브넷을 구성합니다.
  2. 호스트 프로젝트에서 공유 VPC를 설정합니다.

새 부하 분산기를 만들 때마다 이 섹션의 단계를 수행할 필요는 없습니다. 하지만 부하 분산기를 만들기 전에 여기에 설명된 리소스에 액세스할 수 있는지 확인해야 합니다.

호스트 프로젝트에서 네트워크 및 서브넷 구성

부하 분산기의 프런트엔드 및 백엔드에 대한 서브넷 1개와 부하 분산기의 프록시에 대한 서브넷 1개, 총 2개의 서브넷이 있는 공유 VPC 네트워크가 필요합니다.

이 예시에서는 다음 네트워크, 리전 및 서브넷을 사용합니다.

  • 네트워크: 네트워크 이름은 lb-network입니다.

  • 부하 분산기 프런트엔드 및 백엔드의 서브넷. us-west1 리전에 있는 lb-frontend-and-backend-subnet이라는 이름의 서브넷은 기본 IP 범위로 10.1.2.0/24를 사용합니다.

  • 프록시 서브넷: us-west1 리전에 있는 proxy-only-subnet이라는 이름의 서브넷은 기본 IP 범위로 10.129.0.0/23을 사용합니다.

부하 분산기의 프런트엔드 및 백엔드에 대한 서브넷 구성

새 부하 분산기를 만들려고 할 때마다 이 단계를 수행할 필요가 없습니다. 서비스 프로젝트에 프록시 전용 서브넷 외에 공유 VPC 네트워크의 서브넷에 대한 액세스 권한만 있으면 됩니다.

이 섹션의 모든 단계는 호스트 프로젝트에서 수행되어야 합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. VPC 네트워크 만들기를 클릭합니다.
  3. 이름lb-network를 입력합니다.
  4. 서브넷 섹션에서 다음을 수행합니다.

    1. 서브넷 생성 모드커스텀으로 설정합니다.
    2. 새 서브넷 섹션에 다음 정보를 입력합니다.

      • 이름: lb-frontend-and-backend-subnet
      • 리전: us-west1

      • IP 주소 범위: 10.1.2.0/24

    3. 완료를 클릭합니다.

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

gcloud

  1. gcloud compute networks create 명령어를 사용하여 VPC 네트워크를 만듭니다.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. us-west1 리전의 lb-network 네트워크에 서브넷을 만듭니다.

    gcloud compute networks subnets create lb-frontend-and-backend-subnet 
    --network=lb-network
    --range=10.1.2.0/24
    --region=us-west1

Terraform

  1. VPC 네트워크를 만듭니다.

    # Shared VPC network
    resource "google_compute_network" "lb_network" {
      name                    = "lb-network"
      provider                = google-beta
      project                 = "my-host-project-id"
      auto_create_subnetworks = false
    }

  2. us-west1 리전에 서브넷을 만듭니다.

    # Shared VPC network - backend subnet
    resource "google_compute_subnetwork" "lb_frontend_and_backend_subnet" {
      name          = "lb-frontend-and-backend-subnet"
      provider      = google-beta
      project       = "my-host-project-id"
      region        = "us-west1"
      ip_cidr_range = "10.1.2.0/24"
      role          = "ACTIVE"
      network       = google_compute_network.lb_network.id
    }

프록시 전용 서브넷 구성

프록시 전용 서브넷은 lb-network VPC 네트워크의 us-west1 리전에 있는 모든 리전별 Envoy 기반 부하 분산기에서 사용됩니다. 네트워크당 리전별 활성 프록시 전용 서브넷은 하나만 있을 수 있습니다.

이 네트워크의 us-west1 리전에 이미 예약된 프록시 전용 서브넷이 있으면 이 단계를 수행하지 마세요.

이 섹션의 모든 단계는 호스트 프로젝트에서 수행되어야 합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 공유 VPC 네트워크의 이름인 lb-network를 클릭합니다.
  3. 서브넷 추가를 클릭합니다.
  4. 이름proxy-only-subnet를 입력합니다.
  5. 리전에서 us-west1을 선택합니다.
  6. 용도리전별 관리형 프록시로 설정합니다.
  7. IP 주소 범위10.129.0.0/23을 입력합니다.
  8. 추가를 클릭합니다.

gcloud

gcloud compute networks subnets create 명령어로 프록시 전용 서브넷을 만듭니다.

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=us-west1 \
    --network=lb-network \
    --range=10.129.0.0/23

Terraform

프록시 전용 서브넷을 만듭니다.

# Shared VPC network - proxy-only subnet
resource "google_compute_subnetwork" "proxy_only_subnet" {
  name          = "proxy-only-subnet"
  provider      = google-beta
  project       = "my-host-project-id"
  region        = "us-west1"
  ip_cidr_range = "10.129.0.0/23"
  role          = "ACTIVE"
  purpose       = "REGIONAL_MANAGED_PROXY"
  network       = google_compute_network.lb_network.id
}

서비스 프로젝트 관리자에게 백엔드 서브넷에 대한 액세스 권한 부여

서비스 프로젝트 관리자는 부하 분산기의 백엔드를 프로비저닝할 수 있도록 lb-frontend-and-backend-subnet 서브넷에 액세스할 수 있어야 합니다.

공유 VPC 관리자는 서비스 프로젝트 관리자(또는 서브넷을 사용하는 리소스 및 백엔드를 배포하는 개발자)에게 백엔드 서브넷에 대한 액세스 권한을 부여해야 합니다. 자세한 내용은 일부 서브넷의 서비스 프로젝트 관리자를 참조하세요.

호스트 프로젝트에서 방화벽 규칙 구성

이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.
  • fw-allow-health-check. 부하 분산된 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 점검 시스템(130.211.0.0/2235.191.0.0/16)의 모든 TCP 트래픽을 허용합니다. 이 예시에서는 load-balanced-backend 대상 태그를 사용하여 인그레스 규칙을 적용해야 할 인스턴스를 식별합니다.
  • fw-allow-proxies. 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 부하 분산기의 관리형 프록시로부터 포트 80, 443, 8080의 TCP 트래픽을 허용합니다. 이 예시에서는 load-balanced-backend 대상 태그를 사용하여 방화벽 규칙이 적용되는 인스턴스를 식별합니다.
  • fw-allow-ssh. 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 TCP 포트 22에 임의의 주소로부터 수신되는 SSH 연결을 허용합니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작할 시스템의 IP 범위만 지정할 수 있습니다. 이 예시에서는 allow-ssh 대상 태그를 사용하여 방화벽 규칙이 적용되는 가상 머신(VM)을 식별합니다.
이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.

이 섹션의 모든 단계는 호스트 프로젝트에서 수행되어야 합니다.

콘솔

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

    방화벽 정책으로 이동

  2. 방화벽 규칙 만들기를 클릭하여 Google Cloud 상태 점검을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-health-check
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: load-balanced-backend
    • 소스 필터: IPv4 범위
    • 소스 IPv4 범위: 130.211.0.0/2235.191.0.0/16
    • 프로토콜 및 포트:
      • 지정된 프로토콜 및 포트를 선택합니다.
      • TCP를 확인하고 포트 번호에 80을 입력합니다.
      • 권장사항에 따라서 상태 점검에 사용되는 것과 일치하는 프로토콜 및 포트로 이러한 규칙을 제한합니다. 프로토콜 및 포트에 tcp:80을 사용하면 Google Cloud가 포트 80에서 HTTP를 사용하여 VM에 연결할 수 있지만 포트 443에서 HTTPS를 사용하여 연결할 수는 없습니다.

  3. 만들기를 클릭합니다.
  4. 방화벽 규칙 만들기를 클릭하여 Google Cloud 상태 점검을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-proxies
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: load-balanced-backend
    • 소스 필터: IPv4 범위
    • 소스 IPv4 범위: 10.129.0.0/23
    • 프로토콜 및 포트:
      • 지정된 프로토콜 및 포트를 선택합니다.
      • TCP를 확인하고 포트 번호에 80, 443, 8080을 입력합니다.
  5. 만들기를 클릭합니다.
  6. 방화벽 규칙 만들기를 클릭하여 Google Cloud 상태 점검을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-ssh
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-ssh
    • 소스 필터: IPv4 범위
    • 소스 IPv4 범위: 0.0.0.0/0
    • 프로토콜 및 포트:
      • 지정된 프로토콜 및 포트를 선택합니다.
      • TCP를 확인하고 포트 번호에 22를 입력합니다.
  7. 만들기를 클릭합니다.

gcloud

  1. fw-allow-health-check 규칙을 만들어 Google Cloud 상태 점검을 허용합니다. 이 예시에서는 상태 점검 프로버의 모든 TCP 트래픽을 허용합니다. 그러나 필요에 따라 더 좁은 포트 집합을 구성할 수 있습니다.

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    
  2. Envoy 프록시 전용 서브넷의 트래픽이 백엔드에 도달하도록 허용하는 fw-allow-proxies 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-proxies \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=10.129.0.0/23 \
       --target-tags=load-balanced-backend \
       --rules=tcp:80,tcp:443,tcp:8080
    

  3. allow-ssh 네트워크 태그를 사용해 VM으로 가는 SSH 연결을 허용하는 fw-allow-ssh 방화벽 규칙을 만듭니다. source-ranges를 생략하면 Google Cloud는 모든 소스를 의미하는 것으로 규칙을 해석합니다.

    gcloud compute firewall-rules create fw-allow-ssh \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-ssh \
       --rules=tcp:22
    

Terraform

  1. Google Cloud 상태 점검을 허용하는 방화벽 규칙을 만듭니다.

    resource "google_compute_firewall" "fw_allow_health_check" {
      name          = "fw-allow-health-check"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
      allow {
        protocol = "tcp"
      }
      target_tags = ["load-balanced-backend"]
    }

  2. Envoy 프록시 전용 서브넷의 트래픽이 백엔드에 연결하도록 허용하는 방화벽 규칙을 만듭니다.

    resource "google_compute_firewall" "fw_allow_proxies" {
      name          = "fw-allow-proxies"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["10.129.0.0/23"]
      allow {
        protocol = "tcp"
        ports    = ["80", "443", "8080"]
      }
      target_tags = ["load-balanced-backend"]
    }

  3. allow-ssh 네트워크 태그를 사용하여 VM에 대한 SSH 연결을 허용하는 방화벽 규칙을 만듭니다.

    resource "google_compute_firewall" "fw_allow_ssh" {
      name          = "fw-allow-ssh"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["0.0.0.0/0"]
      allow {
        protocol = "tcp"
        ports    = ["22"]
      }
      target_tags = ["allow-ssh"]
    }

호스트 프로젝트에서 공유 VPC 설정

이 단계에서는 공유 VPC 호스트 프로젝트를 사용 설정하고, 호스트 프로젝트의 서브넷을 공유하고, 서비스 프로젝트가 공유 VPC 네트워크를 사용할 수 있도록 호스트 프로젝트에 서비스 프로젝트를 연결합니다. 호스트 프로젝트에서 공유 VPC를 설정하려면 다음 페이지를 참조하세요.

이 안내의 나머지 부분에서는 이미 공유 VPC를 설정했다고 가정합니다. 여기에는 조직에 IAM 정책을 설정하고 호스트와 서비스 프로젝트를 지정하는 과정이 포함됩니다.

공유 VPC를 설정하고 호스트와 서비스 프로젝트를 사용 설정한 다음에 진행하세요.

이 기본 요건 섹션에 정의된 단계를 완료한 후 다음 설정 중 하나를 수행할 수 있습니다.

서비스 프로젝트에서 부하 분산기 구성

이 예시에서는 모든 부하 분산 구성요소(전달 규칙, 대상 프록시, URL 맵, 백엔드 서비스)와 백엔드가 서비스 프로젝트에 생성되는 내부 애플리케이션 부하 분산기를 만듭니다.

프록시 전용 서브넷 및 백엔드 인스턴스의 서브넷과 같은 내부 애플리케이션 부하 분산기의 네트워킹 리소스가 호스트 프로젝트에 생성됩니다. 백엔드 인스턴스의 방화벽 규칙도 호스트 프로젝트에 생성됩니다.

그림 1. 공유 VPC의 내부 애플리케이션 부하 분산기
그림 1. 공유 VPC의 내부 애플리케이션 부하 분산기

이 섹션에서는 부하 분산기와 백엔드를 설정하는 방법을 보여줍니다. 서비스 프로젝트 관리자(또는 서비스 프로젝트 내에서 작업하는 개발자)가 이 단계를 수행해야 하며 호스트 프로젝트 관리자는 이 단계에 관여할 필요가 없습니다. 이 섹션의 단계는 내부 애플리케이션 부하 분산기 설정을 위한 표준 단계와 매우 유사합니다.

이 페이지의 예시에서는 임시 내부 IP 주소 할당을 허용하는 대신 내부 애플리케이션 부하 분산기의 전달 규칙에 예약된 내부 IP 주소를 명시적으로 설정합니다. 권장사항에 따라서 전달 규칙에 IP 주소를 예약하는 것이 좋습니다.

관리형 인스턴스 그룹 백엔드 만들기

이 섹션에서는 템플릿 및 관리형 인스턴스 그룹 생성 방법을 보여줍니다. 관리형 인스턴스 그룹은 내부 애플리케이션 부하 분산기 예시의 백엔드 서버를 실행하는 VM 인스턴스를 제공합니다. 클라이언트에서 전송된 트래픽은 이러한 백엔드 서버로 부하 분산됩니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다.

콘솔

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

    인스턴스 템플릿으로 이동

    1. 인스턴스 템플릿 만들기를 클릭합니다.
    2. 이름l7-ilb-backend-template를 입력합니다.
    3. 부팅 디스크Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. 부팅 디스크를 변경해야 하는 경우 변경을 클릭합니다.
      1. 운영체제Debian을 선택합니다.
      2. 버전에서 Debian GNU/Linux 12(bookworm)와 같은 사용 가능한 Debian 이미지 중 하나를 선택합니다.
      3. 선택을 클릭합니다.
    4. 고급 옵션을 클릭한 후 네트워킹을 클릭합니다.
    5. 다음 네트워크 태그: allow-ssh, load-balanced-backend를 입력합니다.
    6. 네트워크 인터페이스 섹션에서 내게 공유된 네트워크(호스트 프로젝트: HOST_PROJECT_ID)를 선택합니다.
    7. lb-network 네트워크에서 lb-frontend-and-backend-subnet 서브넷을 선택합니다.
    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. 만들기를 클릭합니다.
  2. 관리형 인스턴스 그룹을 만듭니다. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹으로 이동

    1. 인스턴스 그룹 만들기를 클릭합니다.
    2. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
    3. 이름l7-ilb-backend-example를 입력합니다.
    4. 위치에서 단일 영역을 선택합니다.
    5. 리전에서 us-west1을 선택합니다.
    6. 영역에서 us-west1-a를 선택합니다.
    7. 인스턴스 템플릿에서 l7-ilb-backend-template을 선택합니다.
    8. 그룹에 만들 인스턴스의 수를 지정합니다.

      이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.

      • 자동 확장 모드에서 Off:do not autoscale을 선택합니다.
      • 최대 인스턴스 수2를 입력합니다.

      원할 경우 UI의 자동 확장 섹션에서 인스턴스 그룹을 구성하여 인스턴스 CPU 사용량을 기준으로 인스턴스를 자동 추가 또는 삭제할 수 있습니다.

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

gcloud

이 가이드의 gcloud 안내에서는 Cloud Shell 또는 bash가 설치된 다른 환경을 사용한다고 가정합니다.

  1. gcloud compute instance-templates create 명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create l7-ilb-backend-template \
    --region=us-west1 \
    --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --tags=allow-ssh,load-balanced-backend \
    --image-family=debian-12 \
    --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' \
    --project=SERVICE_PROJECT_ID
    
  2. gcloud compute instance-groups managed create 명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create l7-ilb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-ilb-backend-template \
        --project=SERVICE_PROJECT_ID
    

Terraform

  1. VM 인스턴스 템플릿 만들기

    # Instance template
    resource "google_compute_instance_template" "default" {
      name     = "l7-ilb-backend-template"
      provider = google-beta
      project  = "my-service-project-id"
      region   = "us-west1"
      # For machine type, using small. For more options check https://cloud.google.com/compute/docs/machine-types
      machine_type = "e2-small"
      tags         = ["allow-ssh", "load-balanced-backend"]
      network_interface {
        network    = google_compute_network.lb_network.id
        subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
        access_config {
          # add external ip to fetch packages like apache2, ssl
        }
      }
      disk {
        source_image = "debian-cloud/debian-12"
        auto_delete  = true
        boot         = true
      }
    
      # install apache2 and serve a simple web page
      metadata = {
        startup-script = <<EOF
        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        sudo echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2
        EOF
      }
    }
  2. 관리형 인스턴스 그룹을 만듭니다.

    HTTP의 경우:

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "http"
        port = 80
      }
    }

    HTTPS의 경우:

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "https"
        port = 443
      }
    }

부하 분산기 구성

이 섹션에서는 내부 애플리케이션 부하 분산기 리소스를 만드는 방법을 보여줍니다.

  • HTTP 상태 점검
  • 관리형 인스턴스 그룹이 백엔드인 백엔드 서비스
  • URL 맵
  • SSL 인증서(HTTPS에만 필요)
  • 대상 프록시
  • 전달 규칙

프록시 가용성

동일한 공유 VPC 네트워크를 사용하는 서비스 프로젝트 수에 따라 각 Google Cloud 프로젝트가 자체 네트워크를 호스팅하는 네트워크 배포 모델에서보다 할당량 또는 한도에 더 빠르게 도달할 수 있습니다.

예를 들어 경우에 따라 새로운 내부 애플리케이션 부하 분산기의 프록시 용량이 Google Cloud 리전에 충분하지 않을 수도 있습니다. 이 경우 부하 분산기를 생성할 때 Google Cloud 콘솔에서 프록시 가용성 경고 메시지를 제공합니다. 이 문제를 해결하려면 다음 중 하나를 수행하면 됩니다.

  • 용량 문제가 해결될 때까지 기다립니다.
  • 이 한도를 늘리기 위해 Google Cloud 영업팀에 문의합니다.

콘솔

서비스 프로젝트로 컨텍스트 전환

  1. Google Cloud 콘솔에서 대시보드 페이지로 이동합니다.

    대시보드로 이동

  2. 페이지 상단에 있는 선택 목록을 클릭합니다. 선택 창이 표시되면 부하 분산기를 만들려는 서비스 프로젝트를 선택합니다.

구성 시작

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

    부하 분산으로 이동

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

기본 구성

  1. 부하 분산기 이름l7-ilb-shared-vpc를 입력합니다.
  2. 리전으로 us-west1을 선택합니다.
  3. 네트워크프로젝트: HOST_PROJECT_IDlb-network를 선택합니다.

    공유 VPC 네트워크에 필요한 프록시 전용 서브넷 경고가 표시되면 호스트 프로젝트 관리자가 다음 위치에서 lb-network 공유 VPC 네트워크의 us-west1 리전에서 proxy-only-subnet을 만들었는지 확인합니다. 이 페이지의 프록시 전용 서브넷을 볼 수 있는 권한이 없는 경우에도 부하 분산기 만들기가 성공합니다.

  4. 계속하려면 창을 열어둡니다.

백엔드 구성

  1. 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 만들기 또는 선택 메뉴에서 백엔드 서비스 만들기를 선택합니다.
  3. 백엔드 서비스의 이름l7-ilb-backend-service로 설정합니다.
  4. 백엔드 유형인스턴스 그룹으로 설정합니다.
  5. 새 백엔드 섹션에서 다음을 수행합니다.
    1. 인스턴스 그룹l7-ilb-backend-example로 설정합니다.
    2. 포트 번호80으로 설정합니다.
    3. 분산 모드사용률로 설정합니다.
    4. 완료를 클릭합니다.
  6. 상태 확인 섹션에서 상태 확인 만들기의 매개변수를 다음과 같이 선택합니다.
    1. 이름: l7-ilb-basic-check
    2. 프로토콜: HTTP
    3. 포트: 80
  7. 저장 후 계속을 클릭합니다.
  8. 만들기를 클릭합니다.

라우팅 규칙 구성

  • 라우팅 규칙을 클릭합니다. l7-ilb-backend-service이 일치하지 않는 모든 호스트 및 일치하지 않는 모든 경로에 대한 유일한 백엔드 서비스입니다.

트래픽 관리에 대한 자세한 내용은 트래픽 관리 설정을 참조하세요.

프런트엔드 구성

HTTP의 경우:

  1. 프런트엔드 구성을 클릭합니다.
  2. 이름l7-ilb-forwarding-rule로 설정합니다.
  3. 프로토콜HTTP로 설정합니다.
  4. 서브네트워크lb-frontend-and-backend-subnet로 설정합니다. 목록에 있는 옵션이라도 프런트엔드에 프록시 전용 서브넷을 선택하지 마세요.
  5. 포트80으로 설정합니다.
  6. IP 주소 메뉴를 클릭한 후 IP 주소 만들기를 클릭합니다.
  7. 고정 내부 IP 주소 예약 패널에서 다음 세부정보를 제공합니다.
    1. 이름ip-address-shared-vpc를 입력합니다.
    2. 고정 IP 주소에 대해 직접 선택을 클릭합니다. 커스텀 IP 주소10.1.2.99를 입력합니다.
    3. (선택사항) 이 IP 주소를 다른 프런트엔드와 공유하려면 목적공유로 설정합니다.
  8. 완료를 클릭합니다.

HTTPS의 경우:

클라이언트와 부하 분산기 사이에 HTTPS를 사용하는 경우 프록시를 구성할 하나 이상의 SSL 인증서 리소스가 필요합니다. SSL 인증서 리소스를 만드는 방법에 대한 자세한 내용은 SSL 인증서를 참조하세요. 내부 애플리케이션 부하 분산기에서는 현재 Google 관리 인증서가 지원되지 않습니다.

  1. 프런트엔드 구성을 클릭합니다.
  2. 이름 필드에 l7-ilb-forwarding-rule을 입력합니다.
  3. 프로토콜 필드에서 HTTPS (includes HTTP/2)를 선택합니다.
  4. 서브네트워크lb-frontend-and-backend-subnet로 설정합니다. 목록에 있는 옵션이라도 프런트엔드에 프록시 전용 서브넷을 선택하지 마세요.
  5. HTTPS 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
  6. IP 주소 메뉴를 클릭한 후 IP 주소 만들기를 클릭합니다.
  7. 고정 내부 IP 주소 예약 패널에서 다음 세부정보를 제공합니다.
    1. 이름ip-address-shared-vpc를 입력합니다.
    2. 고정 IP 주소에 대해 직접 선택을 클릭합니다. 커스텀 IP 주소10.1.2.99를 입력합니다.
    3. (선택사항) 이 IP 주소를 다른 프런트엔드와 공유하려면 목적공유로 설정합니다.
  8. 인증서 목록을 클릭합니다.
    1. 기본 SSL 인증서로 사용할 자체 관리형 SSL 인증서 리소스가 이미 있으면 메뉴에서 이 리소스를 선택합니다.
    2. 그 이외의 경우 새 인증서 만들기를 선택합니다.
      1. l7-ilb-cert이름을 입력합니다.
      2. 해당 필드에 다음 PEM 형식의 파일을 업로드합니다.
        • 공개 키 인증서
        • 인증서 체인
        • 비공개 키
      3. 만들기를 클릭합니다.
  9. 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 다음 안내를 따르세요.
    1. 인증서 추가를 클릭합니다.
    2. 인증서 목록에서 인증서를 선택하거나 새 인증서 만들기를 클릭하고 이전 안내를 따릅니다.
  10. 완료를 클릭합니다.

구성 검토 및 완료

  • 만들기를 클릭합니다.

gcloud

  1. gcloud compute health-checks create http 명령어로 HTTP 상태 점검을 정의합니다.

    gcloud compute health-checks create http l7-ilb-basic-check \
       --region=us-west1 \
       --use-serving-port \
       --project=SERVICE_PROJECT_ID
    
  2. gcloud compute backend-services create 명령어로 백엔드 서비스를 정의합니다.

    gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  3. gcloud compute backend-services add-backend 명령어로 백엔드 서비스에 백엔드를 추가합니다.

    gcloud compute backend-services add-backend l7-ilb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-ilb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  4. gcloud compute url-maps create 명령어로 URL 맵을 만듭니다.

    gcloud compute url-maps create l7-ilb-map \
      --default-service=l7-ilb-backend-service \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  5. 대상 프록시를 만듭니다.

    HTTP의 경우:

    내부 HTTP 부하 분산기의 경우 gcloud compute target-http-proxies create 명령어로 대상 프록시를 만듭니다.

    gcloud compute target-http-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

    HTTPS의 경우:

    SSL 인증서 리소스를 만드는 방법에 대한 자세한 내용은 SSL 인증서를 참조하세요. 내부 애플리케이션 부하 분산기에서는 현재 Google 관리 인증서가 지원되지 않습니다.

    파일 경로를 변수 이름에 할당합니다.

    export LB_CERT=path to PEM-formatted file
    
    export LB_PRIVATE_KEY=path to PEM-formatted file
    

    gcloud compute ssl-certificates create 명령어를 사용하여 리전별 SSL 인증서를 만듭니다.

    gcloud compute ssl-certificates create l7-ilb-cert \
      --certificate=$LB_CERT \
      --private-key=$LB_PRIVATE_KEY \
      --region=us-west1
    

    리전별 SSL 인증서를 사용하여 gcloud compute target-https-proxies create 명령어로 대상 프록시를 만듭니다.

    gcloud compute target-https-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --region=us-west1 \
      --ssl-certificates=l7-ilb-cert \
      --project=SERVICE_PROJECT_ID
    
  6. 전달 규칙을 만듭니다.

    커스텀 네트워크의 경우 전달 규칙에서 서브넷을 참조해야 합니다.

    전달 규칙의 IP 주소는 lb-frontend-and-backend-subnet을 사용합니다. 프록시 전용 서브넷을 사용하려고 하면 전달 규칙 생성에 실패합니다.

    HTTP의 경우:

    올바른 플래그와 함께 gcloud compute forwarding-rules create 명령어를 사용합니다.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_NAME \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

    HTTPS의 경우:

    올바른 플래그와 함께 gcloud compute forwarding-rules create 명령어를 사용합니다.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_NAME \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-ilb-proxy \
      --target-https-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

Terraform

  1. HTTP 상태 점검을 정의합니다.

    HTTP의 경우:

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-id"
      timeout_sec        = 1
      check_interval_sec = 1
      http_health_check {
        port = "80"
      }
    }

    HTTPS의 경우:

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-id"
      timeout_sec        = 1
      check_interval_sec = 1
      https_health_check {
        port = "443"
      }
    }

  2. 백엔드 서비스를 정의합니다.

    # backend service
    resource "google_compute_region_backend_service" "default" {
      name                  = "l7-ilb-backend-service"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      protocol              = "HTTP"
      load_balancing_scheme = "INTERNAL_MANAGED"
      timeout_sec           = 10
      health_checks         = [google_compute_health_check.default.id]
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }
  3. URL 맵을 만듭니다.

    # URL map
    resource "google_compute_region_url_map" "default" {
      name            = "l7-ilb-map"
      provider        = google-beta
      project         = "my-service-project-id"
      region          = "us-west1"
      default_service = google_compute_region_backend_service.default.id
    }
  4. 대상 프록시를 만듭니다.

    HTTP의 경우:

    # HTTP target proxy
    resource "google_compute_region_target_http_proxy" "default" {
      name     = "l7-ilb-proxy"
      provider = google-beta
      project  = "my-service-project-id"
      region   = "us-west1"
      url_map  = google_compute_region_url_map.default.id
    }

    HTTPS의 경우: 리전별 SSL 인증서 만들기

    SSL 인증서 리소스를 만드는 방법에 대한 자세한 내용은 SSL 인증서를 참조하세요. 내부 애플리케이션 부하 분산기에서는 현재 Google 관리 인증서가 지원되지 않습니다.

    # Use self-signed SSL certificate
    resource "google_compute_region_ssl_certificate" "default" {
      name        = "l7-ilb-cert"
      provider    = google-beta
      project     = "my-service-project-id"
      region      = "us-west1"
      private_key = file("sample-private.key") # path to PEM-formatted file
      certificate = file("sample-server.cert") # path to PEM-formatted file
    }

    리전 SSL 인증서를 사용하여 대상 프록시 만들기

    # HTTPS target proxy
    resource "google_compute_region_target_https_proxy" "default" {
      name             = "l7-ilb-proxy"
      provider         = google-beta
      project          = "my-service-project-id"
      region           = "us-west1"
      url_map          = google_compute_region_url_map.default.id
      ssl_certificates = [google_compute_region_ssl_certificate.default.id]
    }
  5. 전달 규칙을 만듭니다.

    커스텀 네트워크의 경우 전달 규칙에서 서브넷을 참조해야 합니다.

    HTTP의 경우:

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "80"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_http_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

    HTTPS의 경우:

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "443"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_https_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

부하 분산기 테스트

부하 분산기를 테스트하려면 먼저 샘플 클라이언트 VM을 만듭니다. 그런 다음 VM으로 SSH 세션을 설정하고 이 VM에서 부하 분산기로 트래픽을 전송합니다.

테스트 VM 인스턴스 만들기

클라이언트는 호스트 프로젝트 또는 모든 연결된 서비스 프로젝트에 위치할 수 있습니다. 이 예시에서는 서비스 프로젝트에 클라이언트 VM을 배포하여 부하 분산기가 작동하는지 테스트합니다. 클라이언트는 동일한 공유 VPC 네트워크를 사용해야 하며 부하 분산기와 동일한 리전에 있어야 합니다.

콘솔

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

    VM 인스턴스로 이동

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

  3. 이름client-vm로 설정합니다.

  4. 영역us-west1-a로 설정합니다.

  5. 고급 옵션을 클릭한 후 네트워킹을 클릭합니다.

  6. 다음 네트워크 태그: allow-ssh, load-balanced-backend를 입력합니다.

  7. 네트워크 인터페이스 섹션에서 내게 공유된 네트워크(호스트 프로젝트: HOST_PROJECT_ID)를 선택합니다.

  8. lb-network 네트워크에서 lb-frontend-and-backend-subnet 서브넷을 선택합니다.

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

gcloud

테스트 VM 인스턴스를 만듭니다.

gcloud compute instances create client-vm \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --zone=us-west1-a \
    --tags=allow-ssh \
    --project=SERVICE_PROJECT_ID

Terraform

테스트 VM 인스턴스를 만듭니다.

resource "google_compute_instance" "vm_test" {
  name         = "client-vm"
  provider     = google-beta
  project      = "my-service-project-id"
  zone         = "us-west1-a"
  machine_type = "e2-small"
  tags         = ["allow-ssh"]
  network_interface {
    network    = google_compute_network.lb_network.id
    subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
    }
  }
  lifecycle {
    ignore_changes = [
      metadata["ssh-keys"]
    ]
  }
}

부하 분산기로 트래픽 전송

SSH를 사용해 방금 만든 인스턴스에 연결한 후 내부 애플리케이션 부하 분산기의 전달 규칙 IP 주소를 통해 백엔드의 HTTP(S) 서비스에 연결할 수 있는지와 백엔드 인스턴스 전체에 트래픽이 부하 분산되는지 테스트합니다.

  1. SSH를 사용하여 클라이언트 인스턴스에 연결합니다.

    gcloud compute ssh client-vm \
       --zone=us-west1-a
    
  2. IP 주소가 호스트 이름을 제공하는지 확인합니다. LB_IP_ADDRESS를 부하 분산기의 IP 주소로 바꿉니다.

    curl LB_IP_ADDRESS
    

    HTTPS 테스트의 경우 curl을 다음으로 바꿉니다.

    curl -k -s 'https://LB_IP_ADDRESS:443'
    

    -k 플래그로 인해 curl이 인증서 유효성 검사를 건너뜁니다.

프로젝트 간 백엔드 서비스로 부하 분산기 구성

이 페이지의 이전 예시에서는 모든 부하 분산기 구성 요소와 백엔드가 서비스 프로젝트에 생성되는 공유 VPC 배포를 설정하는 방법을 보여줍니다.

내부 애플리케이션 부하 분산기를 사용하면 단일 호스트 또는 서비스 프로젝트의 URL 맵에서 공유 VPC 환경의 여러 서비스 프로젝트에 위치한 백엔드 서비스(및 백엔드)를 참조할 수 있는 공유 VPC 배포도 구성할 수 있습니다. 이를 교차 프로젝트 서비스 참조라고 합니다.

이 섹션의 단계를 참조하면 여기에 나온 지원되는 조합을 구성할 수 있습니다.

  • 호스트 프로젝트의 전달 규칙, 대상 프록시 및 URL 맵, 서비스 프로젝트의 백엔드 서비스
  • 서비스 프로젝트의 전달 규칙, 대상 프록시 및 URL 맵, 다른 서비스 프로젝트의 백엔드 서비스

교차 프로젝트 서비스 참조는 인스턴스 그룹, 서버리스 NEG, 기타 지원되는 백엔드 유형에 사용할 수 있습니다. 서버리스 NEG를 사용하는 경우 부하 분산기의 프런트엔드를 만들려는 VPC 네트워크에서 VM을 만들어야 합니다. 예시를 보려면 Cloud Run으로 내부 애플리케이션 부하 분산기 설정특정 서브넷에서 VM 인스턴스 만들기를 참조하세요.

설정 요구사항

이 예시에서는 프런트엔드 및 백엔드가 서로 다른 두 서비스 프로젝트에 있는 샘플 부하 분산기를 구성합니다.

아직 수행하지 않았으면 공유 VPC를 설정하고 이 예시에 필요한 네트워크, 서브넷, 방화벽 규칙을 구성하는 모든 기본 요건 단계를 완료해야 합니다. 자세한 내용은 다음을 참조하세요.

그림 2. 다른 서비스 프로젝트의 부하 분산기 프런트엔드 및 백엔드
그림 2. 다른 서비스 프로젝트의 부하 분산기 프런트엔드 및 백엔드

서비스 프로젝트 B에서 백엔드 및 백엔드 서비스 만들기

이 섹션의 모든 단계가 서비스 프로젝트 B에 수행되어야 합니다.

콘솔

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

    인스턴스 템플릿으로 이동

    1. 인스턴스 템플릿 만들기를 클릭합니다.
    2. 인스턴스 템플릿의 이름cross-ref-backend-template으로 입력합니다.
    3. 부팅 디스크Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. 부팅 디스크를 변경해야 하는 경우 변경을 클릭합니다.
      1. 운영체제Debian을 선택합니다.
      2. 버전에서 Debian GNU/Linux 12(bookworm)와 같은 사용 가능한 Debian 이미지 중 하나를 선택합니다.
      3. 선택을 클릭합니다.
    4. 고급 옵션을 클릭한 후 네트워킹을 클릭합니다.
    5. 다음 네트워크 태그: allow-ssh, load-balanced-backend를 입력합니다.
    6. 네트워크 인터페이스 섹션에서 내게 공유된 네트워크(호스트 프로젝트: HOST_PROJECT_ID)를 선택합니다.
    7. lb-network 네트워크에서 lb-frontend-and-backend-subnet 서브넷을 선택합니다.
    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. 만들기를 클릭합니다.
  2. 관리형 인스턴스 그룹을 만듭니다. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹으로 이동

    1. 인스턴스 그룹 만들기를 클릭합니다.
    2. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
    3. 인스턴스 그룹의 이름cross-ref-ig-backend로 입력합니다.
    4. 위치에서 단일 영역을 선택합니다.
    5. 리전에서 us-west1을 선택합니다.
    6. 영역에서 us-west1-a를 선택합니다.
    7. 인스턴스 템플릿에서 cross-ref-backend-template을 선택합니다.
    8. 그룹에 만들 인스턴스의 수를 지정합니다.

      이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.

      • 자동 확장 모드에서 Off:do not autoscale을 선택합니다.
      • 최대 인스턴스 수2를 입력합니다.

      원할 경우 UI의 자동 확장 섹션에서 인스턴스 그룹을 구성하여 인스턴스 CPU 사용량을 기준으로 인스턴스를 자동 추가 또는 삭제할 수 있습니다.

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

  3. 리전 백엔드 서비스를 만듭니다. 이 단계의 일부로 상태 점검을 만들고 백엔드 서비스에 백엔드도 추가합니다. Google Cloud 콘솔에서 백엔드 페이지로 이동합니다.

    백엔드로 이동

    1. 리전별 백엔드 서비스 만들기를 클릭합니다.
    2. 백엔드 서비스의 이름cross-ref-backend-service로 입력합니다.
    3. 리전에서 us-west1을 선택합니다.
    4. 부하 분산기 유형에서 리전 내부 애플리케이션 부하 분산기(INTERNAL_MANAGED)를 선택합니다.
    5. 백엔드 유형인스턴스 그룹으로 설정합니다.
    6. 백엔드 섹션에서 네트워크lb-network로 설정합니다.
    7. 백엔드 추가를 클릭하고 다음 필드를 설정합니다.
      1. 인스턴스 그룹cross-ref-ig-backend로 설정합니다.
      2. 포트 번호80을 입력합니다.
      3. 분산 모드사용률로 설정합니다.
      4. 완료를 클릭합니다.
    8. 상태 확인 섹션에서 상태 확인 만들기의 매개변수를 다음과 같이 선택합니다.
      1. 이름: cross-ref-http-health-check
      2. 프로토콜: HTTP
      3. 포트: 80
      4. 저장을 클릭합니다.
    9. 계속을 클릭합니다.
    10. 선택사항: 자체 프로젝트의 부하 분산기에 대해 이 백엔드 서비스를 사용할 수 있도록 권한 추가 섹션에 다른 프로젝트에서 부하 분산기 관리자의 IAM 주 구성원(일반적으로 이메일 주소)을 입력합니다. 이 권한이 없으면 교차 프로젝트 서비스 참조를 사용할 수 없습니다.

      이 프로젝트의 백엔드 서비스에 대해 액세스 제어 정책을 설정할 수 있는 권한이 없는 경우에도 이제 백엔드 서비스를 만들 수 있고, 승인된 사용자가 부하 분산기 관리자에게 백엔드 서비스를 사용할 수 있는 권한 부여 섹션에 설명된 대로 나중에 이 단계를 수행할 수 있습니다. 또한 이 섹션에서는 이 프로젝트의 모든 백엔드 서비스에 대해 액세스 권한을 부여하는 방법을 설명하므로, 새 백엔드 서비스를 만들 때마다 액세스 권한을 부여할 필요가 없습니다.

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

gcloud

  1. gcloud compute instance-templates create 명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create BACKEND_IG_TEMPLATE \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
        --tags=allow-ssh,load-balanced-backend \
        --image-family=debian-12 \
        --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' \
        --project=SERVICE_PROJECT_B_ID
    

    다음을 바꿉니다.

    • BACKEND_IG_TEMPLATE: 인스턴스 그룹 템플릿의 이름입니다.
    • SERVICE_PROJECT_B_ID: 부하 분산기 백엔드와 백엔드 서비스가 생성되는 서비스 프로젝트 B의 프로젝트 ID입니다.
    • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID입니다.
  2. gcloud compute instance-groups managed create 명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create BACKEND_MIG \
        --zone=us-west1-a \
        --size=2 \
        --template=BACKEND_IG_TEMPLATE \
        --project=SERVICE_PROJECT_B_ID
    

    다음을 바꿉니다.

    • BACKEND_MIG: 백엔드 인스턴스 그룹의 이름입니다.
  3. gcloud compute health-checks create http 명령어로 HTTP 상태 점검을 정의합니다.

    gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
      --region=us-west1 \
      --use-serving-port \
      --project=SERVICE_PROJECT_B_ID
    

    다음을 바꿉니다.

    • HTTP_HEALTH_CHECK_NAME: HTTP 상태 점검의 이름입니다.
  4. gcloud compute backend-services create 명령어로 백엔드 서비스를 정의합니다.

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=HTTP_HEALTH_CHECK_NAME \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_B_ID
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 서비스 프로젝트 B에서 만든 백엔드 서비스의 이름입니다.
  5. gcloud compute backend-services add-backend 명령어로 백엔드 서비스에 백엔드를 추가합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --balancing-mode=UTILIZATION \
      --instance-group=BACKEND_MIG \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project=SERVICE_PROJECT_B_ID
    

Terraform

  1. 인스턴스 템플릿을 만듭니다.

    # Instance template
    resource "google_compute_instance_template" "default" {
      name     = "l7-ilb-backend-template"
      provider = google-beta
      project  = "my-service-project-b-id"
      region   = "us-west1"
      # For machine type, using small. For more options check https://cloud.google.com/compute/docs/machine-types
      machine_type = "e2-small"
      tags         = ["allow-ssh", "load-balanced-backend"]
      network_interface {
        network    = google_compute_network.lb_network.id
        subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
        access_config {
          # add external ip to fetch packages like apache2, ssl
        }
      }
      disk {
        source_image = "debian-cloud/debian-12"
        auto_delete  = true
        boot         = true
      }
    
      # install apache2 and serve a simple web page
      metadata = {
        startup-script = <<EOF
        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        sudo echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2
        EOF
      }
    }
  2. 관리형 인스턴스 그룹을 만듭니다.

    HTTP의 경우

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-b-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "http"
        port = 80
      }
    }

    HTTPS의 경우

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-b-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "https"
        port = 443
      }
    }
  3. 백엔드의 상태 점검을 만듭니다.

    HTTP의 경우

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-b-id"
      timeout_sec        = 1
      check_interval_sec = 1
      http_health_check {
        port = "80"
      }
    }

    HTTPS의 경우

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-b-id"
      timeout_sec        = 1
      check_interval_sec = 1
      https_health_check {
        port = "443"
      }
    }
  4. 리전 백엔드 서비스를 만듭니다.

    # backend service
    resource "google_compute_region_backend_service" "default" {
      name                  = "l7-ilb-backend-service"
      provider              = google-beta
      project               = "my-service-project-b-id"
      region                = "us-west1"
      protocol              = "HTTP"
      load_balancing_scheme = "INTERNAL_MANAGED"
      timeout_sec           = 10
      health_checks         = [google_compute_health_check.default.id]
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }

서비스 프로젝트 A에서 부하 분산기 프런트엔드 및 URL 맵 만들기

이 섹션의 모든 단계는 서비스 프로젝트 A에서 수행되어야 합니다.

콘솔

구성 시작

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

    부하 분산으로 이동

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

기본 구성

  1. 부하 분산기의 이름을 입력합니다.
  2. 리전으로 us-west1을 선택합니다.
  3. 네트워크프로젝트: HOST_PROJECT_NAMElb-network를 선택합니다.

    공유 VPC 네트워크에 필요한 프록시 전용 서브넷 경고가 표시되면 호스트 프로젝트 관리자가 다음 위치에서 lb-network 공유 VPC 네트워크의 us-west1 리전에서 proxy-only-subnet을 만들었는지 확인합니다. 이 페이지의 프록시 전용 서브넷을 볼 수 있는 권한이 없는 경우에도 부하 분산기 만들기가 성공합니다.

  4. 계속하려면 창을 열어둡니다.

백엔드 구성

  1. 백엔드 구성을 클릭합니다.
  2. 프로젝트 간 백엔드 서비스를 클릭합니다.
  3. 프로젝트 ID에 서비스 프로젝트 B의 프로젝트 ID를 입력합니다.
  4. 백엔드 서비스 이름에 대해 사용하려는 서비스 프로젝트 B에서 백엔드 서비스의 이름을 입력합니다. 이 예시에서는 cross-ref-backend-service입니다.
  5. 백엔드 서비스 추가를 클릭합니다.

라우팅 규칙 구성

  • 라우팅 규칙을 클릭합니다. cross-ref-backend-service가 일치하지 않는 모든 호스트 및 일치하지 않는 모든 경로에 대한 유일한 백엔드 서비스입니다.

트래픽 관리에 대한 자세한 내용은 트래픽 관리 설정을 참조하세요.

프런트엔드 구성

교차 프로젝트 서비스 참조가 작동하려면 프런트엔드에서 백엔드 서비스를 만드는 데 사용된 공유 VPC 호스트 프로젝트의 네트워크(lb-network)를 사용해야 합니다.

HTTP의 경우:

  1. 프런트엔드 구성을 클릭합니다.
  2. 전달 규칙의 이름cross-ref-http-forwarding-rule로 입력합니다.
  3. 프로토콜HTTP로 설정합니다.
  4. 서브네트워크lb-frontend-and-backend-subnet로 설정합니다. 목록에 있는 옵션이라도 프런트엔드에 프록시 전용 서브넷을 선택하지 마세요.
  5. 포트80으로 설정합니다.
  6. IP 주소 메뉴를 클릭한 후 IP 주소 만들기를 클릭합니다.
  7. 고정 내부 IP 주소 예약 패널에서 다음 세부정보를 제공합니다.
    1. 이름cross-ref-ip-address를 입력합니다.
    2. 고정 IP 주소에 대해 직접 선택을 클릭합니다. 커스텀 IP 주소10.1.2.98를 입력합니다.
    3. (선택사항) 이 IP 주소를 다른 프런트엔드와 공유하려면 목적공유로 설정합니다.
  8. 완료를 클릭합니다.

HTTPS의 경우:

클라이언트와 부하 분산기 사이에 HTTPS를 사용하는 경우 프록시를 구성할 하나 이상의 SSL 인증서 리소스가 필요합니다. SSL 인증서 리소스를 만드는 방법에 대한 자세한 내용은 SSL 인증서를 참조하세요. 내부 애플리케이션 부하 분산기에서는 현재 Google 관리 인증서가 지원되지 않습니다.

  1. 프런트엔드 구성을 클릭합니다.
  2. 전달 규칙의 이름cross-ref-https-forwarding-rule로 입력합니다.
  3. 프로토콜 필드에서 HTTPS (includes HTTP/2)를 선택합니다.
  4. 서브네트워크lb-frontend-and-backend-subnet로 설정합니다. 목록에 있는 옵션이라도 프런트엔드에 프록시 전용 서브넷을 선택하지 마세요.
  5. HTTPS 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
  6. IP 주소 메뉴를 클릭한 후 IP 주소 만들기를 클릭합니다.
  7. 고정 내부 IP 주소 예약 패널에서 다음 세부정보를 제공합니다.
    1. 이름cross-ref-ip-address를 입력합니다.
    2. 고정 IP 주소에 대해 직접 선택을 클릭합니다. 커스텀 IP 주소10.1.2.98를 입력합니다.
    3. (선택사항) 이 IP 주소를 다른 프런트엔드와 공유하려면 목적공유로 설정합니다.
  8. 인증서 목록을 클릭합니다.
    1. 이미 기본 SSL 인증서로 사용할 자체 관리형 SSL 인증서 리소스가 있다면 메뉴에서 선택합니다.
    2. 그 이외의 경우 새 인증서 만들기를 선택합니다.
      1. SSL 인증서의 이름을 입력합니다.
      2. 해당 필드에 다음 PEM 형식의 파일을 업로드합니다.
        • 공개 키 인증서
        • 인증서 체인
        • 비공개 키
      3. 만들기를 클릭합니다.
  9. 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 다음 안내를 따르세요.
    1. 인증서 추가를 클릭합니다.
    2. 인증서 목록에서 인증서를 선택하거나 새 인증서 만들기를 클릭하고 이전 안내를 따릅니다.
  10. 완료를 클릭합니다.

구성 검토 및 완료

  • 만들기를 클릭합니다.

부하 분산기 테스트

부하 분산기를 만든 후 부하 분산기 테스트에 설명된 단계를 수행하여 부하 분산기를 테스트합니다.

gcloud

  1. 선택사항: 교차 참조 백엔드 서비스로 부하 분산기를 만들기 전 URL 맵을 사용해서 참조하려는 백엔드 서비스를 참조할 수 있는지 확인합니다.

    gcloud compute backend-services list-usable \
        --region=us-west1 \
        --project=SERVICE_PROJECT_B_ID
    
  2. URL 맵을 만들고 기본 서비스를 서비스 프로젝트 B에서 만든 백엔드 서비스로 설정합니다.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=projects/SERVICE_PROJECT_B_ID/regions/us-west1/backendServices/BACKEND_SERVICE_NAME \
        --region=us-west1 \
        --project=SERVICE_PROJECT_A_ID
    

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵 이름입니다.
    • BACKEND_SERVICE_NAME: 서비스 프로젝트 B에서 만든 백엔드 서비스의 이름입니다.
    • SERVICE_PROJECT_B_ID: 부하 분산기 백엔드와 백엔드 서비스가 생성되는 서비스 프로젝트 B의 프로젝트 ID입니다.
    • SERVICE_PROJECT_A_ID: 부하 분산기의 프런트엔드가 생성되는 서비스 프로젝트 A의 프로젝트 ID입니다.

    서비스 프로젝트 B에 백엔드 서비스에 대한 compute.backendServices.use 권한이 없으면 URL 맵 만들기가 실패합니다.

  3. 대상 프록시를 만듭니다.

    HTTP의 경우:

    gcloud compute target-http-proxies create HTTP_TARGET_PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    다음을 바꿉니다.

    • HTTP_TARGET_PROXY_NAME: 대상 HTTP 프록시의 이름입니다.

    HTTPS의 경우:

    gcloud compute ssl-certificates create 명령어를 사용하여 리전별 SSL 인증서를 만듭니다.

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate=PATH_TO_CERTIFICATE \
      --private-key=PATH_TO_PRIVATE_KEY \
      --region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    다음을 바꿉니다.

    • SSL_CERTIFICATE_NAME: SSL 인증서 리소스 이름입니다.
    • PATH_TO_CERTIFICATE: PEM 형식의 로컬 SSL 인증서 파일의 경로입니다.
    • PATH_TO_PRIVATE_KEY: PEM 형식의 로컬 SSL 인증서 비공개 키의 경로입니다.

    리전별 SSL 인증서를 사용하여 gcloud compute target-https-proxies create 명령어로 대상 프록시를 만듭니다.

    gcloud compute target-https-proxies create HTTPS_TARGET_PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --region=us-west1 \
      --ssl-certificates=SSL_CERTIFICATE_NAME \
      --project=SERVICE_PROJECT_A_ID
    

    다음을 바꿉니다.

    • HTTPS_TARGET_PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
  4. 전달 규칙을 만듭니다. 교차 프로젝트 서비스 참조가 작동하려면 전달 규칙에서 백엔드 서비스를 만드는 데 사용된 공유 VPC 호스트 프로젝트의 네트워크(lb-network)를 사용해야 합니다.

    HTTP의 경우:

    gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_CROSS_REF \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=HTTP_TARGET_PROXY_NAME \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    다음을 바꿉니다.

    • HTTP_FORWARDING_RULE_NAME: HTTP 트래픽을 처리하는 데 사용되는 전달 규칙의 이름입니다.

    HTTPS의 경우:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_CROSS_REF \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=HTTPS_TARGET_PROXY_NAME \
      --target-https-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    다음을 바꿉니다.

    • HTTPS_FORWARDING_RULE_NAME: HTTPS 트래픽을 처리하는 데 사용되는 전달 규칙의 이름입니다.
  5. 부하 분산기를 테스트하려면 부하 분산기 테스트에 설명된 단계를 이용하세요.

Terraform

  1. URL 맵을 만듭니다.

    # URL map
    resource "google_compute_region_url_map" "default" {
      name            = "l7-ilb-map"
      provider        = google-beta
      project         = "my-service-project-a-id"
      region          = "us-west1"
      default_service = google_compute_region_backend_service.default.id
    }
  2. 대상 프록시를 만듭니다.

    HTTP의 경우

    # HTTP target proxy
    resource "google_compute_region_target_http_proxy" "default" {
      name     = "l7-ilb-proxy"
      provider = google-beta
      project  = "my-service-project-a-id"
      region   = "us-west1"
      url_map  = google_compute_region_url_map.default.id
    }

    HTTPS의 경우

    리전 SSL 인증서 만들기

    # Use self-signed SSL certificate
    resource "google_compute_region_ssl_certificate" "default" {
      name        = "l7-ilb-cert"
      provider    = google-beta
      project     = "my-service-project-a-id"
      region      = "us-west1"
      private_key = file("sample-private.key") # path to PEM-formatted file
      certificate = file("sample-server.cert") # path to PEM-formatted file
    }

    리전 SSL 인증서를 사용하여 대상 프록시 만들기

    # HTTPS target proxy
    resource "google_compute_region_target_https_proxy" "default" {
      name             = "l7-ilb-proxy"
      provider         = google-beta
      project          = "my-service-project-a-id"
      region           = "us-west1"
      url_map          = google_compute_region_url_map.default.id
      ssl_certificates = [google_compute_region_ssl_certificate.default.id]
    }
  3. 전달 규칙을 만듭니다.

    HTTP의 경우

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-a-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "80"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_http_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

    HTTPS의 경우

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-a-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "443"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_https_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }
  4. 부하 분산기를 테스트하려면 부하 분산기 테스트에 설명된 단계를 이용하세요.

부하 분산기 관리자에게 백엔드 서비스를 사용할 수 있는 권한 부여

부하 분산기가 다른 서비스 프로젝트의 백엔드 서비스를 참조하게 하려면 부하 분산기 관리자에게 compute.backendServices.use 권한이 있어야 합니다. 이 권한을 부여하려면 Compute 부하 분산기 서비스 사용자(roles/compute.loadBalancerServiceUser)라는 사전 정의된 IAM 역할을 사용하면 됩니다. 이 역할은 서비스 프로젝트 관리자가 부여해야 하며 프로젝트 수준 또는 개별 백엔드 서비스 수준에서 적용할 수 있습니다.

백엔드 서비스를 만드는 동안 백엔드 서비스 수준에서 이미 필요한 권한을 부여한 경우에는 이 단계가 필수가 아닙니다. 이 섹션을 건너뛰거나 읽기를 계속하여 이 프로젝트의 모든 백엔드 서비스에 대해 액세스 권한을 부여하는 방법을 알아볼 수 있습니다. 이렇게 하면 새 백엔드 서비스를 만들 때마다 액세스 권한을 부여할 필요가 없습니다.

이 예시에서는 서비스 프로젝트 B의 서비스 프로젝트 관리자가 다음 명령어 중 하나를 실행하여 서비스 프로젝트 A의 부하 분산기 관리자에게 compute.backendServices.use 권한을 부여해야 합니다. 프로젝트 수준(프로젝트의 모든 백엔드 서비스) 또는 백엔드 서비스별로 이 작업을 수행할 수 있습니다.

콘솔

프로젝트 수준 권한

다음 단계에 따라 프로젝트의 모든 백엔드 서비스에 대해 권한을 부여합니다.

이 단계를 완료하려면 compute.regionBackendServices.setIamPolicyresourcemanager.projects.setIamPolicy 권한이 필요합니다.

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

    공유 부하 분산 서비스로 이동

  2. 모든 백엔드 서비스 권한(프로젝트 수준 권한) 섹션에서 프로젝트를 선택합니다.

  3. 권한 패널이 표시되지 않으면 권한 패널 표시를 클릭합니다. 프로젝트 수준 권한 패널이 오른쪽에 열립니다.

  4. 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원에 대해 주 구성원의 이메일 주소 또는 기타 식별자를 입력합니다.

  6. 역할에 대해 드롭다운 목록에서 Compute 부하 분산기 서비스 사용자 역할을 선택합니다.

  7. 선택사항: 역할에 조건을 추가합니다.

  8. 저장을 클릭합니다.

개별 백엔드 서비스에 대한 리소스 수준 권한

다음 단계에 따라 프로젝트의 개별 백엔드 서비스에 대해 권한을 부여합니다.

이 단계를 완료하려면 compute.regionBackendServices.setIamPolicy 권한이 필요합니다.

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

    공유 부하 분산 서비스로 이동

  2. 개별 백엔드 서비스 권한(리소스 수준 권한) 섹션에서 액세스 권한을 부여하려는 백엔드 서비스를 선택합니다.

  3. 주 구성원 추가를 클릭합니다.

  4. 새 주 구성원에 대해 주 구성원의 이메일 주소 또는 기타 식별자를 입력합니다.

  5. 역할에 대해 드롭다운 목록에서 Compute 부하 분산기 서비스 사용자 역할을 선택합니다.

  6. 저장을 클릭합니다.

gcloud

프로젝트 수준 권한

다음 단계에 따라 프로젝트의 모든 백엔드 서비스에 대해 권한을 부여합니다.

이 단계를 완료하려면 compute.regionBackendServices.setIamPolicyresourcemanager.projects.setIamPolicy 권한이 필요합니다.

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser"

개별 백엔드 서비스에 대한 리소스 수준 권한

백엔드 서비스 수준에서 서비스 프로젝트 관리자는 다음 명령어 중 하나를 사용하여 Compute 부하 분산기 서비스 사용자 역할(roles/compute.loadBalancerServiceUser)을 부여할 수 있습니다.

이 단계를 완료하려면 compute.regionBackendServices.setIamPolicy 권한이 필요합니다.

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'

또는

gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --project=SERVICE_PROJECT_B_ID \
    --region=us-west1

이러한 명령어를 사용하려면 LOAD_BALANCER_ADMIN을 사용자의 주 구성원(예: test-user@gmail.com)으로 바꿉니다.

조건을 사용하고 조건 속성을 지정하면 리전 백엔드 서비스의 하위 집합에만 IAM이 적용되도록 구성할 수도 있습니다.

특정 공유 VPC 백엔드 서비스를 참조하는 URL 맵을 보려면 다음 단계를 수행합니다.

gcloud

리전별 공유 VPC 백엔드 서비스를 참조하는 리소스를 보려면 다음 명령어를 실행합니다.

gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --region REGION

다음을 바꿉니다.

  • BACKEND_SERVICE_NAME: 부하 분산기 백엔드 서비스의 이름입니다.
  • REGION: 부하 분산기의 리전입니다.

명령어 결과에서 다음 예시에 표시된 것처럼 백엔드 서비스를 참조하는 리소스를 표시하는 usedBy 필드를 검토합니다.

id: '123456789'
kind: compute#backendService
loadBalancingScheme: INTERNAL_MANAGED
...
usedBy:
-   reference: https://www.googleapis.com/compute/v1/projects/my-project/region/us-central1/urlMaps/my-url-map

다음 단계