1. 소개
하이브리드 전략은 변화하는 시장 요구에 적응하고 애플리케이션을 점진적으로 현대화할 수 있는 실용적인 솔루션입니다. Google Cloud 외부 및 내부 HTTP(s) 부하 분산기의 하이브리드 지원을 통해 온프레미스 및 기타 클라우드에 있는 백엔드로 클라우드 부하 분산을 확장할 수 있으며 이는 하이브리드 전략을 지원하는 핵심 요소입니다. 최신 클라우드 기반 솔루션으로의 마이그레이션을 위한 임시 하이브리드 배포 또는 조직의 IT 인프라의 영구적 설비일 수 있습니다.

이 실습에서는 외부 HTTP (s) 전역 부하 분산기에서 액세스할 수 있는 두 개의 가상 머신을 사용하여 네트워크 엔드포인트 그룹(NEG)을 만드는 방법을 알아봅니다. 실험실의 NEG는 GCP 내에 있지만 IP 연결이 가능한 공개 또는 온프레미스 리소스와 통신하는 데 동일한 절차가 사용됩니다.
학습할 내용
- 커스텀 VPC 만들기
- 네트워크 엔드포인트 그룹 (NEG)으로 사용되는 가상 머신 (VM) 2개 만들기
- 하이브리드 부하 분산기, 백엔드 서비스, 연결된 상태 점검 만들기
- 부하 분산기에 대한 액세스를 허용하는 방화벽 규칙 만들기
- 인터넷에서 패키지를 업데이트할 수 있도록 Cloud Router 및 NAT가 생성됩니다.
- 네트워크 엔드포인트 그룹 연결 가능 여부 확인
필요한 항목
- 부하 분산기에 대한 지식
자습형 환경 설정
- Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



