1. 소개
하이브리드 전략은 변화하는 시장 수요에 적응하고 애플리케이션을 점진적으로 현대화할 수 있는 실용적인 솔루션입니다. Google Cloud 외부 및 내부 HTTP(S) 부하 분산기에 대한 하이브리드 지원은 클라우드 부하 분산을 온프렘 및 다른 클라우드에 있는 백엔드로 확장하며 이는 하이브리드 전략의 핵심 요소입니다. 이는 최신 클라우드 기반 솔루션으로 마이그레이션하기 위한 일시적인 조치이거나 조직의 IT 인프라의 영구적인 고정 장치일 수 있습니다.
이 실습에서는 외부 HTTP (S) 전역 부하 분산기에서 액세스할 수 있는 2개의 가상 머신을 사용하여 네트워크 엔드포인트 그룹(NEG)을 만드는 방법을 알아봅니다. 실습의 NEG는 GCP 내에 있지만 IP 연결 가능성을 갖춘 공개 또는 온프레미스 리소스와 통신하는 데 동일한 절차가 사용됩니다.
학습할 내용
- 커스텀 VPC 만들기
- 네트워크 엔드포인트 그룹 (NEG)으로 사용되는 2개의 가상 머신 (VM) 만들기
- 하이브리드 부하 분산기, 백엔드 서비스, 관련 상태 점검 만들기
- 부하 분산기에 대한 액세스를 허용하는 방화벽 규칙 만들기
- 인터넷에서 패키지 업데이트를 허용하도록 Cloud Router 및 NAT가 생성됩니다.
- 네트워크 엔드포인트 그룹 연결 가능성 검증
필요한 항목
- 부하 분산기에 관한 지식
자습형 환경 설정
- Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트의 개인 식별자입니다. 이름 지정 규칙을 따르기만 하면 원하는 것을 사용할 수 있고 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며 변경할 수 없습니다 (한 번 설정되면 변경할 수 없음). Cloud 콘솔이 고유한 문자열을 자동으로 생성합니다. 보통은 그게 뭔지 상관하지 않습니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_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를 만듭니다. 또한 LB에서 라우팅 및 부하 분산을 위해 이러한 엔드포인트가 us-west1-a GCP 영역에 있음을 고려하도록 지정합니다. 부하 분산에 사용되는 근접성 기반 부하 분산 측정을 위해 구성된 영역은 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
Codelab에서 네트워크 엔드포인트 그룹은 GCP에서 Apache를 실행하는 GCE 인스턴스입니다. 또는 온프레미스 또는 인터넷 엔드포인트를 네트워크 엔드포인트로 지정할 수 있습니다.
Cloud Shell에서 GCE IP 주소 식별
gcloud compute instances list | grep -i on-prem
네트워크 엔드포인트 그룹을 이전 단계에서 이전에 확인한 GCE 인스턴스 IP 주소에 연결합니다. 각 부정 on-prem-neg-1 & on-prem-neg-2.
Cloud Shell 연결 on-prem-neg-1에서 x.x.x.x를 식별된 IP로 업데이트합니다.
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에서 x.x.x.x를 식별된 IP로 업데이트합니다.
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 부하 분산기 만들기 및 해당 백엔드 서비스와
Cloud 콘솔에서 부하 분산으로 이동하고 부하 분산기 만들기를 선택합니다.
HTTP(S) 부하 분산을 식별하고 '구성 시작'을 클릭합니다.
'인터넷 트래픽을 VM으로 분산'을 선택합니다. 아래 스크린샷에 따라 VM에 대한 공개 액세스를 허용하는
'xlb' 입력 를 부하 분산기 이름으로 설정하고 이전에 만든 백엔드 서비스 'on-prem-backend-service'를 선택합니다. 그런 다음 'Ok' 제공된 스크린샷에 따라
프런트엔드 구성을 선택하고 이름을 'xlb-fe'로 업데이트하세요. 이전에 만든 고정 IPv4 주소를 선택하고 에 제공된 스크린샷을 미러링해야 합니다.
'검토 및 완료'를 선택합니다. 제공된 스크린샷과 일치하고 만들기를 선택합니다.
백엔드 상태 검증
Cloud 콘솔에서 백엔드 '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와 부정 인스턴스 이름 및 리전으로 구성된 페이지 세부정보를 확인합니다.
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)으로 사용되는 2개의 가상 머신 (VM) 만들기
- 하이브리드 부하 분산기, 백엔드 서비스, 관련 상태 점검 만들기
- 부하 분산기에 대한 액세스를 허용하는 방화벽 규칙 만들기
- 네트워크 엔드포인트 그룹 연결 가능성 검증
10. 삭제 단계
Cloud 콘솔 UI에서 'xlb'를 식별하고 선택합니다. 네트워크 서비스 → 부하 분산을 통해 삭제를 선택합니다. 선택한 후 '온프레미스 백엔드 서비스'를 선택합니다. & ‘on-premise-health-check' 삭제를 선택합니다.
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