GSP007
개요
이 실무형 실습에서는 Compute Engine 가상 머신(VM)에서 실행되는 패스 스루 네트워크 부하 분산기(NLB)를 설정하는 방법을 알아봅니다. 4계층(L4) NLB는 IP 주소 및 포트 번호와 같은 네트워크 수준 정보를 기반으로 트래픽을 처리하며, 트래픽 콘텐츠를 검사하지는 않습니다.
여러 가지 방법을 통해 Google Cloud의 부하를 분산할 수 있습니다.
이 실습에서는 다음 부하 분산기의 설정 방법을 알아봅니다.
핵심 개념을 익히는 데 도움이 되므로 명령어를 직접 입력해 보시기 바랍니다. 대부분의 실습에는 필요한 모든 명령어가 포함된 코드 블록이 포함되어 있습니다. 실습을 진행하는 동안 언제든지 코드 블록의 명령어를 복사해 적절한 위치에 붙여넣을 수 있습니다.
목표
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
- 리소스의 기본 리전 및 영역을 구성합니다.
- 다중 웹 서버 인스턴스를 만듭니다.
- 부하 분산 서비스를 구성합니다.
- 트래픽을 분산하는 전달 규칙을 구성합니다.
설정 및 요건
실습 시작 버튼을 클릭하기 전에
다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.
실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.
이 실습을 완료하려면 다음을 준비해야 합니다.
- 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
- 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.
실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법
-
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다.
오른쪽에는 다음과 같은 항목이 포함된 실습 설정 및 액세스 패널이 있습니다.
-
Google Cloud 콘솔 열기 버튼
- 이 실습에 사용해야 하는 임시 사용자 인증 정보(사용자 이름 및 비밀번호)
- 필요한 경우 실습 진행을 위한 기타 정보
실습 타이머는 페이지 상단에 있으며 남은 시간을 표시합니다.
-
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
-
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 설정 및 액세스 패널에서도 사용자 이름을 확인할 수 있습니다.
-
다음을 클릭합니다.
-
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 설정 및 액세스 패널에서도 비밀번호를 확인할 수 있습니다.
-
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
-
이후에 표시되는 페이지를 클릭하여 넘깁니다.
- 이용약관에 동의하세요.
- 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 마세요.
- 무료 체험판을 신청하지 마세요.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
Cloud Shell 활성화
Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.
-
Google Cloud 콘솔 상단에서 Cloud Shell 활성화
를 클릭합니다.
-
다음 창을 클릭합니다.
- Cloud Shell 정보 창을 통해 계속 진행합니다.
- 사용자 인증 정보를 사용하여 Google Cloud API를 호출할 수 있도록 Cloud Shell을 승인합니다.
연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 학습자의 PROJECT_ID, (으)로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.
- (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
-
승인을 클릭합니다.
출력:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project
출력:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
참고: gcloud 전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참고하세요.
작업 1. 모든 리소스에 대한 기본 리전 및 영역 설정하기
-
기본 리전을 설정합니다.
gcloud config set compute/region {{{project_0.default_region | Region}}}
-
gcloud config set compute/region {{{project_0.default_region | Region}}}
gcloud config set compute/zone {{{project_0.default_zone | Zone}}}
Cloud Shell에서 기본 영역을 설정합니다.
영역 및 리전 선택에 대해 자세히 알아보려면 Compute Engine의 리전 및 영역 문서를 참조하세요.https://cloud.google.com/compute/docs/zones
작업 2. 다중 웹 서버 인스턴스 만들기
이 부하 분산 시나리오에서는 Compute Engine VM 인스턴스 3개를 만들고 거기에 Apache를 설치합니다. 그런 다음 HTTP 트래픽이 인스턴스에 도달할 수 있도록 방화벽 규칙을 추가합니다.
제공된 코드를 사용하는 경우 해당 영역이 (으)로 설정됩니다.
tags 필드를 설정하면 방화벽 규칙을 사용할 때처럼 이러한 인스턴스를 한 번에 참조할 수 있습니다.
또한 이 명령어는 각 인스턴스에 Apache를 설치하고 고유한 홈페이지를 제공합니다.
gcloud compute instances create www1 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
" | tee /var/www/html/index.html'
다음 코드를 사용해 기본 영역에 가상 머신 www1을 만듭니다.
gcloud compute instances create www1 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
gcloud compute instances create www2 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
Web Server: www1
" | tee /var/www/html/index.html'
" | tee /var/www/html/index.html'
gcloud compute instances create www3 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
다음 코드를 사용해 기본 영역에 가상 머신 www2를 만듭니다.
" | tee /var/www/html/index.html'
gcloud compute instances create www2 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "Web Server: www2
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
" | tee /var/www/html/index.html'
기본 영역에 가상 머신
www3을 만듭니다.
gcloud compute instances create www3 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "Web Server: www3
gcloud compute instances list
" | tee /var/www/html/index.html'
curl http://[IP_ADDRESS]
VM 인스턴스에 외부 트래픽을 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
이제 인스턴스의 외부 IP 주소를 가져와 주소가 정상적으로 작동되는지 확인해야 합니다.
다음 명령어를 실행하여 인스턴스를 나열합니다. EXTERNAL_IP 열에 인스턴스의 IP 주소가 표시됩니다.
gcloud compute instances list
gcloud compute addresses create network-lb-ip-1 \
--region {{{project_0.default_region | Region}}}
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-03-xxxxxxxxxxx/regions/{{{project_0.startup_script.project_region}}}/addresses/network-lb-ip-1].
curl을 사용하여 각 인스턴스가 실행 중인지 확인합니다. 여기서 [IP_ADDRESS]를 각 VM의 외부 IP 주소로 바꿉니다.
curl http://[IP_ADDRESS]
gcloud compute http-health-checks create basic-check
내 진행 상황 확인하기를 클릭하여 웹 서버 그룹을 생성했는지 확인합니다.
다중 웹 서버 인스턴스 만들기
작업 3. 부하 분산 서비스 구성하기
부하 분산 서비스를 구성하면 가상 머신 인스턴스는 사용자가 구성한 고정 외부 IP 주소로 전송되는 패킷을 수신합니다.
Compute Engine 이미지로 만든 인스턴스는 이 IP 주소를 처리하도록 자동으로 구성됩니다.
참고:
네트워크 부하 분산 설정 방법을 자세히 알아보려면 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기 개요 가이드를 참고하세요.
- https://cloud.google.com/compute/docs/load-balancing/network/
gcloud compute target-pools create www-pool \
--region {{{project_0.default_region | Region}}} --http-health-check basic-check
- 부하 분산기의 고정 외부 IP 주소를 만듭니다.
gcloud compute addresses create network-lb-ip-1 \
--region {{{project_0.default_region | Region}}}
gcloud compute target-pools add-instances www-pool \
--instances www1,www2,www3
출력:
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-03-xxxxxxxxxxx/regions/{{{project_0.startup_script.project_region}}}/addresses/network-lb-ip-1].
기존 HTTP 상태 점검 리소스를 추가합니다.-
gcloud compute http-health-checks create basic-check
내 진행 상황 확인하기를 클릭하여 웹 서버를 가리키는 L4 네트워크 부하 분산기를 만들었음을 확인합니다.
부하 분산 서비스 구성하기
gcloud compute forwarding-rules create www-rule \
--region {{{project_0.default_region | Region}}} \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool
작업 4. 대상 풀 및 전달 규칙 만들기대상 풀은 외부 패스 스루 NLB에서 들어오는 트래픽을 수신하는 백엔드 인스턴스 그룹입니다. 대상 풀의 모든 백엔드 인스턴스는 동일한 Google Cloud 리전에 있어야 합니다.
- 다음 명령어를 실행하여 대상 풀을 만든 다음 상태 점검을 사용합니다. 서비스가 작동하려면 상태 점검이 필요합니다.
gcloud compute target-pools create www-pool \
--region {{{project_0.default_region | Region}}} --http-health-check basic-check
gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}}
-
앞에서 만든 인스턴스를 풀에 추가합니다.
IPADDRESS=$(gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}} --format="json" | jq -r .IPAddress)
-
gcloud compute target-pools add-instances www-pool \
--instances www1,www2,www3
echo $IPADDRESS
다음으로 전달 규칙을 만듭니다. 전달 규칙은 네트워크 트래픽을 부하 분산기의 백엔드 서비스로 라우팅하는 방법을 지정합니다.https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts
while true; do curl -m1 $IPADDRESS; done
전달 규칙을 추가합니다.
gcloud compute forwarding-rules create www-rule \
--region {{{project_0.default_region | Region}}} \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool
내 진행 상황 확인하기를 클릭하여 대상 풀과 전달 규칙을 만들었음을 확인합니다.
대상 풀 및 전달 규칙 만들기
작업 5. 인스턴스에 트래픽 보내기
부하 분산 서비스를 구성했으므로 이제 전달 규칙에 트래픽을 보내고 트래픽이 여러 인스턴스에 분산되는 것을 확인할 수 있습니다.
-
gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}}
외부 IP 주소에 액세스합니다.
IPADDRESS=$(gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}} --format="json" | jq -r .IPAddress)