반응형

 

 

이번 포스팅에서는 기존에 http로만 접속 가능했던 배포 API를 SSL 인증서를 적용하여 https로 접속 가능하게 만들고,

로드밸런서를 적용을 통해 HTTPS 및 부하 분산을 적용시키는 것을 다룰 것이다.

 

 

 


로드밸런서

 

 

https://www.thierolf.org/blog/2019/simple-load-balancing-with-apache-proxy_balancer/

 

로드밸런서는 여러 대의 백엔드 서버 또는 인스턴스 그룹 사이에서 들어오는 트래픽을 분산하는 역할을 한다.

NginX 등이 리버스 프록시로서의 로드밸런서의 역할을 할 수 있으며, GCP 또한 클라우드 내에서 로드밸런서 장착을 지원한다.

 

 

리버스 프록시

 

리버스 프록시는 클라이언트와 백엔드 서버 사이에 위치하여, 백엔드 서버의 포트, 리소스 자원 등의 노출을 방지하고 보안을 강화할 있다. SSL 종단점 설정을 통해 암호화된 연결(HTTPS)을 처리가 가능하다.


TLS/SSL 종단점: HTTPS 로드밸런서를 사용할 경우, SSL 종단점 설정을 통해 로드밸런서는 HTTPS 요청을 받아서 백엔드 서버로 안전하게 전달한다.

또한 프론트엔드(웹의 프론트엔트가 아니다. 클라이언트 측이 로드밸런서로 요청하는 앞단)에서는 HTTPS로 요청을 받아서, 인스턴스 그룹(백엔드, 로드밸런서의 뒷단)에 요청을 로드밸런싱 할 때에는 HTTP로 통신을 하는 것 또한 가능하다. 따라서 인스턴스 그룹에 일일이 SSL 인증서를 설치할 필요가 없다.

 

 

부하 분산

 

로드 밸런서의 주요 역할이며 , 사용자의 트래픽을 "여러대의 서버 인스턴스 (= 인스턴스 그룹)" 로 분배해주는 역할을 한다. 보통 아래와 같은 알고리즘을 사용한다.

 

라운드 로빈 스케줄링: 기본 설정으로, 트래픽을 등록된 백엔드 인스턴스 그룹에 순차적으로 분배

최소 연결 (Least Connections) 스케줄링: 연결 수가 가장 적은 백엔드 인스턴스로 트래픽을 보냄

 

또한 라우팅 규칙을 설정하여 특정 URL에 따라 분배할 서버 인스턴스를 정하여 트래픽을 분산하는 것도 가능하다.

 

 

헬스체커

 

로드밸런서는 백엔드 서버에 대한 헬스 체크를 수행한다. 주기적으로 백엔드 서버에 요청을 보내서 서버 상태를 확인하고, 문제가 있는 경우 해당 서버에 트래픽을 전송하지 않는다. 문제가 있는 친구가 있으면 감지하여 다른 친구에게 보내서 처리한다는 뜻이다.

 

 

 

 

 

 


인스턴스 그룹 만들기

 

 

로드 밸런서가 관리할 여러 대의 서버 인스턴스들을 인스턴스 그룹이라고 하였다. 로드밸런서를 만들기 이전에 인스턴스 그룹을 만들어 주도록 할 것 이다.

 

Compute Engine -> 인스턴스 그룹 -> 인스턴스 그룹 만들기에 들어가준다.

 

 

 

 

 

왼쪽에 보이는 세 개의 선택지는 로드밸런서의 관리 프로세스를 설정해주는 것이다.

 

오토 스케일링(Auto-Scailing)

해당 단어는 트래픽이 몰렸을 때, 새로운 인스턴스를 자동으로 생성해주고, 트래픽이 없으면, 인스턴스를 제거하는 것을 의미한다.

쉽게 말하면 접속자가 많으면 컴퓨터 대수를 늘리고, 접속자가 없으면 컴퓨터 대수를 줄이는 것이다.

 

Unmanaged Instange Group은 인스턴스 그룹을 오토 스케일링 해주지 않는 것을 의미한다.

 

Managed Instance Group은 오토 스케일링을 적용하는 인스턴스 그룹을 의미한다.

Stateless는 모든 인스턴스가 동일한 상태를 가지게 인스턴스 그룹을 생성하며, Stateful은 인스턴스 별로 환경을 별도로 설정할 수 있게 할 수 있다.

 

필자는 일단 운영 용도가 아니므로 Unmanaged instance group으로 생성하려고 한다.

 

리전을 설정해주고, 네트워크는 default를 설정해준다. VM 인스턴스는 앞 포스팅에서 만들었던 백엔드 인스턴스를 선택한다.

 

 

 

 

 

 

 

 

 


로드밸런서 만들기

 

이제 앞에서 만든 인스턴스 그룹에 트래픽을 분배하고, 리버스 프록시의 역할을 해 줄 로드밸런서를 만들어 줄 것이다.

 

네트워크 서비스 -> 부하 분산 -> 부하 분산기 만들기에 들어온다.

우리는 HTTPS의 로드밸런서를 만드는 것이 목적이므로 첫번째 것을 선택해준다.

 

 

 

 

 

 

 

 

