안녕하세요 서후아빠입니다. ^_^
이번 세션은 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) 선택 |
'Networking' 카테고리의 다른 글
[실습] Amazon GWLB를 사용하여 Fortinet 방화벽 구성하기 (TGW, Split)-2편 (0) | 2022.07.03 |
---|---|
[실습] Amazon GWLB를 사용하여 Fortinet 방화벽 구성하기 (PrivateLink, Auto Scaling)-1편 (1) | 2022.07.03 |
[실습] Amazon VPC 구성요소 생성하기 (0) | 2022.07.02 |
[이론] Amazon VPC 구성요소 기본 개념 (0) | 2022.07.01 |
[실습] AWS Native Client VPN 구성하기 (OpenVPN) (0) | 2022.07.01 |