ELB (Elastic Load Balancing)

  • 하나의 서버, 서버셋으로 트래픽을 백엔드나 여러 서버(EC2 인스턴스들)로 다운스트림으로 전달하는 역할
  • 인스턴스 앞에 위치하여 유저가 엘라스틱 로드 밸런서로 접근할 때 여러 인스턴스들( 서버셋 )로 트래픽을 분산하는 것 → 다른 인스턴스 엔드포인트로 보냄
  • 단일 엑세스 지점(DNS)을 노출하게 되고 다운스트림 인스턴스의 장애를 원활히 처리 가능
  • 상태 확인 매커니즘으로 파악 가능
  • 쿠키를 통한 고정성 지원, HTTPS 트래픽을 위한 SSL, 고가용성과 클라우드 내부의 개인 트래픽과 공공 트래픽을 분리할 수 있다

 

엘라스틱 로드 밸런서 = 관리형 로드 밸런서

  • AWS 업그레이드, 유지 관리 및 고가용성을 책임진다
  • 작동 방식을 수정할 수 있게끔 구성 놉(knobs)도 제공
  • 무조건 쓰는게 좋다
    • 자체 로드 밸런서를 마련하는 것보다 훨씬 저렴하고 확장성 측면에서 편하기 때문이다
  • 로드밸런서는 다수의 aws 서비스들과 통합되어 있다 ACM, Route53, 오토 스케일링 그룹등등
    • 현재까지도 더 늘어나고 있다

 

Health Check

  • 로드밸런서가 ec2 인스턴스에 현재 제대로 작동하는지 확인하는 것
  • 포트와 라우트에서 이루어진다.
  • 제대로 응답하지 않으면 트래픽을 보내지않는다

 

4가지 종류의 로드밸런서 (과거순)

  • 클래식 로드 밸런서 CLB → HTTP, HTTPS, TCP SSL, secure TCP
    • 사용 권장하지 않는다 → 현재 제거됨
  • 웹소켓 로드 밸런서 ALB → HTTP, HTTPS, WebSocket
  • 네트워크 로드 밸런서 NLB → TCP, TLS, secure TCP, UDP
  • 게이트웨이 로드 밸런서 GWLB
    • 네트워크 계층과 IP프로토콜에서 작동

가능한 신형 로드밸런서를 사용하는게 좋고 로드밸런서에 따라 내부에 위치하는 로드밸런서도 있다

 

로드밸런서 보안 그룹

  • 로드밸런서는 HTTP 트래픽을 처리하기 위해 IP범위로 잡는다
  • 로드밸런서를 사용하는 EC2 인스턴스는 소스범위를 IP가 아닌 보안그룹으로 잡는다
  • 이렇게 함으로써 ec2 인스턴스는 로드밸런서에 오는 트래픽만 허용한다

 

애플리케이션 로드 밸런서 - ALB

  • 7계층 HTTP 전용 로드 밸런서
  • 머신 간 다수 HTTP 애플리케이션 라우팅에 사용하며 머신끼리 타겟 그룹으로 묶이게 된다
  • HTTP/2와 웹소켓 또한 지원한다 → 리다이렉트또한 지원(HTTP→HTTPS)
  • 다른 타켓 그룹으로 라우팅
    • path in URL 기반 라우팅 (example.com/user & example.com/posts)
    • hostname in URL 기반 라우팅 book.example.com & one.example.com
    • 쿼리스트링, 헤더 URL 기반 라우팅 example.com/users?id=123
    • 마이크로 서비스나 컨테이너 기반 애플리케이션에 가장 좋은 로드 밸런서
      • 도커와 ECS의 경우 ALB가 가장 적합
      • 포트 매핑 기능이 있어 인스턴스의 동적 포트로 리다이렉트 가능
    • ALB 하나만으로 다수의 애플리케이션을 처리할 수 있다.

ALB가 똑똑하게 루트에 따라 로드밸런싱을 할 수 있다

 

Target group

  • (오토스케일링 그룹으로 관리되는) ec2 인스턴스 - HTTP
  • ECS tasks - HTTP
  • 람다 함수(서버리스)가 될 수도 있다
  • 프라이빗 ip
  • 여러 대상 그룹으로 라우팅 될 수 있으며 헬스체크는 대상 그룹 레벨에서 이루어진다

 

Query strings/Parameters Routing

  • 쿼리 스트링과 파라미터 규칙을 만들어 타겟 그룹으로 리다이렉트 가능

알아두면 좋은 내용

  • 로드밸런서를 사용하는 경우 고정 호스트 이름이 부여됨(XXX.region.elb.amazonaws.com)
  • 애플리케이션 서버는 클라이언트의 ip를 직접 보지 못한다
    • 클라이언트 실제 ip는 x-forwarded-for 헤더에서 얻을 수 있다
  • 로드밸런서는 ec2인스턴스의 프라이빗 아이피로 들어감

ALB 실습

  • http와 https 트래픽을 위한 것이다

참고

  • NLB는 최고 성능을 위한 로드 밸런서
  • GWLB는 보안, 침입탑지 등 네트워크 트래픽을 분석하기 위한 로드밸런서

 

로드밸런서의 시큐리티그룹

인스턴스를 라우팅하려면 타겟 그룹이 필요함

타겟 그룹

 

결과 확인

지정해놨던 인스턴스 그룹으로 계속 ip가 바뀌는 것을 확인할 수 있었다

이후 인스턴스를 종료하거나 정지시키면 Health check를 통해 인스턴스가 트래픽을 받을 수 없는 상태라는 걸 확인하고 조정한다

 

이전 내용 참고

보안그룹 설정시 인바운드규칙과 아웃바운드 규칙을 잘 설정해야 한다.

응답이 너무 길다면 무조건 보안그룹을 잘 확인할 것

 

네트워크 보안

EC2 인스턴스의 퍼블릭 IP말고 로드밸런서로만 접근할 수 있게 설정하는 것이 좋다

인바운드 규칙을 로드밸런서의 보안 그룹을 선택하면 된다.

→ 해당 보안그룹을 가지고 있는 http 인바운드 요청만 허용해준다 ( 소스를 로드밸런서의 보안그룹으로 정의해줌으로써 HTTP 트래픽을 로드밸런서에서 오는 트래픽만 받는다. )

 

로드밸런서 규칙

Listener / Rule을 통해 호스트 헤더에 특정 값이 있을 때 다른 대상 그룹으로 보내거나 경로가 다를 때 다른 대상 그룹으로 보낼 수 있다.

 

Path에 따라 응답 처리

/error로 들어오면 404라는 고정된 응답과 에러메시지를 보낼 수 있다

 

다른 타겟 그룹으로 보내기

'TIL > AWS' 카테고리의 다른 글

Gateway Load Balancer (GWLB)  (0) 2023.05.21
AWS ELB - Network Load Balancer(NLB)  (0) 2023.05.21
AWS SAA - 고가용성 및 확장성  (0) 2023.05.21
AWS EC2 인스턴스 스토리지  (0) 2023.05.18
EC2 - SAA Level  (1) 2023.05.17
복사했습니다!