- 프로젝트 이름은 이 프로젝트의 개인 식별자입니다. 이름 지정 규칙을 준수하는 한 원하는 이름을 사용할 수 있으며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다 (설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID로 식별됨)를 참조해야 하므로 마음에 들지 않으면 다른 임의 ID를 생성하거나 직접 ID를 입력하여 사용 가능한지 확인할 수 있습니다. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다.
- 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.
이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.
2. 시작하기 전에
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
3. 새 커스텀 모드 VPC 네트워크 만들기
이 작업에서는 네트워크의 기반인 가상 프라이빗 클라우드 (VPC)를 만듭니다.
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create hybrid-network-lb --subnet-mode custom
서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1
Cloud NAT 인스턴스 만들기
하이브리드 네트워킹에 필요한 것은 아니지만 컴퓨팅 인스턴스에서 애플리케이션과 업데이트를 다운로드하려면 인터넷 연결이 필요합니다.
이 작업에서는 VM 인스턴스에 인터넷 연결을 허용하는 Cloud Router 및 NAT 인스턴스를 만듭니다.
Cloud Router 만들기
Cloud Shell 사용
gcloud compute routers create crnat --network hybrid-network-lb --region us-west1
Cloud NAT 만들기
Cloud Shell 사용
gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1
4. VM 인스턴스 2개 만들기
이 작업에서는 Apache를 실행하는 VM 인스턴스 두 개를 만듭니다. 실습 후반부에서 이러한 VM 인스턴스는 네트워크 엔드포인트 그룹 (NEG)이 됩니다.
Cloud Shell에서 첫 번째 온프레미스 인스턴스 on-prem-neg-1를 만듭니다.
gcloud compute instances create on-prem-neg-1 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
Cloud Shell에서 첫 번째 온프레미스 인스턴스 on-prem-neg-2를 만듭니다.
gcloud compute instances create on-prem-neg-2 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
5. 온프레미스 엔드포인트를 포함하는 NEG 만들기
먼저 on-prem-neg-1 및 on-prem-neg-2라는 NEG를 만듭니다. 또한 라우팅 및 부하 분산 목적으로 이러한 엔드포인트가 us-west1-a GCP 영역에 있다고 LB가 고려하도록 지정합니다. 구성된 영역은 부하 분산에 사용되는 근접성 기반 부하 분산 측정의 Interconnect 연결/VPN 게이트웨이 리전과 연결된 영역에 해당해야 합니다.
Cloud Shell에서 on-prem-neg-1 만들기
gcloud compute network-endpoint-groups create on-prem-neg-1 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
Cloud Shell에서 on-prem-neg-2 만들기
gcloud compute network-endpoint-groups create on-prem-neg-2 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
코드랩에서 네트워크 엔드포인트 그룹은 GCP에서 Apache를 실행하는 GCE 인스턴스입니다. 또는 온프레미스 또는 인터넷 엔드포인트를 네트워크 엔드포인트로 지정할 수 있습니다.
Cloud Shell에서 GCE IP 주소를 식별합니다.
gcloud compute instances list | grep -i on-prem
이전 단계에서 이전에 식별한 GCE 인스턴스 IP 주소에 네트워크 엔드포인트 그룹을 연결합니다. 각 NEG에 대해 on-prem-neg-1 & on-prem-neg-2.
Cloud Shell에서 on-prem-neg-1을 연결하고 식별된 IP로 x.x.x.x를 업데이트합니다.
gcloud compute network-endpoint-groups update on-prem-neg-1 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
Cloud Shell에서 on-prem-neg-2를 연결하고 식별된 IP로 x.x.x.x를 업데이트합니다.
gcloud compute network-endpoint-groups update on-prem-neg-2 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
6. HTTP 상태 점검, 백엔드 서비스, 방화벽 만들기
이 단계에서는 on-prem-backend-service라는 전역 백엔드 서비스를 만듭니다. 이 백엔드 서비스는 데이터 영역이 NEG에 트래픽을 전송하는 방법을 정의합니다.
먼저 on-prem-health-check라는 상태 점검을 만들어 이 NEG에 속한 엔드포인트 (즉, 온프레미스 엔드포인트)의 상태를 모니터링합니다.
Cloud Shell 사용
gcloud compute health-checks create http on-prem-health-check
on-prem-backend-service라는 백엔드 서비스를 만들고 상태 확인과 연결합니다.
Cloud Shell 사용
gcloud compute backend-services create on-prem-backend-service \
--global \
--load-balancing-scheme=EXTERNAL \
--health-checks on-prem-health-check
HTTP(S) 외부 부하 분산기와 백엔드는 35.191.0.0/16 및 130.211.0.0/22 서브넷에서 시작되는 상태 점검을 실행하므로 부하 분산기에서 백엔드로 라우팅을 허용하는 방화벽 규칙이 필요합니다.
Cloud Shell 사용
gcloud compute firewall-rules create fw-allow-health-check \
--network=hybrid-network-lb \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80
7. NEG와 백엔드 서비스 연결
이 백엔드 서비스에 on-prem-neg-1 NEG를 추가합니다.
Cloud Shell 사용
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-1 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
이 백엔드 서비스에 on-prem-neg-2 NEG를 추가합니다.
Cloud Shell 사용
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-2 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
네트워크 엔드포인트에 액세스하는 데 사용되는 IPv4 고정 IP 주소 예약
Cloud Shell 사용
gcloud compute addresses create hybrid-lb-ip --project=$projectid --global
CLI 구성이 완료되었습니다. Cloud 콘솔에서 구성을 완료하겠습니다.
8. 외부 HTTP 부하 분산기 만들기 및 백엔드 서비스 연결
클라우드 콘솔에서 부하 분산으로 이동하여 부하 분산기 만들기를 선택했습니다.
HTTP(S) 부하 분산을 식별하고 '구성 시작'을 클릭합니다.

아래 스크린샷에 따라 VM에 대한 공개 액세스를 허용하는 '인터넷에서 내 VM으로'을 선택합니다.

