[AWS] ALB(Application Load Balancer) 구성

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

AWS CLOUD

목록 보기
19/32
post-thumbnail

1. ALB 개념

- AWS ELB 의 한 종류이며 HTTP, HTTPS 서비스 부하 분산 수행
- 여러개의 인스턴스(서비스)는 물론이고 동일 인스턴스(서비스) 내 여러 애플리케이션의 부하 분산
(컨테이너,ECS를 사용하는 경우 동일 인스턴스에서 여러 어플리케이션의 부하 분산 가능)
- HTTP/2 와 WebSocket 지원
- 리다이렉트도 지원하며, HTTP 에서 HTTPS 자동 리다이렉트 가능

- URL, 헤더, 쿼리 등에 기반한 라우팅 기능
예를 들어 aaa.com/bb , aaa.com/cc 등 URL 경로에 따라 각기 다른 경로로 라우팅 가능하다. aaa.com/?k=kor , aaa.com/?k=us 등 매개변수에 대해서도 각가 다른 경로로 라우팅 가능

- 온프레미스의 L4 는 VIP 를 통해 접속하는 것처럼, ALB 또한 VIP 역할을 하는 FIXED HOSTNAME(고정 호스트명) 이 있고, 이 FIXED HOSTNAME(고정 호스트명)을 브라우저 URL에 입력하여 접속한다. (참고로 ELB 의 DNS NAME 이 FIXED HOSTNAME 역할을 한다.)

2. ALB 구성

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

- VPC 내 두개의 AZ 각각에 서브넷, EC2 인스턴스 하나씩 생성
  (ALB 는 최소 두개의 AZ에 연결해야 생성가능, 그래서 두개의 AZ에 각각 EC2 구성 후 ALB 연결)
- 생성한 서브넷에 라우팅 연결, 라우팅 테이블에 IGW(인터넷게이트웨이)추가
  (외부에서 EC2 접속 가능하도록)
- ALB 생성 시 target group 생성 후 연결
  (target group은 실제 ALB 에 연결할 대상을 지정하는 것임)
- 접속 테스트 및 추가 보안 조치 수행
  (EC2 서버에 직접 접속 못하게 막고, ALB 를 통해서만 접속 할 수 있게 구성)

우선 ALB 구성을 위해 최소 2개의 AZ에 연결해야 한다. 그러므로 디폴트 VPC 에 서브넷 두개를 각각 다른 AZ 에 생성한다.

하나는 AZ 2a 에 생성하고, ip 대역은 다른 서브넷과 겹치지 않도록 구성한다.

다른 하나는 AZ 2b 에 생성하고, 다른 서브넷과 겹치지 않도록 ip 대역을 지정한다.

서브넷 두개를 디폴트 vpc 의 라우팅에 연결 후 라우팅 테이블에 IGW(인터넷 게이트웨이)를 추가한다. (VPC 밖 외부 인터넷에서 접속해야 하므로) 라우팅 테이블에 IGW 를 추가하는 과정은 생략했다.

구체적인 방법이 궁금하면 아래의 글을 참고하면 된다.

[AWS] IGW로 외부 인터넷 연결

각각의 AZ 에 서브넷을 생성하고 라우팅 테이블에 IGW 를 추가했으면,
각 서브넷에 EC2 인스턴스를 생성한다. 생성할 때 USER DATA 를 활용해 아파치 웹 서버를 설치한다.

KEY PAIR는 생성 되어 있는 것을 그대로 쓴다.
(어차피 PUTTY 가 아니라 EC2 connect 로 접속할 것이어서 이미 생성한 것이든, 새로 만들드든 상관 없다.)
보안그룹은 미리 생성한 것을 쓴다.
미리 생성한 보안 그룹은 출발지 ANY 로 프로토콜은 HTTP, SSH, ICMP 로 한 정책이다.
(그냥 개별로 생성하거나, 편집해도 상관없다. HTTP, SSH, ICMP 를 ANY 출발지로 허용만 하면 된다.)

