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 |