우리는 브라우저를 통한 요청과 응답이 오가는 클라이언트들의 트래픽을 분산할 것이므로 "인터넷에서 VM 또는 서버리스 서비스로"를 선택해주고, 전역 부하 분산기를 선택해준다.

 

"VM 또는 서버리스 서비스 사이에서"는 서버들 사이(데이터서버<->백엔드서버) 에서의 부하 분산이 필요한 경우에 사용한다.

 

 

 

 

 

 

 

프런트엔드 구성

 

부하 분산기의 첫 화면이다. 프론트엔드 구성 이름을 작성하고, 프로토콜은 HTTPS, IP버전은 IPV4, 포트번호는 HTTPS의 기본 포트인 443으로 설정해 주었다.

 

IP Address는 새로운 IP 주소 만들기를 통해서 생성해준다.

 

 

 

 

SSL 인증서 등록

 

 

HTTPS 적용을 위한 SSL 인증서를 하단에서 등록해 주어야 한다. "새 인증서 만들기"를 클릭하여, 직접 인증서를 업로드하거나, Google에서 자동으로 생성해서 관리해주는 SSL 인증서를 사용할 수도 있다.

 

우리는 Google 관리 인증서를 이용하여 사용해보도록 하자. 도메인에는 앞에서 적용했던 DNS를 입력해주면 된다.

 

 

 

 

 

 

 

백엔드 구성

 

백엔드 서비스 만들기를 클릭해주자

 

서비스 이름과, 하단 백엔드 탭에서, 인스턴스 그룹에 방금 만들었던 인스턴스 그룹을 선택해준다.

그 아래에는 분산 모드의 옵션을 지정할 수 있으며, 사용률, 범위, 용량 등 설정에 따라 부하 분산을 수행한다.

 

 

 

 

 

 

 

Cloud CDN 설정

 

https://commons.wikimedia.org/wiki/File:NCDN_-_CDN.png

 

CDN은 콘텐츠 전송 네트워크(Content Delivery Network)의 의미이다.

전세계에 분산된 서버 및 데이터 센터 네트워크를 이용하여 웹 콘텐츠와 애플리케이션을 더 빠르고 안정적으로 제공하는 서비스를 뜻하며, 전국 각지에 서버를 두어서, 캐싱 서버로 사용하여 운영하면서 사용자는 가장 가까운 서버에 요청을 할 수 있게 된다.

 

 

백엔드 서비스 생성에서 이어서 보면 아래쪽에 Cloud CDN 설정을 할 수 있는 곳이 있다. 해당 기능을 사용한다면, 더 좋은 성능을 기대할 수 있을 것이다.

 

 

CDN을 설정해주고, 아래쪽에 상태 확인 쪽을 클릭해서 이어서 진행해보도록 하자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

상태 확인(Healthchecker) 설정

 

 

앞에서 헬스체커에 대해서 주기적으로 백엔드 서버에 요청을 보내서 서버 상태를 확인하고, 문제가 있는 경우 해당 서버에 트래픽을 전송하지 않는다. 문제가 있는 친구가 있으면 감지하여 다른 친구에게 보내서 처리할 수 있다고 말했었다.

 

이런 기능을 하는 상태 확인을 백엔드 구성에서 추가해 줄 것이다.

 

상태 기준에서 몇 초 간격으로 확인할 것인지, 얼마나 응답이 안오면 정상/비정상으로 판단할 것인지 등을 설정해 줄 수 있다.

요청/응답에는 체킹할 때 어떤 요청을 보낼 것이고, 어떤 응답을 받아야 하는 지도 커스텀으로 정의할 수 있고, 기본적으로는 "/"에 보내어 200 응답을 받으면 정상이라고 판단하게 된다.

 

 

 

 

 

라우팅 규칙 설정

만약 인스턴스 그룹의 인증 서버를 담당하는 인스턴스로 인증 관련된 라우팅을 보내고 싶다면, /auth 등 경로를 추가해주고, 인스턴스 그룹에서 인증 담당 인스턴스를 선택해서 연결해 주면 된다.

 

일단 필자는 라우팅 규칙은 설정하지 않고 모든 인스턴스 그룹의 구성원들이 같은 역할로, 트래픽을 분배받도록 하려고 한다.

 

 

 

 

 

 


확인

 

 

 

지금까지 만든 것을 보면 이런 느낌이라고 보면 된다. DNS를 연결하여, DNS 서버는 로드밸런서의 IP를 찾아가고, HTTPS 연결을 통한 요청만이 가능하다.

로드밸런서는 인스턴스 그룹의 여러개의 서버 인스턴스 들에게 부하를 분산시켜 주며, HTTP로 통신을 하게 된다.

 

 

로드 밸런서의 구성요소를 확인할 수 있다.

 

 

 

 

SSL 인증서가 PROVISIONING 상태가 되었다면 HTTPS를 사용 가능한 상태이다.

 

 

 

앞에서 만들었던 DNS의 A 레코드의 IP를 생성한 부하 분산기의 외부IP로 바꾸어주도록 하자.

 

 

 

 

이제 그러면 도메인을 통해서 HTTPS로 접속이 가능해 진 것을 볼 수 있다.

반응형

BELATED ARTICLES

more