안녕하세요, 오늘은 GCP Essentials 다섯 번째 세션인
Network LoadBalancer와 Http(s) LoadBalancer에 대해서 다뤄보겠습니다.
(다음 랩인 Challenge Lab은 별도로 몰아서 진행하겠습니다!)
로드밸런서에 대해서는 지난 포스팅에서 다루었으니, 자세한 내용은 참조하셔도 좋을 것 같습니다.
먼저 이번 랩은 L3 네트워크 로드밸런서와
L7 HTTP 로드밸런서입니다.
셋업과 필요한 확인 사항들을 확인해 주시고,
다음으로는 기본 컴퓨트 존과 기본 리전을 세팅합니다.
이번에는 세계에서 정말 많이 사용되는 웹서버 Nginx를 사용하여,
정적 컨텐츠(이미지나 html과 같은 파일들..)를 제공하는 서버를 구축할 것입니다.
인스턴스 템플릿을 사용해 가상머신의 속성을 빵틀처럼 찍어낼 수 있고,
관리형 인스턴스 그룹을 통해서 여러 가상 머신의 인스턴스를 추상화가 가능합니다.
관리형 인스턴스 그룹을 사용하면, 하나의 앱을 여러 동일한 VM을 통해서도 운영이 가능합니다.
먼저 위의 순서대로 (내용이 어려우실 수 있으니 보기 편하시게끔 색으로 구분해 보겠습니다..)
1) 시작 스크립트
2) 인스턴스 템플릿
3) 타겟 풀(대상 풀)
4) 관리형 인스턴스 그룹
을 만들어 보도록 하겠습니다.
1) 시작 스크립트 만들기
cat << EOF > startup.sh #! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html EOF
다음의 명령어를 통해서 클라우드 쉘에서 시작 스크립트를 만듭니다.
시작 시에 Nginx 서버를 셋업 하는 역할을 합니다.
2) 인스턴스 템플릿 만들기
gcloud compute instance-templates create nginx-template \ --metadata-from-file startup-script=startup.sh
시작 스크립트를 사용해서 인스턴스 템플릿을 만들어 봅시다.
다음으로 타겟 풀(구글 클라우드 기술 백서에는 대상 풀이라고 되어 있습니다.)
https://cloud.google.com/load-balancing/docs/target-pools?hl=ko
타겟 풀(대상 풀)은 이후 만들 전달 규칙에서 들어오는 트래픽을 수신하는 인스턴스 그룹을 정의합니다.
수신할 귀(?)의 역할을 할 인스턴스 그룹이 되겠네요.
다음의 명령어를 사용해서 만들어 봅시다.
3) 타겟 풀 만들기
gcloud compute target-pools create nginx-pool
4) 관리형 인스턴스 그룹 만들기
gcloud compute instance-groups managed create nginx-group \ --base-instance-name nginx \ --size 2 \ --template nginx-template \ --target-pool nginx-pool
타겟 사이즈는 2개로 해서 nginx-group이라는 그룹을 만들어 줄 것입니다.
템플릿은 2번에서 만든 nginx-template을 사용할 것이고, 타겟 풀(대상 풀) 역시 nginx-pool으로 기존에 만들어 놓은 것을 사용할 예정입니다.
관리형 인스턴스 그룹에 대한 추가적인 설명은 아래 링크를 참고하세요!
https://cloud.google.com/compute/docs/instance-groups
자, 앞서 만든 2개의 인스턴스들이 잘 생성되었는지는
gcloud compute instances list
를 통해서 확인합니다.
이제, 인스턴스를 만들면 외부 연결이 가능하게끔 만들어 주어야 하는데,
방화벽 규칙을 만들어서 이를 가능하게끔 외부 노출 포인트를 만들어 보겠습니다.
다음으로
방화벽 만들기
gcloud compute firewall-rules create www-firewall --allow tcp:80
마찬가지로 compute engine 리소스이기 때문에 gcloud compute를 사용하게 되고,
www-firewall이라는 이름의 방화벽을 80 포트를 열어서 만들도록 합니다.
다음으로, Network 로드밸런서를 만들 것입니다.
주소, 포트, 프로토콜 타입 등의 ip 프로토콜 데이터를 기반으로 라우팅 해주는 로드밸런서로,
네트워크 로드밸런서는 HTTP(s) 로드밸런서에서 가능하지 않은 옵션들도 가능하게 해주는 로드밸런서입니다.
예로는 SMTP 트래픽에 대한 로드밸런싱, 문자열 분석 같은 기능도 있다고 합니다.
먼저 전달 규칙을 만들어 줍니다.
(아까 귀, 아니 타겟 풀에 전달할 내용을 잘 듣고 처리할 내용을 만들어 준다고 언급한 바 있습니다.)
gcloud compute forwarding-rules create nginx-lb \ --region us-central1 \ --ports=80 \ --target-pool nginx-pool
(전달 규칙 및 해당 IP 주소는 Google Cloud 부하 분산기의 프런트엔드 구성을 나타냅니다.)
https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts
전달 규칙이 잘 생성되었는지는 아래의 명령어를 통해서 확인해 봅시다.
gcloud compute forwarding-rules list
HTTP(s) 로드 밸런서 만들기
HTTP(s) 로드 밸런서는 글로벌 로드 밸런싱을 제공합니다.
(글로벌 서버 로드 밸런싱에 대한 내용도 추가적으로 기술해서 포스팅에 연결해 놓겠습니다.
글로벌 서버 로드 밸런싱 같은 경우 가볍게 얘기하자면 정적 컨텐츠를 사용자에게 최적의 시간으로 제공하기 위한 서비스인 CDN을 가능하게 하기 위한 서버 매핑의 최적의 기술이 되겠습니다.)
자 먼저, HTTP(s)를 위한 헬스체크를 만듭니다.
(헬스체크 역시 GSLB의 강력한 기능입니다. 원래 DNS 기반의 라우팅은 헬스 체크(라우팅 할 인스턴스가 죽었는지 살았는지에 대한 체크) 기능이 없습니다.)
gcloud compute http-health-checks create http-basic-check
다음으로, http 서비스를 정의하고, 인스턴스 그룹에 관련된 포트를 매핑시킵니다.
로드밸런싱 서비스가 트래픽을 명명된 포트로 보내줍니다.
gcloud compute instance-groups managed \
set-named-ports nginx-group \
--named-ports http:80
HTTP 로드밸런서에 붙일 백엔드 서비스를 만듭니다.
gcloud compute backend-services create nginx-backend \
--protocol HTTP --http-health-checks http-basic-check--global
다음으로 백엔드 서비스에 인스턴스 그룹을 추가합니다.
gcloud compute backend-services add-backend nginx-backend \
--instance-group nginx-group \
--instance-group-zone us-central1-a \
--global
다음으로, 인스턴스에 들어오는 모든 요청을 가지고 있는 모든 인스턴스로 보내주는 URL 맵을 만듭니다.
gcloud compute url-maps create web-map \
--default-service nginx-backend
URL 맵으로 요청이 라우팅 되는 타겟 HTTP 프록시를 만듭니다.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map
https://cloud.google.com/load-balancing/docs/target-proxies
다음으로, 글로벌 전달 룰을 만들어 봅니다.
특정 IP 주소, IP 프로토콜, 포트에 기반하여 특정 타겟 HTTP나 HTTPS 프록시로 트래픽을 보냅니다.
gcloud compute forwarding-rules create http-content-rule \
--global \
--target-http-proxy http-lb-proxy \
--ports 80
gcloud compute forwarding-rules list
잘 만들어졌는지 위의 명령어를 실행해서, 브라우저에서 http://IP_주소로 접근하여 접속해 봅시다.
내용이 많이 길었는데 고생하셨습니다,
네트워크 로드밸런서와 HTTP(s) 로드밸런서를 만들어 보았습니다.
그리고 인스턴스 템플릿과 관리형 인스턴스 그룹도 공부해 보았습니다.
이해하시는데 도움되셨으면 좋겠습니다.
'Qwiklabs > 초급 - GCP Essentials' 카테고리의 다른 글
[퀵랩] 초급 - GCP Essentials 04/05 (0) | 2020.05.14 |
---|---|
[퀵랩] 초급 - GCP Essentials 03/05 (0) | 2020.05.12 |
[퀵랩] 초급 - GCP Essentials 02/05 (0) | 2020.05.10 |
[퀵랩] 초급 - GCP Essentials 01/05 (2) | 2020.05.07 |