category
AWS/udemy
2023. 5. 29. 13:33
by 쓱은감자
Elastic Load Balancer(ELB)
High Availability
- 동일 애플리케이션의 동일 인스턴스를 다수의 AZ 걸쳐 실행
- 고가용성은 애플리케이션이나 시스템을 두 개의 AZ나 데이터 센터에서 가동하는 것을 의미
- 손실이나 장애를 막기 위해 사용
Load Balancing
- 네트워크 트래픽을 여러 서버에 분산해주는 서비스
- 부하를 분산하기 위해 사용
- 애플리케이션의 단일 액세스 지점(DNS) 노출
- 인스턴스의 장애를 원할히 처리
- ELB는 managed load balancer
- aws가 관리하며 어떤 경우에도 작동할 것을 보장
Health Checks
Types of load balancer on AWS
- Application Load Balancer (v2)
- HTTP, HTTPS, WebSocket 지원
- Network Load Balancer(v2)
- Gateway Load Balancer
- 3계층(Network Layer)에서 IP Protocol 사용
Load Balancer Security Groups
- 유저는 HTTP, HTTPS를 통해 LB에 접근 가능
- 인스턴스는 LB만 접근 가능하도록 보안그룹 설정
Application Load Balancer(v2)
- Application Load Balancer는 7계층에서 동작(HTTP)
- 다수 HTTP 어플리케이션으로 라우팅되어 부하분산
- 동일 머신의 다수의 어플리케이션을 부하분산(ex. containers)
- HTTP/2, Web Socket 지원
- 라우팅 테이블 지원
- URL의 경로 기반으로 라우팅
- URL의 호스트 네임을 기반으로 라우팅
- 쿼리와 헤더를 기반으로 라우팅
- 포트 매핑 기능을 지원하기 때문에 동적 포트로의 리다이렉션 가능
Target Groups
- EC2 인스턴스들의 그룹(Auto Scaling Group을 통해 관리 가능)
- ECS task
- Lambda functions
- IP Addresses
- ALB는 여러 target group으로 라우팅 가능
Good to Know
- 호스트네임은 고정(XXX.region.elb.amazonaws.com)
- 애플리케이션 서버는 클라이언트의 IP를 직접 확인하지 못함
- 클라이언트 IP는 X-Forwarded-For 헤더에 삽입
- X-Forwarded-Port에서 사용 포트를 X-Forwarded-Proto에서 사용 프로토콜을 확인 가능
Network Load Balancer(v2)
- 네트워크 로드 밸런서는 L4 로드 밸런서
- TCP & UDP 트래픽을 제어
- 초당 수백만건의 요청을 처리 가능
- ALB에 비해 지연 시간이 짧음(NLB - 100ms, ALB - 400ms)
- 네트워크 로드 밸런서는 가용 영역별로 하나의 고정 IP를 가짐
Target Groups
- EC2 인스턴스
- IP 주소 - private IP만 사용 가능
- Application Load Balancer
- TCP, HTTP와 HTTPS 프로토콜 헬스체크 지원
Gateway Load Balancer
- 배포 및 확장과 AWS의 타사 네트워크 가상 어플라이언스의 플릿 관리에 사용
- 네트워크의 모든 트래픽이 방화벽, IDS, IPS, Deep Packet Inspection, payload 수정(네트워크 레벨) 등의 모든 곳을 통과하도록 설계 가능
- 레이어 3인 네트워크 계층에서 동작 - IP packet
- GWLB의 기능
- Transparent Network Gateway - VCP의 모든 트래픽이 GWLB를 지나기 때문
- Load Balancer - target group인 자신의 가상 어플라이언스 집합(방화벽, IPS 등)에 트래픽을 분산
- 6081번 포트의 GENEVE 프로토콜을 사용
Target Groups
- EC2 Instance
- IP Addresses - private IP만 사용 가능
Sticky Sessions
- Client가 처음 통신을 시도한 EC2 인스턴스로 계속해서 통신을 유지할 수 있도록 세션 유지
- Application Load Balancers에서 사용 가능
- 쿠키를 이용하여 제어
Cookie Names
- Application-based Cookies
- Custom Cookie
- 애플리케이션에서 생성한 Custom Cookie
- 애플리케이션에 필요한 모든 사용자 정의 속성을 포함
- 쿠키 이름은 대상 그룹별로 개별적으로 지정
- Application cookie
- 로드밸런서에서 생성
- 생성한 쿠키 이름은 AWSALBAPP
- Duration-based Cookie
- 로드밸런서에서 생성한 쿠키
- ALB의 쿠키 이름은 AWSALB
Cross-Zone Load Balancing
- 다른 AZ에 존재하는 모든 EC2 인스턴스에 트래픽을 분배
- Aplication Load Balancer
- 기본적으로 Cross-Zone Load Balancing 활성화(Target Group 레벨에서 비활성화 가능)
- 다른 AZ로 옮기는 비용 발생하지 않음
- Network Load Balancer & Gateway Load Balancer
- 기본적으로 비활성화
- AZ간 데이터 옮기는 비용 발생
SSL/TLS
Basic
- SSL 인증서는 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화(in-flight 암호화)
- SSL은 보안 소켓 계층(Secure Sockets Layer)을 의미하고 연결을 암호화하는데 사용
- TLS는 새로운 버전의 SSL로 전송 계층 보안(Transport Layer Security)을 의미
- 최근에는 TLS 인증서가 많이 사용
Load Balancer - SSL Certificates
- 로드밸런서는 X.509 인증서를 사용(SSL/TLS 서버 인증서)
- AWS에서는 ACM(AWS Certificate Manager)에서 인증서들을 관리할 수 있음
- 개인이 가지고 있는 인증서를 ACM에 업로드 가능
- HTTPS 리스너
- 기본 인증서로 지정
- 다중 도메인을 지원하기 위해 다른 인증서를 추가 가능
- 클라이언트는 SNI(Server Name Indication)을 통해 호스트의 이름을 알릴 수 있음
SNI(Server Name Indication)
- SNI는 여러 개의 SSL 인증서를 하나의 웹서버에 로드해 여러 개의 웹사이트를 지원
- 확장된 프로토콜로 클라이언트가 대성 서버의 호스트 이름을 지정
- ALB & NLB(신버전), CloudFront에서만 지원
Deregistration Delay
- 인스턴스가 등록 취소, 혹은 비정상인 상태일 때 인스턴스에 어느정도 시간을 주어 'in-flight request'(기존 연결 및 요청)를 완료할 수 있도록 하는 기능
- 등록 취소(de-registering)중인 EC2 인스턴스에 새로운 요청을 보내지 않음
- 1~3600초 사이로 설정 가능(기본 300초)