본문 바로가기

Networking

[이론] Amazon ELB 기본 개념

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 Amazon ELB에 대해서 업무적으로 필요한 최소한의 개념에 대해서 간단히 정리해 보았습니다.


개요

종류 : CLB(classic, L4/7, 거의 사용하지 않음), ALB(application, L7), NLB(network, L4), GWLB

인스턴스, 컨테이너, IP주소, Lambda함수 등 대상으로 분산
호스트 기반 : 다양한 서비스를 1개의 ELB로 분산 가능(=1개의 ELB에 여러개의 리스너 등록 가능)
NLB Internet-facing을 제외하고 유동 IP로 할당되기 때문에 부하분산 처리를 도메인 기반 사용
인스턴스 장애 감시 : InService상태, OutofService 상태

ELB 용어

Idle timeout(유휴 제한 시간, ALB만 해당) : Client~Server간 Connection을 ELB에서 유지하는 시간 (ex : 60sec)

설정 경로 : EC2 > Load Balancers > ALB 선택 > Description (tab) > Attributes

Sticky : Client~Server간 Connection되었던 정보를 ELB에서 저장하고 있는 시간 (ex : 3600sec), Sticky 시간 내 동일한 Client가 Connection 요청하면 부하분산 계산하지 않고 저장된 정보를 토대로 즉시 이전에 연결했던 Server로 연결

설정 경로 : EC2 > Targe Group > 그룹 선택 > Attributes (tab) > Edit > Target selection configuration
Sticky 활성화 시 주의사항 : ELB 앞단에 ALB나 Proxy가 존재할 경우 동일한 Source로 요청오기 때문에 Sticky 활성한 경우 특정 Server(=EC2)로 몰릴 수 있으므로 이런 경우는 Sticky를 비활성화해야함. (기본값 비활성화)

X-forwarded-For(ALB만 해당) : HTTP 헤더 중 하나, 최초 요청한 Client의 IP 정보가 기록되어 있음, Client~Server에서 중간에 NAT 처리가 되면 아래 그림처럼 SIP 추적이 안되며, 이를 보완하는 기능으로서 HTTP Header에 삽입되어 전달됨

설정 경로 : EC2 > Load Balancers > ALB 선택 > Description (tab) > Attributes (기본값 비활성화)
참고 URL : https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/x-forwarded-headers.html

ALB 구성요소

Security group : Listener에 대한 허용하는 보안그룹 설정하는 부분

Listener : HTTP, HTTPS 서비스에 대한 요청을 받는 부분으로서 1개의 ALB에 여러개의 Listener 등록이 가능

               (단, Listener를 2개 등록할 경우 서비스 Port는 상이해야 함)

Rule(옵션) : IF(조건 최대 5개 설정 가능, AND 조건) ~ THEN 구조

IF
  Path is /test/*
  Http header User-Agent is *Chrome*
  Host is gtek.com
  Http request method is get
  Query string is test:ture
  Source IP is 100.100.0.0/32
THEN
Forward to 
  test-tg:1 (100%)
  Group-level stickiness : off


  - Rule이 여러 개일 경우 정확하게 일치하는 Rule을 선택

  - 선택한 Rule(ex : 위 표 참조)의 IF 구문을 모두 만족하면 THEN의 내용 수행하도록 전달

    1) Path (ex : /test/*) 

    2) Http header (ex : User-Agent) 

    3) Http request method (ex : get, post, option)

    4) Query string (ex : test:true) 

    5) Source IP (ex : 100.100.0.0/32)

  - THEN(Forward to, Redirect to, Return fixed response, Authenticate) : 선택한 옵션(ex : 위 표 참조)의 행위 수행

    1) Forward to : Target group으로 전달 

    2) Redirect to : 다른 URL로 전달

    3) Return fixed response : 특정 HTTP status code를 반환하도록 설정

    4) Authenticate : OICD(Open ID Connect, OAuth2.0) 인증 거치도록 지정

Target group은 Listener별로 생성해도 되고, Rule 수량만큼 생성해도 됩니다. 즉, 필요에 따라 생성해서 연결하여 사용합니다.
NLB의 경우는 Security group과 Rule이 없습니다.

SNI (Server Name Indication)

하나의 ALB에 여러 개의 SSL인증서를 등록하여 여러 개의 웹 서비스를 연결하도록 제공 (서비스 도메인별 ALB 생성 불필요)

다만, test1.com은 Redirect (80 요청 시 443 변경 요청)을 사용하고, test2.com은 Redirect 미사용하는 경우 등 서비스 특성에 따라 ALB를 각각 생성할 수도 있음

Client가 서비스(https://test1.com or https://test2.com)을 요청하면 (SNI) ALB는 아래처럼 동작합니다.
1. Client가 요청한 서비스 도메인을 확인하고, 이에 맞는 SSL 인증서를 ACM에서 선택합니다.
2. ELB의 Listener에 설정한 Rule(Host header)에 따라 Target Group을 선택하여 전달합니다. 

※ Rule 설정 방법 
EC2 > Load Balancers > ALB 선택 > Listeners (tab) > 해당 리스너의 View/edit rules > Add rules (tab) > Insert Rule
  - Add condition (Host header 선택) : test1.com    
  - Add action (Forward to 선택) : Server (test1.com) 선택 

  - Add condition (Host header 선택) : test2.com   

  - Add action (Forward to 선택) : Server (test2.com) 선택
반응형