HTTP, HTTPS 로드 밸런싱이므로 USER DATA 에 아파치 웹 서버 설치 명령어를 입력해둔다.

두번째 EC2 구성하는데, 서브넷 선택만 다르게하고 이외 나머지는 방금 생성한 EC2 설정과 같게 구성하면 된다.

서브넷은 2번 서브넷으로 선택하고 이외 나머지는 앞서 생성한 EC2 설정과 동일하게 구성한다. (KEY PAIR, VPC, 보안그룹, USER DATA 등), 물론 구분을 위해 EC2 이름은 다르게 해야 겠지,
HTTP, HTTPS 로드 밸런싱이므로 USER DATA 에 아파치 웹 서버 설치 명령어를 입력해둔다.
(USER DATA 이미지 생략)

이렇게 각 서브넷에 EC2 생성을 완료하고, ALB 를 생성한다.

create load banlancer 선택

다른 글에서 설명한 것 처럼 ALB, NLB, GWLB 로 분류되고 생성시 선택할 수 있다.
지금 생성할 것은 ALB 이므로 첫번째 옵션(Application Load Balancer)의 CREATE 를 선택한다.

ALB 이름을 입력하고, 외부에 접속하는 방식으로 테스트 할 것이므로
SCHEME의 INTERNET FACING 옵션을 선택, IP ADDRESS TYPE 은 IPv4 를 선택한다.
(사설대역에서만 기능을 수행해야 한다면 SCHEME 옵션을 INTERNAL로 선택하면 된다.)

서브넷, EC2 를 생성한 디폴트 VPC 선택
ALB 는 반드시 두개의 AZ 를 선택해야 생성할 수 있다. (AZ가 하나만 있을 때는 생성불가)
SECURITY CROUP 은 기존에 EC2 가 사용한 것을 선택한다.
(물론 ALB 만 적용할 용도로 새로 만드는 것을 추천하지만, ALB 생성 후 보안그룹은 언제든지 변경 가능하다.)

리스너 설정 부분인데, 리스너는 ALB의 지정 포트를 통해 트래픽을 전달 받는 대상이다.
리스너 설정 우측 DEFAULT ACTION에 TARGET GROUP 을 선택한다.
첫 생성이면 타겟 그룹이 없을 것이고, 이미 있더라도 앞서 생성한 EC2를 타겟 그룹으로 설정해야 하므로, 바로 아래의 CREATE TARGET GROUP 을 선택하여 새로 생성한다.

EC2 인스턴스를 연결할 것이므로 TARGET TYPE 을 INSTANCES 로 선택한다.
바로 아래의 타겟그룹명을 입력하고, 프로토콜과 포트는 자동으로 입력되어 있을 것이다.

IP ADDRESS TYPE 은 IPv4, VPC 는 디폴트 VPC, 프로토콜 버전은 HTTP1 을 선택한다.
HEALTH CHECK 도 자동으로 선택되어 있으므로 이 부분은 그대로 둔다.
설정 후 우측 하단의 NEXT 선택해서 타켓 인스턴스를 선택한다.

상단목록은 선택할 수 있는 타겟 인스턴스 목록이고,
하단목록에는 이미 선택된 타겟 인스턴스 목록이다. 선택된 타겟 인스턴스가 없어서
하단 목록은 비어 있다.

상단 목록의 생성한 EC2 인스턴스 두개를 체크하고 INCLUDE AS PENDING BELOW
선택하여 타겟 인스턴스로 지정한다. 우측 하단의 CREATE TARGET GROUP 을 선택해서 타겟 그룹을 생성한다.

ALB 에 연결할 타겟그룹 생성완료

