GW LABS

Google Cloud StudyJam (2) - GCP 둘러보기 (2/2) 본문

Infrastructure/Cloud Computing

Google Cloud StudyJam (2) - GCP 둘러보기 (2/2)

GeonWoo Kim 2020. 12. 3. 14:03

Google Cloud StudyJams

저번 포스팅에서는 클라우드 구성요소와 GCP의 기본적인 구조와 특징, 대표적인 서비스들이 무엇이 있는지 알아봤다. 이번시간에서는 직접 가상머신을 생성하고, 여러 대의 가상머신에 로드밸런서를 연결하여 트래픽을 분산하는 방법까지 살펴보려고 한다. 

 


예제 서비스 구조

예제의 전체적인 구조

이번 포스팅에서 구현해보려고 하는 서비스의 구조는 위의 그림과 같다. 사용자는 로드밸런서에 할당된 고정 IP(static ip)로 서비스에 접근한다. 그러면 로드밸런서는 트래픽을 분산하여 www1 가상머신이나 www2 가상머신에 요청을 보내게 된다. 각각의 www1, www2는 받은 요청대로 html 응답을 사용자에게 보낸다. 예제에서는 www1, www2로 트래픽 분산이 실제로 일어나는지 확인하기 위해서 가상머신의 이름을 출력하는 html을 보내도록 가상머신을 생성할 것이다.

 

 

GCP VM 인스턴스 생성하기

GCP VM 인스턴스 생성화면

Compute 메뉴란에서 VM 인스턴스 생성란을 클릭하면 다음과 같은 화면을 볼 수 있다. 예제의 구조에 따라 VM 인스턴스를 2개 생성할 것이다. 위 화면에서는 www1의 생성과정을 보여주고 있다. 머신타입, disk 타입 등은 기본값으로 설정해도 되고 다른 타입으로 설정해도 무방하다.

 

Startup script 입력화면

VM 인스턴스 생성란에서 하단의 details을 클릭하면 위의 화면과 같이 추가적인 정보를 입력할 수 있는 폼이 나타난다. 여기에서 Startup script를 작성할 것이다. 아래의 배시 스크립트를 입력하면 된다. 아래의 배시 스크립트는 생성한 인스턴스에 아파치 웹서버를 설치하고 index.html을 생성한다. www2 인스턴스를 생성할 때에는 아래의 html에서 www2로 이름을 변경해야 로드밸런서의 트래픽 분산기능을 볼 수 있다.  

 

#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html

 

www1, www2 인스턴스가 생성된 화면

생성이 완료되면 VM 인스턴스 메뉴에서 위와 같은 화면을 볼 수 있다. External IP로 브라우저를 통해 접속해보면 아래와 같은 화면을 볼 수 있을 것이다. www2로 접근했다면 www2라는 글씨가 보여야한다. 만약 보이지 않는다면 인스턴스를 삭제하고 인스턴스 생성할 때 Startup script를 다시 확인바란다.

 

www1으로 접속한 모습

방화벽 규칙설정

로드밸런서를 사용하려면 방화벽 규칙을 만들어야한다. Ingress는 해당 방화벽 규칙이 걸려있는 서비스에 접근할 때의 규칙이다(인바운드). Egress는 해당 방화벽 규칙이 걸려있는 서비스에서 다른 곳으로 접근할 때의 규칙이다(아웃바운드). 방화벽 이름과 어떤 아이피를 허용하고, 어떤 포트를 허용할 것인지 작성해야한다. 

 

로드밸런서에 적용할 방화벽 규칙 생성화면

 

구체적인 IP 대역과 TCP 포트 규칙 설정

예제에서는 아파치 웹서버의 기본설정을 사용하므로 http 접근인 TCP 80포트를 허용하면된다. 또한 외부의 사용자들이 접근이 가능해야하므로 source IP ranges를 모든 아이피 대역인 0.0.0.0/0으로 설정해야한다.

 

 

로드 밸런서 생성

이제 로드 밸런서를 생성할 시간이다. 네트워크 서비스에서 로드 밸런싱란을 선택하면 로드 밸런서를 생성할 수 있다. create 버튼을 클릭하면 아래와 같은 화면을 볼 수 있을 것이다.

 

로드밸런서 생성화면

 

L4 타입의 로드밸런서 설정화면

GCP에서는 로드밸런서 타입을 설정하여 생성할 수 있다. 하나는 TCP 로드밸런서(L4 로드밸런서)이며, 다른 하나는 Http 로드밸런서(L7 로드밸런서)이다. 두 가지 로드밸런서는 장단점이 뚜렷하며 상황에 따라 선택할 수 있다. 예제에서는 TCP 로드밸런서를 선택하여 생성한다. 그리고 Backed configuration에서 미리 생성한 로드밸런서들을 선택해준다. 그럼 위와 같은 설정화면을 볼 수 있을 것이다.

 

로드밸런서의 고정 IP 할당받기

사용자들이 로드밸런서를 통해 서비스를 접근하려면 고정 IP를 할당받아야 한다. 위의 그림에서 같이 Frontend configuration에서 고정 IP를 할당받아 설정해준다.

 

로드밸런서 생성된 모습

설정을 끝내고 로드밸런서를 생성하면 위와 같은 그림을 확인할 수 있다. Frontend에서는 할당받은 고정 IP를 볼 수 있으며 Backend에서는 로드밸런서에 연동되어있는 우리의 인스턴스들을 확인할 수 있다. 로드밸런서의 고정 IP로 접속해보면 www1 혹은 www2 화면이 보여야한다!

 

 

로드밸런서 작동확인하기

실제로 트래픽이 발생할 때 로드밸런서가 트래픽을 분산시켜주는지 확인하려면 curl 혹은 아파치 벤치마크 같은 툴을 활용하면 확인할 수 있다. 아래의 그림처럼 while true; do curl -m1 [로드밸런서 고정 IP]; done 명령어를 GCP 클라우드 쉘에서 실행시켜보면 www1, www2 html이 번갈아가며 출력되는 모습을 볼 수 있다.

 

실제로 부하를 발생시켜 로드밸런서가 작동하는지 확인가능하다.

 

이렇게 가상머신을 생성하고 로드 밸런서를 통해 트래픽을 분산시키는 과정을 예제를 통해서 진행해봤다. 만약 클라우드를 사용하지 않고 온프레미스로 장비를 구성한다면 어떨까? 우선 서버 2대를 구매해야하고 서버보다 고가장비인 L4 로드밸런서도 구매해야한다. 구매한 장비들을 사내 전산실 혹은 IDC센터에 위치시키고 네트워크도 구성해줘야 한다.

그러나 GCP를 활용하면 예제와 같이 몇 분만에 인스턴스를 생성하여 사용할 수 있고, 로드 밸런서를 서비스에 연동하는 것도 클릭 몇 번으로 가능하다. 놀라운 일이다! 앞으로도 여러가지 편리한 GCP의 기능들을 공부해나가자!

Comments