[AWS] NLB(Network Load Balancer) 구성

고구마양갱·2025년 1월 1일

AWS CLOUD

목록 보기
20/32
post-thumbnail

1. NLB 개념

- 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에 입력하여 접속한다.

2. NLB 구성

대략적인 구성 과정은 이렇다.

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 는 프리티어가 아니므로 테스트가 끝났다면 즉시 삭제해야 한다.

삭제를 위해선, 로드밸런서에서 타겟그룹 등록해제(삭제) > 타겟그룹의 등록대상 등록해제 >
타겟그룹 삭제 > NLB 삭제 순으로 진행한다.

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

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

우측 상단의 ACTION > DELETE 를 선택해서 생성한 타겟그룹을 삭제한다.

EC2 가 타겟그룹에 남아 있는 듯 하지만 HEALTH STATUS 를 보면 target deregistration ~ 이라고 되어 있다. (이미 타겟그룹에서 등록해제된것이다.)

YES DELETE 선택하면

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

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

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

0개의 댓글