CREATE TARGET GROUP 선택 시, 새로 열린 브라우저 페이지에서 타겟그룹을 생성하므로
기존의 ALB 설정 페이지는 그대로 남아 있다.
ALB 생성 브라우저 페이지로 돌아와서 생성한 타켓그룹 선택한다.
(선택 전 우측의 새로고침 클릭, 새로고침 안하면 생성한 타겟그룹이 보이지 않을 수 있다.)

설정이 끝났으므로 우측 하단의 CREATE LOAD BALANCER를 통해 ALB 생성

ALB 생성 완료 !

생성 후 ELB 목록을 보면 방금 생성한 ALB 가 Provisioning.. 이라고 되어 있는데,
프로비저닝이라는 것은 활성화하고 있다는 뜻이다. 활성화 될 때 까지 시간이 걸린다.

활성화 되어 ACTIVE 로 바뀌면 ALB 를 사용 할 수 있다.

온프레미스의 L4 가 VIP를 통해 접속하는 것처럼, ALB 는 DNS NAME 을 통해 접속한다.
DNS NAME 은 앞서 설명한 FIXED HOSTNAME(고정 호스트명) 인 것이다.

URL 에 DNS NAME 을 입력하면 EC2 웹 서버에 접속되며, 새로고침을 반복하면 ALB에 연결된 다른 EC2 인스턴스로 번갈아 가며 접속된다.

ALB 활용 시, 타겟 인스턴스로의 직접 접속을 차단하고
ALB를 통해서만 타겟그룹에 접속하게 해야 할 때가 있다.
그럴 경우 ALB와 보안그룹을 활용할 수 있다. 방법은 ALB에 적용된 보안그룹을 EC2 인스턴스 보안그룹의 출발지(SOURCE)로 설정하는 것이다.

ALB, EC2 인스턴스가 같은 보안그룹을 사용하고 있으므로, ALB가 따로 사용할 보안그룹을 신규 생성한다. 아웃바운드 정책은 디폴트로(기본상태) 두고, 인바운드 정책을 출발지 ANY,HTTP(80포트) 로 하나만 설정한다. (어차피 HTTP 80 포트 만 쓸것이므로)

ELB 목록으로 돌아가서, ACTIONS, EDIT SECURITY GROUP 을 선택하면
선택한 ELB 의 보안그룹을 변경할 수 있다.

생성한 ALB 보안그룹을 방금 생성한 보안그룹으로 변경한다.

그리고 타겟그룹의 EC2에 설정된 보안그룹의 인바운드 룰을 수정한다.
(타겟그룹으로 설정된 두개의 EC2 인스턴스는 같은 보안그룹이 적용되어 있으므로, 적용된 하나의 보안그룹만 수정하면 된다. 만약 각각 다른 보안그룹이 적용되어 있다면, 각 인스턴스에 적용된 보안그룹을 따로 수정해야 한다. )

기존의 HTTP 룰을 삭제하고, HTTP(80 포트) 로 생성해서 출발지(SOURCE)를 ALB에 적용된 보안그룹을 선택, 저장한다. (SAVE RULES)

그 후 EC2 인스턴스 주소로 직접 접속해보면, 접속이 되지 않는다.

그리고 ALB DNS DOMAIN 으로 접속해보면 접속이 잘 된다.

서비스를 계속 사용할 것이 아니면 삭제하는 것이 좋다.
ALB 삭제 시 리스너를 먼저 삭제하고, 그 다음 ALB를 삭제한다.

생성한 로드밸런서를 체크하고 하단 메뉴의 LISTENERS AND RULES 을 보면,
연결된 리스너를 조회 할 수 있다. 리스너 선택하고 우측의 MANAGE LISTENER, DELETE LISTENER 로 생성한 리스너를 삭제한다.

리스너 삭제 후, ELB(ALB) 목록 우측의 ACTIONS, DELETE LOAD BALANCER 으로
ELB(ALB)를 삭제하면 된다.

생성한 ELB(ALB) 삭제 완료

생성한 ALB와 인스턴스를 구성도로 나타내면 이런 모습이다.

0개의 댓글