[LB] Set Up Application Load Balancers

yejin·2026년 4월 28일

Google Skills

목록 보기
29/46

Course

Implementing Cloud Load Balancing for Compute Engine

Lab

목록

  • Set Up Network Load Balancers
  • Set Up Application Load Balancers ⬅️ 오늘의 Lab!
  • Use an Internal Application Load Balancer
  • Implement Load Balancing on Compute Engine: Challenge Lab

🌠 Set Up Application Load Balancers

개요

Compute Engine 가상 머신에 L7 애플리케이션 부하 분산기를 설정하는 방법을 알아보자. L7 부하 분산기는 HTTP(S) 프로토콜을 이해하므로 이러한 프로토콜에서 URL, 헤더, 쿠키, 요청 콘텐츠 같은 파라미터를 기반으로 라우팅을 결정할 수 있다. 그 결과 애플리케이션 성능과 응답성이 개선된다!

실습과정

1. 기본 리전 및 영역 설정

# 기본 리전 설정(Region 수정 필요)
gcloud config set compute/region Region

# 기본 영역 설정(Zone 수정 필요)
gcloud config set compute/zone Zone

2. 다중 웹 서버 인스턴스 만들기

(1) 서버 인스턴스 생성

# www1
  gcloud compute instances create www1 \
    --zone=Zone \
    --tags=network-lb-tag \
    --machine-type=e2-small \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --metadata=startup-script='#!/bin/bash
      apt-get update
      apt-get install apache2 -y
      service apache2 restart
      echo "
<h3>웹 서버: www1</h3>" | tee /var/www/html/index.html'

# www2
  gcloud compute instances create www2 \
    --zone=Zone \
    --tags=network-lb-tag \
    --machine-type=e2-small \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --metadata=startup-script='#!/bin/bash
      apt-get update
      apt-get install apache2 -y
      service apache2 restart
      echo "
<h3>웹 서버: www2</h3>" | tee /var/www/html/index.html'

# www3
  gcloud compute instances create www3 \
    --zone=Zone  \
    --tags=network-lb-tag \
    --machine-type=e2-small \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --metadata=startup-script='#!/bin/bash
      apt-get update
      apt-get install apache2 -y
      service apache2 restart
      echo "
<h3>웹 서버: www3</h3>" | tee /var/www/html/index.html'

(2) 방화벽 규칙 설정

gcloud compute firewall-rules create www-firewall-network-lb \
    --target-tags network-lb-tag --allow tcp:80

(3) 동작 확인


# External_ip 확인
gcloud compute instances list

# 인스턴스 실행중인지 확인
curl http://[EXTERNAL_IP_ADDRESS]

➡️ 메인 인덱스 내의 문구가 출력되면 성공!


3. 애플리케이션 부하 분산기 만들기

참고✨

이전 포스팅에서 진행한 L4(전송 계층) LB는 IP, Port 기준으로 부하 분산을 하는 것과 달리, 이번 실습의 L7(응용 계층) LB는 URL 경로, 쿠키, 언어 등 HTTP 내용 기준으로 부하 분산을 진행한다.

(1) 부하 분산기 템플릿 생성

gcloud compute instance-templates create lb-backend-template \
   --region=Region \
   --network=default \
   --subnet=default \
   --tags=allow-health-check \
   --machine-type=e2-medium \
   --image-family=debian-11 \
   --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'

명령어 체크✅

  • --tags: HTTP 로드 밸런서가 서버의 상태를 확인할 때 사용하는 특정 IP 대역을 허용하기 위한 식별표
  • --metadata=startup-script 분석
    • a2enmod ssl: SSL(HTTPS) 설정 준비
    • vm_hostname="$(curl ...)": 구글 내부 메타데이터 서버를 통해 실제 서버 이름을 가져오기
    • Page served from: $vm_hostname: 접속했을 때, 해당 페이지가 어느 서버에서 보낸건지 정확히 알려주도록 설정

(2) 템플릿을 기반으로 관리형 인스턴스 그룹 생성

gcloud compute instance-groups managed create lb-backend-group \
   --template=lb-backend-template --size=2 --zone=Zone

(3) 방화벽 규칙 생성

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

(4) 전역 고정 외부 IP 주소 설정

# IP 주소 생성
gcloud compute addresses create lb-ipv4-1 \
  --ip-version=IPV4 \
  --global
  
# IP 주소 확인
gcloud compute addresses describe lb-ipv4-1 \
  --format="get(address)" \
  --global

➡️ IP 주소는 35.201.85.243 이다.

(5) 부하 분산기용 상태 점검 생성

gcloud compute health-checks create http http-basic-check \
  --port 80

4. 백엔드 서비스 만들기