부하 분산기 이름으로 'xlb'를 입력하고 이전에 만든 백엔드 서비스 'on-prem-backend-service'를 선택한 후 제공된 스크린샷에 따라 '확인'을 선택합니다.

프런트엔드 구성을 선택하고 이름 'xlb-fe'를 업데이트하고 이전에 만든 고정 IPv4 주소를 선택합니다. 제공된 스크린샷
을 미러링해야 합니다.
제공된 스크린샷과 일치하도록 '검토 및 완료'를 선택하고 '만들기'를 선택합니다.

백엔드 상태 유효성 검사
클라우드 콘솔에서 제공된 스크린샷에 따라 백엔드 'xlb'가 정상(녹색)인지 확인합니다.

9. 인터넷에서 NEG에 연결할 수 있는지 확인
부하 분산기를 만들 때 사용한 외부 고정 IP 주소가 이제 네트워크 엔드포인트의 프런트엔드 IP가 됩니다. 최종 테스트를 실행하기 전에 IP 주소의 유효성을 검사해 보겠습니다.
Cloud Shell 사용
gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
출력 (IP 주소는 다름)
Cloud Shell의 출력
$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress: IPAddress: 34.96.103.132
전역 부하 분산기 프런트엔드 IP 주소를 사용하여 네트워크 엔드포인트 백엔드에 액세스할 수 있습니다. Codelab에서는 엔드포인트가 GCE 인스턴스이지만 온프레미스 엔드포인트와 함께 사용할 수 있습니다.
로컬 워크스테이션에서 터미널을 실행하고 부하 분산기 IP 주소에 대해 curl을 실행합니다.
워크스테이션에서 프런트엔드 IP 주소에 대해 curl을 실행합니다. 200 OK와 neg 인스턴스 이름 및 리전으로 구성된 페이지 세부정보를 확인합니다.
myworkstation$ curl -v 34.96.103.132
* Trying 34.96.103.132...
* TCP_NODELAY set
* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)
> GET / HTTP/1.1
> Host: 34.96.103.132
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 10 Aug 2021 01:21:54 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT
< ETag: "24-5c929ae7384f4"
< Accept-Ranges: bytes
< Content-Length: 36
< Content-Type: text/html
< Via: 1.1 google
<
Page on on-prem-neg-2 in us-west1-a
* Connection #0 to host 34.96.103.132 left intact
* Closing connection 0
축하합니다. NEG를 사용하여 L7 하이브리드 부하 분산기를 성공적으로 배포했습니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- 커스텀 VPC 만들기
- 네트워크 엔드포인트 그룹 (NEG)으로 사용되는 가상 머신 (VM) 2개 만들기
- 하이브리드 부하 분산기, 백엔드 서비스, 연결된 상태 점검 만들기
- 부하 분산기에 대한 액세스를 허용하는 방화벽 규칙 만들기
- 네트워크 엔드포인트 그룹 연결 가능 여부 확인
10. 정리 단계
Cloud 콘솔 UI에서 'xlb' 부하 분산기를 식별하고 선택한 후 네트워크 서비스 → 부하 분산을 통해 삭제를 선택합니다. 선택한 후 '온프레미스 백엔드 서비스' 및 '온프레미스 상태 점검'을 선택한 다음 삭제를 선택합니다.

Cloud 콘솔 UI에서 Compute Engine → 네트워크 엔드포인트 그룹으로 이동합니다. 선택한 후 'on-prem-neg-1' 및 'on-prem-neg-2'를 선택한 다음 삭제를 선택합니다.

Cloud Shell에서 실습 구성요소 삭제
gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet gcloud compute routers delete crnat --region us-west1 --quiet gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet gcloud compute firewall-rules delete fw-allow-health-check --quiet gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet gcloud compute networks delete hybrid-network-lb --quiet gcloud compute addresses delete hybrid-lb-ip --global --quiet