본문 바로가기

Cloud

AWS - ELB(NLB)

NLB

: Network Load Balancer

1) 네트워크 4계층의 TCP, UDP 기반의 트래픽을 인스턴스로 전달하는 밸런서로, 낮은 계층에 속합니다.

2) 초당 수백만 건의 요청을 처리하기 때문에 매우 고성능입니다.

3) ALB보다는 지연시간이 훨씬 짧습니다.(ALB: 400ms, NLB: 100ms)

4) 외부의 가용영역당 1개의 고정 IP를 노출합니다.

즉, AZ당 하나의 고정 IP를 NLB는 가지고 있어서 이를 제공합니다.  하나의 타겟 그룹에 여러 인스턴스가 있다 하더라도

하나의 고정 IP를 가지고 노출시키기 때문에 동일한 IP로 사용자가 접근하는 것 처럼 보입니다.

따라서 특정 IP를 화이트리스트에 추가할 때 유용합니다.

 

5) AWS에서 제공하는 고정 IP를 각 가용영역에 하나씩 부여하여 사용할 수 있고 Elastic IP로 해서 직접 만들어서 

사용할 수도 있습니다.

엔트리 포인트를 2개 얻고자 할 때 Elastic IP를 만들어서 NLB를 활용하면 됩니다.

6) Application 전용의 특정 IP가 지정되면 NLB는 해당 트래픽을 EC2 인스턴스에 보내는 것입니다.

 

▷ ALB, CLB는 고정 IP가 없고 고정 호스트 이름이 있습니다.  이와 대비하여 NLB는 TCP, UDP 트래픽을 전달하는

로드 밸런서이기에 고정 IP 또는 Elastic IP를 활용합니다.

 

7) 로드 밸런싱을 할 대상 그룹을 선정할 때 인스턴스를 넣을 수 있는데, NLB는 TCP 기반의 트래픽을 대상 그룹에

전달하는 역할이고, TCP 프로토콜 방법이기 때문에 외부에서도 직접 접근이 가능합니다.

타겟 그룹으로 리다이렉션 하는 방법에 관하여 일부 규칙을 수정하면 가능합니다.

NLS 트래픽

이렇듯 NLB는 TCP/UDP 방식으로 타겟 그룹에 트래픽을 전달할 수도 있지만, ALB로 연결해서 HTTP(S) 타겟 그룹에 전달할 수도 있습니다.

 

 

그렇다면 NLB는 트래픽으로 무엇을 보내는 걸까?

1) EC2 Instances

: NLB 대상 그룹을 인스턴스로 하면 TCP/UDP 방법으로 대상 그룹에 인스턴스로 내용을 전달합니다.

다른 ELB 종류들과 다르게 NLB는 보안 그룹을 따로 설정하지 않았다.

ALB나 CLB 같은 경우 보안 규칙을 설정하고 ELB가 타겟 그룹에 붙기 위해서 타겟 그룹에 속한 인스턴스의 보안그룹에

HTTP 프로토콜 소스를 ELB 보안그룹으로 셋팅했었다.

 

그렇지만 NLB는 ELB 특유의 보안 그룹이 없다.   고정 IP 또는 Elastic IP로 주소를 할당해서 접근하도록 했는데, 각 인스턴스들은

앞서 ALB나 CLB와 다르게 로드 밸런서가 붙을 수 있는 보안그룹 맵핑 과정이 없어서 웹에서 직접 들어오도록 인스턴스 보안 그룹을

재셋팅 해야합니다.

따라서 인스턴스 보안그룹에 HTTP 프로토콜을 어디서든 접근할 수 있게 인바운드를 수정하면 됩니다. 

이렇게 하면 기존 ELB의 정의대로 트래픽을 밸런싱하지 않고 사용자가 직접 인스턴스에 붙는거 아니냐는 궁금증이 생길 것이다.

 

인스턴스 입장에서는 사용자가 직접 접근하는 것처럼 보일 수 있지만 사실은 NLB를 통해 고정 IP 또는 Elastic IP로 할당된 주소로

