기존 애플리케이션 부하 분산기에서 전역 외부 애플리케이션 부하 분산기로 리소스 이전

이 문서에서는 기존 애플리케이션 부하 분산기 인프라 리소스를 전역 외부 애플리케이션 부하 분산기 인프라로 이전하는 방법을 설명합니다.

시작하기 전에

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

기본 프로젝트 설정

콘솔

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

gcloud

gcloud config set project PROJECT_ID

PROJECT_ID를 이 가이드에 사용 중인 프로젝트로 바꿉니다.

권한

이 문서를 따르려면 Google Cloud 프로젝트에서 Compute Engine 가상 머신 (VM) 인스턴스, 방화벽 규칙, 예약된 IP 주소, Cloud Storage 버킷을 만들 권한이 있어야 합니다. 프로젝트 소유자 또는 편집자이거나 다음 Compute Engine IAM 역할이 있어야 합니다.

작업 필요한 역할
인스턴스 만들기 Compute 인스턴스 관리자 (베타) 역할 (roles/compute.instanceAdmin)
방화벽 규칙 추가 및 삭제 Compute 보안 관리자 역할(roles/compute.securityAdmin)
부하 분산기 구성요소 만들기 Compute 네트워크 관리자 역할 (roles/compute.networkAdmin)
프로젝트 만들기(선택사항) 프로젝트 생성자 역할 (roles/resourcemanager.projectCreator)
Cloud Storage 버킷 만들기 스토리지 객체 관리자 역할 (roles/storage.objectAdmin)

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

기존 애플리케이션 부하 분산기 리소스 만들기

이 문서에서는 다음과 같은 기존 애플리케이션 부하 분산기 리소스를 만든 후 전역 외부 애플리케이션 부하 분산기 인프라로 이전합니다.

  • VM이 있는 관리형 인스턴스 그룹
  • Cloud Storage 버킷
  • 관리형 인스턴스 그룹과 Cloud Storage 버킷을 백엔드로 사용하는 HTTP 기본 애플리케이션 부하 분산기

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

이 섹션에서는 Apache가 실행 중인 Linux VM으로 관리형 인스턴스 그룹을 만드는 방법을 설명합니다. 관리형 인스턴스 그룹은 지정된 인스턴스 템플릿을 기반으로 각 관리형 인스턴스를 만듭니다.

인스턴스 템플릿 만들기

