- AWS ELB 의 한 종류이며 TCP, UDP, TLS 부하 분산 수행
- ALB 에 비해 응답속도가 빠름 (100ms, ALB 는 약 400ms 임)
- EIP(탄력적 IP)가 있을 시 서브넷별로 고정IP(EIP) 사용가능 (ALB 는 EIP 사용 불가)
- 타겟 그룹별 4계층 프로토콜 라우팅 가능
(예를 들어 A 타겟 그룹엔 TCP, B 타겟 그룹엔 UDP 트래픽이 송수신 되도록 설정 가능)
- 온프레미스의 L4 는 VIP 를 통해 접속하는 것처럼, NLB 또한 VIP 역할을 하는 FIXED HOSTNAME(고정 호스트명) 이 있고, 이 FIXED HOSTNAME(고정 호스트명)을 브라우저 URL에 입력하여 접속한다.
대략적인 구성 과정은 이렇다.
ALB 구성 글을 보고 구성해봤다면, 기존의 VPC, 서브넷, EC2 인스턴스를 그대로 활용해도 된다. (다만 보안 그룹은 수정이 필요하다.)
- VPC 내 두개의 AZ 각각에 서브넷, EC2 인스턴스 하나씩 생성
(NLB 는 최소 두개의 AZ에 연결해야 생성가능, 그래서 두개의 AZ에 각각 EC2 구성 후 ALB 연결)
- 생성한 서브넷에 라우팅 연결, 라우팅 테이블에 IGW(인터넷게이트웨이)추가
(외부에서 EC2 접속 가능하도록)
- NLB 생성 시 target group 생성 후 연결
(target group은 실제 ALB 에 연결할 대상을 지정하는 것임)
- 접속 테스트 및 추가 보안 조치 수행
(EC2 서버에 직접 접속 못하게 막고, NLB 를 통해서만 접속 할 수 있게 구성)
위 과정의 서브넷, EC2 설정은 하기의 글들을 참고할 수 있다.
[AWS] ALB(Application Load Balancer) 구성 (EC2, 서브넷 생성은 앞부분)
[AWS] VPC, SUBNET 네트워크 망 구성 (VPC, 서브넷 구성 그 자체를 보고 싶으면 이 글 참고)

저번에 생성한 EC2 부팅한다. (웹서버가 설치되어 있다.)

EC2 카테고리 좌측의 load balancer 메뉴에서 우측 create load balancer 선택하면
ELB 타입 선택이 나오고 여기서, NETWORK LOAD BALANCER 의 CREATE 를 선택한다.

NLB이름 입력하고, 외부 인터넷으로 접속할 것이므로 INTERNET-FACING 선택
IP 타입은 IPV4 만 쓸것이니 그대로 둔다.

VPC 는 디폴트 VPC를 선택한다. (기존에 ALB 테스트용으로 디폴트 VPC 를 썼었다.)
로드 밸런싱할 AZ, 서브넷을 선택한다. IPv4 주소는 AWS 에서 할당하는 것을 선택한다.
NLB 연결하는 서브넷의 IP를 EIP(탄력적 IP) 로 선택가능하나 이번 테스트에서 굳이 EIP로 할 필요가 없고, 애초에 EIP 가 없으니 EIP 선택이 비활성화 되어 있다.
ALB 와 다른 점이 바로 이 부분이다. ALB 구성 단계에서는 EIP를 선택할 수 있는 설정 자체가 없다.

NLB 가 사용할 보안그룹을 생성한다. OUTBOUND 는 그대로 두고, INBOUND 에 TCP 80, 출발지 ANY 로 생성한다. (TCP 22 는 필요 없다.)

방금 생성한 보안그룹을 NLB 보안그룹으로 선택한다.
(선택 전에 우측 새로고침 기능을 사용한다. 새로고침 안하면 보안그룹이 안 보일 수도 있다.)

CREATE TARGET GROUP 으로 NLB가 쓸 타겟그룹 생성하는데, ALB 생성때와 비슷한 과정으로 생성한다.

