[AWS] ALB 생성 및 HTTPS 설정

shinny·2024년 3월 22일

AWS

목록 보기
2/5

ELB

ELB는 EC2, 컨테이너, IP 주소 혹은 한 개 이상의 AZ(Availability Zones) 등의 다양한 타겟들에 들어오는 트래픽을 자동으로 분산시킨다. 그리고 등록된 타겟들의 health 체크를 모니터링하고, healthy 상태인 타겟들에만 트래픽을 라우팅한다. ELB는 시간이 지남에 따라 변화하는 유입 트래픽에 대한 로드 밸런서를 스케일링한다. 그리고 대량의 트래픽이 유입되더라도, 자동으로 스케일링을 할 수 있는 기능을 지원한다.

ELB(Elastic Load Balancing)은 한 가지의 종류만 있는 것이 아니다.
Application Load Balancer, Network Load Balancer, Gateway Load Balancer, Classic Load Balancer 이렇게 종류가 있다. 요구에 맞추어서 선택하면 된다.

로드 밸런서는 클라이언트에게 단 한 개의 컨택지점을 제공한다. 그런데 로드 밸런서는 여러 타겟들에 대해 유입되는 앱 트래픽을 분산시킨다. 그래서 이것이 앱의 가용성을 높이는 것이다. 그리고 로드 밸런서에는 한 개 이상의 리스너를 등록할 수 있다.

리스너는 설정해둔 포트나 프로토콜을 사용해서, 클라이언트로부터 오는 연결 요청을 확인한다. 그리고 리스너에 등록한 규칙들은 로드 밸런서가 이미 등록된 타겟들에 대한 요청을 어떻게 라우팅할 것인지 결정한다. 각각의 규칙은 우선순위, 한 개 이상의 액션, 한 개 이상의 조건들로 구성된다. 규칙의 조건들이 맞아떨어질 때, 그 액션들이 진행된다. 각각의 리스너에 대해서는 default 규칙을 정해두어야 하고, 선택적으로 추가 규칙들을 정의할 수 있다.

Application Load Balancer

ALB(Application Load Balancer)는 OSI 계층에서 7계층인 애플리케이션 계층에서 작동한다. 로드 밸런서가 요청을 받고난 뒤, 리스너가 어떤 규칙을 적용해야 할지, 어떤 타겟 그룹으로부터 타겟을 선택해야 할지 등 우선순위에 따라 규칙을 평가한다. 트래픽의 내용(content)에 따라서 요청을 라우팅할 다른 리스너의 규칙을 적용할 수 있다. 라우팅은 각 타겟 그룹마다 독립적으로 실시되며, 하나의 타겟이 여러 타겟 그룹에 등록되어 있을 때도 그렇다.
라우팅 알고리즘은 타겟 그룹 레벨에서 설정할 수 있고, 기본 설정값은 라운드로빈이다.

  • ALB : 7계층 (HTTP/HTTPS traffic), Flexible.
  • NLB : Layer 4 (TLS/TCP/UDP traffic), Static IPs.
  • GLB : 3, 4계층
  • CLB : Layer 4/7 (HTTP/TCP/SSL traffic), Legacy, Avoid.

계층별로 다른 로드 밸런서가 존재하는 이유는 계층별로 확인할 수 있는 정보가 다르기 때문이다. 아래의 내용을 보고 로드밸런싱을 할 수 있다.

  • GLB : MAC주소, IP주소
  • NLB : MAC주소, IP주소, port번호

계층이 높은 곳에 로드밸런서가 있으면 더 많은 정보를 가질 수 있기 때문에, 세부적인 로드밸런싱이 가능하다.

ALB Diagram

  • ALB vs NLB

  • AZ마다 하나의 ALB가 존재할 때, AZ마다 ALB 노드가 트래픽을 분산하면 전체 ec2 는 다른 트래픽을 받는 문제가 있다. 그래서 cross zone load balancing 기능을 사용해서, AZ를 구분하지 않고 트래픽을 분산시킨다. ALB의 경우 cross zone load balancing 이 기본값으로 설정되어 있다.

ALB 요청 처리 과정

  1. 클라이언트가 도메인 주소를 통해 요청한다.
  2. Amazon의 DNS 서버에 요청해서 도메인 주소를 통해 ALB Node의 IP 리스트를 클라이언트에게 전달한다.
  3. 클라이언트는 IP 중 하나를 선택한다.
  4. 선택한 IP의 ALB 노드가 요청을 받고, 리스너에게 전달한다.
  5. 리스너는 규칙에 맞는 타겟 그룹으로 트래픽을 전달한다.
  6. 타겟 그룹은 라운드로빈 알고리즘을 통해 특정 EC2에 트래픽을 전달하여 요청을 처리한다.

3번 과정에서 cross zone load balancing 이 적용되어, 골고루 분산된 트래픽을 처리할 수 있다.

Target Group 생성

  • ALB 세팅 전, EC2 서버들이 들어갈 그룹을 만들어줘야 한다. 요청은 분산되어서 Target Group으로 들어간다.
  • ec2 대시보드에서 로드밸런싱 하위에 있는 대상 그룹을 선택한다.

여기서 내가 띄우는 서비스의 포트 번호를 선택해야 한다. 나는 8080 포트로 띄우기 때문에 HTTP 8080으로 세팅해준다.

로드밸런싱을 지금 세팅하는 이유는 트래픽 분산이 아니라 HTTPS 적용을 위해서이다.

ALB 생성

  • 로드밸런서 생성
  • ALB, NLB, GLB 중 ALB를 선택해서 생성
  • 가용영역을 선택할 때는 EC2 인스턴스의 가용영역을 포함시켜야 한다.

보안 그룹 생성

  • EC2에 적용한 보안 그룹과 동일한 보안 그룹을 적용한다.

리스너와 라우팅 설정

  • HTTPS는 443포트와 HTTP는 80번 포트로 리스너를 추가한다. 라우팅은 위에서 등록한 타겟 그룹으로 이동하도록 설정해준다.

인증서 설정

  • ACM에서 발급받은 SSL/TLS 인증서를 설정해준다.

ALB와 도메인 연결

  • 구매한 도메인과 ALB를 연결해주는 작업을 해야 한다.

Route 53

호스팅 영역에 가서 레코드 생성을 해준다.
이 과정을 통해서 구매한 도메인으로 접속하면, ALB의 ip 주소로 접속하게 해준다.

참고자료

  • [AWS] ALB 및 HTTPS 프로토콜 적용하기 바로가기
  • AWS — Difference between Application load balancer (ALB) and Network load balancer (NLB) 바로가기
  • What is Elastic Load Balancing? 바로가기
  • What is an Application Load Balancer? 바로가기
  • [AWS] AWS 인증서 발급 받아 https 적용하기 - aws certificate https 바로가기
  • AWS ELB(Elastic Load Balancing) 생성 후 EC2 연동 & 외부 도메인 연동 바로가기
  • [AWS] Amazon Certificate Manager로 HTTPS 적용해보기 바로가기
  • [AWS] EC2 인스턴스에 HTTPS 적용하기 바로가기
profile
꾸준히, 성실하게, 탁월하게 매일 한다

0개의 댓글