콘솔

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

    인스턴스 템플릿으로 이동

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

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

  4. 리전에서 REGION을 선택합니다.

  5. 부팅 디스크 섹션에서 부팅 디스크의 이미지Debian GNU/Linux 12 (bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get와 같이 Debian에서만 사용할 수 있는 명령어를 사용합니다.

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

  7. 네트워킹을 클릭하고 네트워크 태그 필드에 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

gcloud compute instance-templates create 명령어를 실행하여 템플릿을 만듭니다.

gcloud compute instance-templates create lb-backend-template \
    --region=REGION \
    --network=default \
    --subnet=default \
    --tags=allow-health-check \
    --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'

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

콘솔

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

    인스턴스 그룹으로 이동

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

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

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

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

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

  7. 리전에서 REGION을 선택합니다.

  8. 영역에서 ZONE를 선택합니다.

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

    최소 인스턴스 수최대 인스턴스 수2로 설정합니다.

  10. 포트 매핑 섹션에서 포트 추가를 클릭합니다.

  11. 포트 이름으로 http를 입력합니다. 포트 번호로 80을 입력합니다.

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

gcloud

gcloud compute instance-groups managed create 명령어를 실행하여 템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.

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

다음 명령어를 실행하여 인스턴스 그룹에 이름이 지정된 포트를 추가합니다.

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

방화벽 규칙 구성

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

콘솔

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

    방화벽 정책으로 이동

  2. 방화벽 규칙 만들기를 클릭합니다.

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

  4. 네트워크에서 default를 선택합니다.

  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 명령어를 실행하여 방화벽 규칙을 만듭니다.

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

Cloud Storage 버킷 만들기

이 섹션에서는 부하 분산기가 액세스할 수 있는 Cloud Storage 버킷을 만듭니다. 프로덕션 배포의 경우 여러 Google Cloud 리전에 객체를 자동으로 복제하는 멀티 리전 버킷을 선택하는 것이 좋습니다. 이렇게 하면 콘텐츠의 가용성이 향상되고 애플리케이션 전체의 내결함성이 개선됩니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

    Cloud Storage 버킷으로 이동

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

  3. 버킷 이름 지정 상자에 storage-backend-bucket을 입력하고 계속을 클릭합니다.

  4. 데이터 저장 위치 선택을 클릭합니다.

  5. 위치 유형리전으로 설정하고 REGION을 지정합니다.

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

  7. 선택사항: '공개 액세스가 차단됨' 대화상자가 표시되면 이 버킷에 공개 액세스 방지 적용 체크박스를 선택 해제하고 확인을 클릭합니다.

gcloud

gcloud storage buckets create 명령어를 실행하여 버킷을 만듭니다.

gcloud storage buckets create gs://storage-backend-bucket \
    --default-storage-class=standard \
    --location=REGION --uniform-bucket-level-access

Cloud Storage 버킷으로 콘텐츠 전송

로드 밸런서를 만든 후 버킷을 테스트하려면 다음 이미지 파일을 공개 Cloud Storage 버킷에서 자체 Cloud Storage 버킷으로 복사합니다.

gcloud

  1. Cloud Shell 활성화를 클릭합니다.

  2. Cloud Shell에서 다음 명령어를 실행합니다.

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://storage-backend-bucket/never-fetch/

Google Cloud 콘솔의 버킷 세부정보 페이지에서 새로고침을 클릭하여 파일이 성공적으로 복사되었는지 확인합니다.

Cloud Storage 버킷을 공개적으로 읽을 수 있도록 설정

Cloud Storage 버킷을 공개적으로 읽을 수 있게 하면 인터넷의 모든 사용자가 객체를 나열하고 보고 메타데이터 (ACL 제외)를 볼 수 있습니다. 공개 버킷에 민감한 정보를 포함하지 마세요.

민감한 정보가 실수로 노출되는 가능성을 줄이려면 공개 객체와 민감한 정보를 동일한 버킷에 저장하지 마세요.

콘솔

모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

    Cloud Storage 버킷으로 이동

  2. storage-backend-bucket 이름을 클릭한 다음 권한 탭을 클릭합니다.

  3. 액세스 권한 부여를 클릭합니다.

  4. 새 주 구성원 상자에 allUsers를 입력합니다.

  5. 역할 선택 상자에서 Cloud Storage > 스토리지 객체 뷰어를 선택합니다.

  6. 저장을 클릭합니다.

  7. 공개 액세스 허용을 클릭합니다.

gcloud

gcloud storage buckets add-iam-policy-binding 명령어를 실행하여 모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여합니다.

gcloud storage buckets add-iam-policy-binding gs://storage-backend-bucket \
    --member=allUsers \
    --role=roles/storage.objectViewer

외부 IP 주소 예약

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

콘솔

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

    외부 IP 주소로 이동

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

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

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

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

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

  7. 예약을 클릭합니다.

gcloud

외부 IP 주소를 예약하려면 다음 명령어를 실행합니다.

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
  

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

이 섹션에서는 클라이언트와 부하 분산기 간에 HTTP (프런트엔드)를 사용합니다.

콘솔

구성 시작

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

    부하 분산으로 이동

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

기본 구성

  1. 부하 분산기 이름 필드에 web-map-http을 입력합니다.
  2. 프런트엔드 구성을 클릭하고 다음 필드를 구성한 다음 완료를 클릭합니다.
    • 프로토콜: HTTP
    • IP 버전: IPv4
    • IP 주소: lb-ipv4-1
    • 포트: 443
  3. 백엔드 구성을 클릭합니다.
  4. 백엔드 서비스 및 백엔드 버킷에서 백엔드 서비스 만들기를 클릭한 다음 다음을 실행합니다.
    1. 다음 입력란을 구성합니다.
      • 이름: web-backend-service
      • 프로토콜: HTTP
      • 이름이 지정된 포트: http
    2. 백엔드 > 새 백엔드 섹션에서 다음 필드를 구성한 후 완료를 클릭합니다.
      • 인스턴스 그룹: lb-backend-example
      • 포트 번호: 80
    3. 상태 점검에서 상태 점검 만들기를 클릭하고 다음 입력란을 지정한 후 저장을 클릭합니다.
      • 이름: http-basic-check
      • 프로토콜: HTTP
    4. 로깅 섹션에서 로깅 사용 설정 체크박스를 선택합니다.
    5. 만들기를 클릭합니다.
  5. 확인을 클릭합니다.
  6. 백엔드 서비스 및 백엔드 버킷에서 백엔드 버킷 만들기를 클릭하고 다음 필드를 구성한 후 만들기를 클릭합니다.
    • 백엔드 버킷 이름: cats
    • Cloud Storage 버킷: storage-backend-bucket
  7. 확인을 클릭합니다.
  8. 호스트 및 경로 규칙을 클릭합니다.
  9. cats의 경우 호스트 2 필드에 *를, 경로 2 필드에 /never-fetch/*를 입력합니다.
  10. 검토 및 완료를 클릭합니다.
  11. 부하 분산기 구성 설정을 검토합니다.
  12. 만들기를 클릭합니다.

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 \
        --enable-logging \
        --logging-sample-rate=1.0 \
        --enable-cdn \
        --global
    
  3. 백엔드 서비스에 인스턴스 그룹을 백엔드로 추가합니다.

    gcloud compute backend-services add-backend web-backend-service \
        --instance-group=lb-backend-example \
        --instance-group-zone=ZONE \
        --global
    
  4. 백엔드 버킷을 추가합니다.

    gcloud compute backend-buckets create cats \
        --gcs-bucket-name=storage-backend-bucket
    
  5. 수신되는 요청을 백엔드 서비스 및 백엔드 버킷으로 라우팅하는 URL 맵을 만듭니다.

    gcloud compute url-maps create web-map-http \
        --default-service web-backend-service
    
    gcloud compute url-maps add-path-matcher web-map-http \
        --path-matcher-name=cats-path-matcher \
        --default-backend-bucket=cats \
        --new-hosts="*" \
        --backend-bucket-path-rules="/never-fetch/*=cats"
    
  6. 대상 HTTP 프록시를 만들어 요청을 URL 맵으로 라우팅합니다.

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map=web-map-http
    
  7. 들어오는 요청을 프록시로 라우팅하는 글로벌 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create web-map-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL \
        --address=lb-ipv4-1 \
        --global \
        --target-http-proxy=http-lb-proxy \
        --ports=80
    

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

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

콘솔

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

    부하 분산으로 이동

  2. web-map-http을 클릭합니다.

  3. 프런트엔드 섹션에서 부하 분산기의 IP:포트를 확인합니다.

  4. 백엔드 인스턴스를 테스트하려면 웹브라우저의 주소 표시줄에 http://IP_ADDRESS를 입력합니다.

    브라우저는 페이지를 제공한 인스턴스의 이름과 영역을 표시하는 콘텐츠로 페이지를 렌더링합니다 (예: Page served from: lb-backend-example-xxxx).

  5. 백엔드 버킷을 테스트하려면 웹브라우저의 주소 표시줄에 http://IP_ADDRESS/never-fetch/three-cats.jpg를 입력합니다.

    브라우저에서 이미지를 렌더링합니다.

기존 애플리케이션 부하 분산기 리소스 이전

이 섹션에서는 백엔드 서비스, 백엔드 버킷, 전달 규칙을 전역 외부 애플리케이션 부하 분산기 인프라로 이전합니다.

백엔드 서비스 이전

  1. 마이그레이션을 위해 백엔드 서비스를 준비합니다.

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=PREPARE \
        --global
    

    잠시 기다립니다 (약 6분).

  2. 백엔드 서비스로 일부 트래픽(예: 10%)을 전송합니다.

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-migration-testing-percentage=10 \
        --global
    

    잠시 기다립니다 (약 6분).

    리소스가 준비되면 요청의 10% 는 전역 외부 애플리케이션 부하 분산기 인프라로, 90% 는 기존 애플리케이션 부하 분산기 인프라로 전송됩니다.

  3. 백엔드 서비스에 액세스합니다.

    웹브라우저의 주소 표시줄에 http://IP_ADDRESS를 입력합니다. Page served from: lb-backend-example-xxxx 메시지가 표시되면 다음 명령어를 실행하여 비율을 늘립니다.

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-migration-testing-percentage=50 \
        --global
    

    100%가 될 때까지 이 과정을 반복합니다.

  4. 선택사항: 백엔드 서비스의 로그를 확인합니다.

  5. 테스트를 완료하고 모든 트래픽을 백엔드 서비스로 전송합니다.

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_ALL_TRAFFIC \
        --global
    
  6. 선택사항: 백엔드 서비스의 로그를 확인합니다.

  7. 백엔드 서비스의 스키마를 EXTERNAL_MANAGED로 변경합니다.

    gcloud beta compute backend-services update web-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --global
    

    백엔드 서비스가 전역 외부 애플리케이션 부하 분산기 인프라로 완전히 이전될 때까지 약 6분 정도 기다립니다.

  8. 선택사항: 백엔드 서비스의 로그를 확인합니다. 부하 분산 스키마가 EXTERNAL_MANAGED로 표시됩니다.

백엔드 버킷 이전

  1. 마이그레이션을 위해 백엔드 버킷을 준비합니다.

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=PREPARE \
        --global
    

    잠시 기다립니다 (약 6분).

  2. 백엔드 버킷으로 트래픽의 일부(예: 10%)를 전송합니다.

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-backend-bucket-migration-testing-percentage=10 \
        --global
    

    잠시 기다립니다 (약 6분).

    리소스가 준비되면 요청의 10% 는 전역 외부 애플리케이션 부하 분산기 인프라로, 90% 는 기존 애플리케이션 부하 분산기 인프라로 전송됩니다.

  3. 백엔드 버킷에 액세스합니다.

    웹브라우저의 주소 표시줄에 http://IP_ADDRESS/never-fetch/three-cats.jpg를 입력합니다. 고양이 이미지가 표시되면 다음 명령어를 실행하여 비율을 높입니다. 100%가 될 때까지 이 과정을 반복합니다.

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-backend-bucket-migration-testing-percentage=50 \
        --global
    
  4. 선택사항: 백엔드 버킷의 로그를 확인합니다.

  5. 테스트를 완료하고 모든 트래픽을 백엔드 버킷으로 전송합니다.

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_ALL_TRAFFIC \
        --global
    
  6. 선택사항: 백엔드 버킷의 로그를 확인합니다.

전달 규칙 이전

  1. 전달 규칙의 스키마를 EXTERNAL_MANAGED로 변경합니다.

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --global
    

    전달 규칙이 전역 외부 애플리케이션 부하 분산기 인프라로 완전히 이전될 때까지 약 6분 정도 기다립니다.

  2. 선택사항: 전달 규칙의 로그를 확인합니다. 부하 분산 스키마가 EXTERNAL_MANAGED인 것을 확인할 수 있습니다.

다음 단계