NLB 타겟그룹에서 타겟 타입을 INSTANCE 로, 타겟그룹 이름 입력한다.

프로토콜, 포트, IP 주소 타입, VPC 는 자동으로 선택되어 있을 것이고
헬스체크도 기본값을 그대로 쓴다. (로드밸런싱할 EC2 에 웹서버가 실핻되고 있으므로 HTTP를 선택해야 한다.)

우측 하단의 NEXT 를 선택해 다음단계로 이동한다.

이미 생성한 EC2 인스턴스 두개가 보이는데, 두개를 체크하고 중앙의 include as pending below 를 선택해서 타겟그룹에 추가한다.

EC2 인스턴스 두개가 타겟그룹에 추가된 것을 확인 할 수 있다. 우측 하단의 CREATE TARGET GROUP을 선택해서 타겟그룹 생성을 완료한다.

타겟그룹을 생성했으므로 다시 NLB 생성페이지로 돌아온다.

우측의 새로고침 클릭 후 생성한 NLB 용 타겟그룹을 선택한다.

타겟그룹 선택 후 NLB 생성페이지의 최하단으로 내려와서 CREATE LOAD BALANCER 을 선택한다.

NLB 생성완료 !
ALB 테스트 목적으로 생성된 EC2 를 다시 NLB 에 연결하므로
EC2 인스턴스의 보안그룹을 수정해야 한다. 그렇지 않으면 NLB로 EC2 에 접속할 수 없다.

EC2 에 설정된 보안그룹의 인바운드 정책을 수정한다.
ALB 는 어차피 삭제했으므로 기존 연결된 ALB 보안그룹은(사진에서 최상단 정책) 삭제해도 된다. ADD RULE 선택해서 인바운드 룰을 만들고 TCP, 80 포트, 출발지(SOURCE)는 NLB 에 적용된 보안그룹을 선택한다. SAVE RULE 선택으로 설정을 저장한다.
이렇게 하는 이유는 NLB 를 거치지 않고 EC2에 직접 들어오는 트래픽을 차단하고 NLB를 통해서 들어오는 패킷만 허용하기 위함이다.


NLB 의 DNS NAME 을 URL에 입력해서 접속할 수 있다.
ALB와 달리 새로고침을 해도 EC2 인스턴스가 잘 안바뀌고 시간이 좀 지나야 바뀐다.
접속 인스턴스가 바뀌는 걸 빨리 보고 싶다면, 다른 종류의 브라우저를 켜서 접속하거나, 프라이빗(시크릿 모드)로 브라우저 창을 하나 더 띄워서 접속해보면 된다.
만약 접속이 안된다면 적용된 NLB, EC2 인스턴스에 적용된 보안그룹을 확인, 수정해야 한다.
삭제를 위해선, 로드밸런서에서 타겟그룹 등록해제(삭제) > 타겟그룹의 등록대상 등록해제 >
타겟그룹 삭제 > NLB 삭제 순으로 진행한다.


로드밸런서에 연결된 리스너(타겟그룹)을 삭제하고

그다음 타겟그룹의 타겟(대상)목록에 등록된 EC2 를 먼저 등록해제한다.
타겟 그룹의 하단 메뉴 TARGETS 에서 지울 대상을 선택하고 DEREGISTER 을 선택하면 타겟그룹에서 등록해제된다.

우측 상단의 ACTION > DELETE 를 선택해서 생성한 타겟그룹을 삭제한다.
EC2 가 타겟그룹에 남아 있는 듯 하지만 HEALTH STATUS 를 보면 target deregistration ~ 이라고 되어 있다. (이미 타겟그룹에서 등록해제된것이다.)

YES DELETE 선택하면

타겟그룹이 완전히 삭제된다.



그리고 로드밸런서로 돌아와서 생성한 NLB 선택 actions > DELETE 를 선택해서 NLB 를 삭제한다.

구성도는 ALB 와 비슷하고, ALB 가 NLB 로 바뀌었을 뿐이다.