접근하게 되는 것이고 여러 인스턴스들의 각 퍼블릭 IP가 반환되는 것이 아니라 하나의 인스턴스에 대한 public IP로 보이며

고정된 형태로 결과가 반환될 것 입니다. 

 

 

2) IP Address

: NLB에서 직접 Traffic을 전송하는 것으로 고정IP 또는 개인IP에 전달해서 접근하도록 합니다.

EC2 인스턴스인 경우 자체 데이터 센터에 서버가 있을 경우에는 가급적이면 그대로 개인 IP가 있는 서버의 로드 밸런서를 사용합니다.

 

3) ALB

: NLB의 타겟 그룹이 ALB가 될 수 있고 이 ALB로 각 Application에 트래픽을 (HTTP) 밸런싱할 수 있습니다.

NLB는 고정 IP를 가질 수 있고 그 고정 IP로 규칙 부분에서 HTTP 관련 기능에 ALB를 활용하면 됩니다.

 


실습

NLB 생성
VPC & Mapping

AZ 매핑할 때 각 가용영역에 대하여 서브넷 셋팅하고 (VPC는 먼저 셋팅 - 공통) IP 주소를 만들 때 AWS에서 제공하는 것을 쓴다거나

Elastic IP로 직접 만든다거나 진행하는데, 현재 AWS 제공으로 한다면 고정 IPv4로 진행되게 됩니다.

앞으로 NLB는 이 고정 IP에 대해서 타겟 그룹에 인스턴스들에게 트래픽을 뿌려주게 될 것입니다.

단! 보여지는건 대표 인스턴스의 공공IP! 

 

타겟 그룹 생성
타겟 그룹 > 인스턴스로 만듬 > 인스턴스 붙이기

타겟 그룹 생성할 때 NLB에 대한 타겟그룹이기에 프로토콜도 TCP로 셋팅하고 (로드 밸런싱 > TCP로 진행) 

VPC도 동일하게 셋팅합니다.   그리고 인스턴스를 붙여 줍니다.

리스너 설정할 때 타겟 그룹에서 설정한 프로토콜(TCP), 80번 포트로 해서 타겟 그룹을 설정합니다.

리스너 설정

 

이렇게 NLB랑 타겟 그룹을 리스너로 연결해서 정의했지만, NLB가 타겟 그룹을 찾아갈 순 있어도 타겟 그룹 내 인스턴스에서

설정한 보안그룹이 NLB의 접근을 막을 것입니다.

앞서 ELB에서는 타겟 그룹 내 인스턴스의 보안그룹과 ELB의 보안그룹을 맵핑하여 로드 밸런서가 접근할 수 있도록

정의하였지만, NLB는 보안 그룹을 따로 생성하지 않았기에 인스턴스의 보안그룹에 HTTP 프로토콜 소스와 맵핑을

할 수 없었어서 타겟 그룹 내 인스턴스는 상태가 좋지 않다고 뜹니다.

 

인스턴스 상태 안좋음

따라서 인스턴스 보안그룹에서 HTTP프로토콜 접근을 모든 IPv4에서 할 수 있도록 한다면 NLB가 타겟 그룹에 접근할 수 있고

앞서 아마존에서 제공한 고정 IPv4로 각 인스턴스들의 IP를 동일하게 만들어 밸런싱합니다.

인스턴스 입장에서는 각 클라이언트가 직접 접근하는 것처럼 보이지만, 실제로는 NLB에서 고정 IP를 통해 트래픽을 전달하는 것입니다.

 

 

반응형

'Cloud' 카테고리의 다른 글

AWS - Sticky Session  (0) 2023.01.17
AWS - ELB(GWLB)  (0) 2023.01.17
AWS - ELB(ALB)  (0) 2023.01.17
AWS - ELB(CLB)  (2) 2023.01.17
AWS - ELB & ASG  (0) 2023.01.17