[Vnet] Azure Load Balancer 와 Nginx 비교

VNet
작성자
Roronoa
작성일
2020-05-29 17:44
조회
4182
로드밸런서와 L2-L7이란?

부하분산이란 단어로 먼저 시작하고 싶습니다. 부하를 분산시켜서 나누는 기술로 여러개의

가상머신에 부하를 나눠주기 위한 기술로 많은 유저가 한꺼번에 사용할때 부하를 분산 시켜주고

가용성을 위해 분산을 처리 하는 기술제품 입니다. 유저가 적거나 소규모에서는 많은 효과를 나지

않지만 유저가 조금만 많아진다면 필수적으로 이 제품을 사용 해야 하며 전통적으로 온프레미스

시절에서도 많이 사용했던 고전 기술이라고 생각하시면 됩니다. 현재도 Nginx, HAProxy, Envoy, Traefik 등등

의 다양한 Load Balancer가 사용되어 있었으며 클라우드 시대에서도 여전히 많이 사용 하는 기술입니다. 

L2는 온프레미스 시절에 사용했던 Mac 주소 기반의 로드밸런싱으로 단순하게 브릿지나 허브등 말합니다.

L3는 IP 주소를 사용해서 부하분산을 하며 L4 로드밸런싱은 (IP + port) 사용해서 부하분산을 하며 L7은

도메인 기반으로 하는 방식이라고 생각하면 매우 간단하게 기억 할 수 있습니다.

Azure 로드밸런서 란 무엇인가?
azure그림001

그림001은 매우 단순한 3Tier Architecture로 웹티어앞에 Public에서 들어오는 트래픽을 처리하는 

외부 로드밸런서는 웹티어에 트래픽을 전달하고 다시 내부 로드벨런서는 앱 티어로 전달하고 또다시

내부 로드밸런서 는 데이터 티어에 트래픽을 분산 시킵니다.쉽게 설명해서 위에서 설명한단순 L4 로드

밸런싱 역활을 합니다.

 

Public (공용)로드밸런서 란?
azure그림 002

가상네트워크 내에 있는 웹티어 에 트래픽을 전달하고 외부에 노출된 공용 IP를 가지는 로드밸런서 로

외부 노출이 되는 로드밸런서 입니다. 

 

Internal(내부) 로드밸런서 란?
azure그림003
그림003에 내부에 있는 2개의 내부 로드밸런서는 공용 IP가 없으며 사설 IP만 가지고 있으며 외부 통신

을 하지 않고 철저하게 앞쪽에서 들어오게 됩니다. 이는 보안 측면에서 매우 중요하며 내부트래픽을

분산시는 역활만 합니다. 

 

Azure 로드밸런서 특징 

  • 트래픽 부하 분산

  • 가상머신의 아웃바운드 규칙 연결

  • 프로브로 가상머신의 상태 확인

  • IPv6 지원

  • 인바운드 NAT 규칙

  • 부하 분산 규칙


부하분산 방법
azure그림004

그림004 처럼 Azure 로드밸런서는 원본 IP, 원본 포트,대상IP,대상 포트, 프로토콜 을 사용하는

해싱 알고리즘을 사용하며 부하 분산 규칙을 만들수 있습니다.
azure그림005

그림005의 빨간색 박스 부분은 프론트 앤드라고 하며 공용 아이피나 Private IP를 가지며

입구라고 생각하면 됩니다. 파란색 부분은 백 엔드라고 부르며 백엔드에는 가상머신들이나

다양한 부하분산이 필요한 제품에 연동할 수 있습니다.

인바운드 NAT(Network Address Translation) 규칙(DNAT) - 프론트 앤드 부분으로 들어오는

트래픽을 백엔드의 특정 가상머신으로 보내는 규칙입니다

아웃바운드 NAT 규칙(SNAT)- 반대로 아웃바운 NAT(Network Address Translation) 규칙은

가상머신에서 로드밸런서로 나가는 규칙을 만드는 부분이며 기본 로드밸런서는 지원하지 않고

표준 로드밸런서 부터 지원합니다.
Azure 로드밸런서 와 Nginx의 차이 

Azure 로드밸런서와 Nginx의 차이는 단순한게 보면 Nginx가 가진 많은 기능이 전부 Azure 로드밸런서

가 제공하지는 않는다라고 생각하면 매우 쉽습니다.
azure그림006

그림006 은 Nginx 공식 홈페이지 있는 기능 비교 표입니다. 가운데 Azure 로드밸런서의 경우

머 이거저거 없는것처럼 보이지만 기본 로드밸런서로 사용하는것은 전혀 문제가 없으며 Nginx와

기능의 차이가 있지만 Nginx을 가상머신에서 사용하는 시나리오와 Azure  로드밸런서를 빠르게

대규모 확장성 면에서 비교해 본다면 Nginx는 Azure 로드밸런서를 따라갈 수는 전혀 없습니다.

이 차이는 Azure 로드밸런서 는 PaaS이며 Nginx + Virtual Machine은 IaaS의 차이이므로 머가 좋다 라고

각각 장단점이 있기 때문에 단정 지을 수없습니다. 그러므로 이 두가지를 병행해서 내가 꼭 쓰고 싶은

기능을 잘 혼합해서 쓴다면 최대 효율을 끌어낼 수 있습니다.

Nginx의 로드 밸런싱 방법은 매우 다양한 방법을 제공하며 최소연결, 최소 시간, IP 해시,일반 해시,

각각 가중치를 백엔드서버에 보내기 등등 다양한 기능이 가능하지만 Azure 로드밸런서는 5 튜플만

제공을 합니다. L7인 Azure Application gateway의 경우 라운드 로빈만 제공합니다.

Azure 로드밸런서의 가장 큰 단점은 SSL을 직접 핸들링 할수 없다는 단점이 있으며 L7인 Azure

Application gateway에서는 SSL을 넣을수 있는 기능이 있습니다. 현재는 Azure 로드밸런서는

SSL 처리가 안되므로 가상머신 레벨에서 SSL을 해결해야 하며 이 부분은 기능을 오랜동안 추가

시켜주지 않는것으로 보아 Application gateway에서 제공하므로 추가 제공하지 않을 듯 해보입니다.

 

Azure Firewall 과 통합 https://docs.microsoft.com/ko-kr/azure/firewall/integrate-lb