(1) 서비스 생성

gcloud compute backend-services create web-backend-service \
  --protocol=HTTP \
  --port-name=http \
  --health-checks=http-basic-check \
  --global

(2) 백엔드 서비스에 인스턴스 그룹을 백엔드로 추가

gcloud compute backend-services add-backend web-backend-service \
  --instance-group=lb-backend-group \
  --instance-group-zone=Zone \
  --global

(3) URL 맵을 통해 수신 요청을 기본 백엔드 서비스로 라우팅

gcloud compute url-maps create web-map-http \
    --default-service web-backend-service

참고✨

URL 맵은 백엔드 서비스 또는 백엔드 버킷으로 요청을 라우팅하는 데 사용되는 Google Cloud 구성 리소스이다.
예를 들어 외부 애플리케이션 부하 분산기를 사용하면 단일 URL 맵을 사용하여 URL 맵에 구성된 규칙에 따라 요청을 다른 대상으로 라우팅할 수 있다.

  • https://example.com/video 요청은 하나의 백엔드 서비스로 이동
  • https://example.com/audio 요청은 다른 백엔드 서비스로 이동
  • https://example.com/images 요청은 Cloud Storage 백엔드 버킷으로 이동
  • 다른 호스트 및 경로 조합에 대한 요청은 기본 백엔드 서비스로 이동

(4) 대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map web-map-http

(5) 수신 요청을 프록시로 라우팅하는 전역 전달 규칙 생성

gcloud compute forwarding-rules create http-content-rule \
   --address=lb-ipv4-1 \    # 예약한 고유 IP를 쓰고
   --global \               # 전 세계 어디서든 이 규칙이 동작하게 하며
   --target-http-proxy=http-lb-proxy \  # 검증된 패킷은 이 프록시로 넘기고
   --ports=80               # 오직 80번 포트만 허용한다.

💫 흐름을 이해해보자!

지금 과정은 전 세계 어디서든 접속 가능한 거대한 서비스망을 구축하고 있다. 목표는 요청한 백엔드 서비스에 연결하는 지능적 배분을 하는 것!

1. 설정 순서(Bottom-up)
1) Instance Template & Group (MIG): 실제 연산을 수행할 컴퓨터 자원 정의
2) Health Check: 서버의 상태를 판단할 기준 생성
3) Backend Service: 서버 그룹(MIG)과 상태 확인을 하나로 묶어 트래픽 분산의 목적지를 설정
4) URL Map: 요청된 URL(호스트, 경로)을 어떤 백엔드 서비스로 보낼지 라우팅 규칙을 정의
5) Target Proxy: HTTP 요청을 받아 URL 맵과 연결해주는 중계기를 설정
6) Forwarding Rule (with Global IP): 외부 IP와 포트를 Proxy에 연결하여 인터넷에 노출

2. 요청 순서(Top-Down)
1) Global Forwarding Rule: 사용자의 패킷이 Google의 글로벌 엣지 네트워크(Google Front End)에 도달하고, 전달 규칙은 해당 IP와 80번 포트로 들어온 요청을 가로채서 다음 단계로 넘긴다.
2) Target HTTP Proxy: 전달 규칙으로부터 패킷을 넘겨받은 프록시는 들어온 패킷이 유효한 HTTP 프로토콜인지 확인하고, 이를 URL Map이 이해할 수 있는 형태로 전달
3) URL Map: HTTP 헤더를 분석하여 경로를 결정(라우팅)한다.
4) Backend Service: URL Map이 지정한 백엔드로 트래픽을 보낸다. 이때, 백엔드 서비스는 Health Check부하 알고리즘을 체크한다.
5) Managed Instance Group: 선택된 특정 VM 인스턴스로 트래픽이 전달된다. VM 내부의 Apache2가 요청을 처리하고 HTTP 응답을 생성하여 다시 역순으로 사용자에게 보낸다.


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

(1) Console에서 부하 분산기 확인


➡️ 검색창에 Load Balancing 검색 > 생성한 부하 분산기(web-map-http) 클릭

(2) 백엔드 VM 상태 확인

(3) 부하 분산기 테스트


➡️ VM 상태가 정상일 때, 웹 브라우저에서 Frontend 주소를 사용하여 부하 분산기 테스트
➡️ 3-4에서 체크한 IP 주소와 동일하기 때문에, 명령어를 통해 IP 주소를 확인해도 된다.

(4) 테스트 결과 확인


➡️ http://IP_ADDRESS/로 접속하여, 브라우저는 페이지를 제공한 인스턴스의 이름과 영역을 표시하는 콘텐츠로 페이지를 렌더링하는지 확인!

profile
새싹 개발자

0개의 댓글