ref)
아래 블로그를 요약했습니다.
https://aws-hyoh.tistory.com/134
https://aws-hyoh.tistory.com/147
목차
1. ALB 정의
- Application Layer를 다루는 Load Balancer
- 이에 대비되는 L4 Switch : L7 Virtual Server 사용하는 LB
- TCP기반의 HTTP, HTTPS, WebSocket을 활용하는 LB
- HTTP의 Header, Request Method등을 이용해, Request를 적절한 대상 그룹으로 Routing(부하분산) 할 수 있다.
- 규칙에 우선순위를 두고 차례로 적용할 수 있다
- 뒤에 나올 ALB rule 설정 시 HTTP 특징 활용
- 라우팅 실시 이전에 3-way handshake로 커넥션 생성필요
- HTTP도 TCP기반의 Protocol이므로
- L4의 Protocol 이행후 Http Routing 실시
2. ALB 특징 상세
2.1 HTTP를 활용한 라우팅
- HTTP Header
- 요청헤더 : 사용자 상태정보, 디바이스 정보
- Cookie Header, User-agent Header, Accept Header 활용
- 일반헤더 : 사용자 IP
- X-For-warded-For
- 요청헤더 : 사용자 상태정보, 디바이스 정보
2.2 HTTP요청 메서드
- GET/HEAD/POST/PUT 등을 기준으로 Rule을 생성하여 Rule에 맞는 적절한 대상 그룹으로 라우팅
- 요청 경로 : 경로에 따라 다른 대상그룹으로 라우팅
- Source IP : 사용자 IP에 따라 다른 대상그룹으로 라우팅
- 쿼리 문자열 : 쿼리 문자열의 Parameter를 기준으로 라우팅
2.3 로드밸런싱 방식
- Round Robin : 기본알고리즘, EC2 Instance에 순서대로 할당
- Least Outstanding Request : 요청을 가장 적게 가지고 있는 EC2 Instance에 할당(커넥션 수 기준?)
2.4 SSL 인증서 탑재
- ALB가 SSL 인증서를 이용해 EC2 Instance대신 암호화 통신을 한다.
- HTTPS 통신을 할 경우 SSL 인증서를 이용해 SSL Handshake를 통해 메세지 암호화 후 전달
- 리소스 소모가 커서, 서버에서 하면 부담이 된다
- L4 스위치에서 이 작업을 대행하고, L4스위치 <-> 서버는 평문통신
- SSL Offload라고 함
- HTTPS 통신을 할 경우 SSL 인증서를 이용해 SSL Handshake를 통해 메세지 암호화 후 전달
- 사전작업
- Route53을 통해 사용할 도메인 발급
- ACM(AWS Certificate Manager) 통해 SSL 인증서 발급 : AWS SSL인증서 발급 서비스
- how-to
- 리스너에서 서비스포트의 프로토콜을 443으로 변경
- Cipher Suite와 SSL 인증서 선택
- 대상 그룹의 EC2 Instance 포트를 80으로 설정(평문 통신만 하면 되니까)
2.5 프록시 서버
- 사용자와 통신은 ALB가 하므로, 중간의 프록시 서버 역할을 하는 것이다.
- 트래픽 플로우
- 1. 사용자 -> 브라우저 -> ALB -> 3-way handshake
- 2. 라우팅 대상그룹 결정 -> EC2 Instance 결정
- 3. VPC내 private IP를 활용해 EC2 Instance와 3-way handshake 실시
- 4. 사용자 -> Get 요청 -> ALB -> 서버 -> 응답 -> 웹페이지
2.6 AWS WAF 연동
- AWS WAF는 웹서버로 유입되는 트래픽을 검사하여 차단/보호 한다.
3. ALB 구성요소
- ALB는 여러개의 리스너가 존재 할 수 있으며
- 리스너 안에 다수의 규칙이 가능하며
- 리스너는 여러 대상그룹을 가질 수 있다.
- ALB -> Listener -> Listener{ rule()} -> Target Group
3.1 리스너(Listener) : 사용자 요청을 받고, 이를 적절한 대상그룹에 전달
- HTTP,HTTPS 요청을 받아 헤더, 요청메서드에 담긴 HTTP 관련 정보 해석하는 파츠
- HTTP 정보를 기반으로 규칙을 세우고 라우팅 실시
- Listener ID 존재(필수)
- 규칙 존재(필수)
- 포트(필수)
- ALB리스너의 사용가능 포트 1~65535
- 8080, 8888 쓰는 HTTP 리스너 사용 가능
- ALB리스너의 사용가능 포트 1~65535
- 종류
- HTTP 리스너
- 80포트
- HTTPS 리스너
- HTTPS 리스너는 암호화 된 요청 처리를 위해 SSL 인증서, 보안정책 필요
- 443포트
- HTTP 리스너
3.2 규칙(Rule) : 리스너의 대상그룹 결정 기준
- 해석한 HTTP 관련 정보(헤더, 요청메서드)를 대상그룹에 전달하는 판단 로직
- 규칙이 여러개 존재하면 ,가장 상단 규칙부터 비교
- 구성
- 규칙조건(IF) : 요청이 오면 규칙조건에 대조해본다. AND조건
- 규칙조건은 최대 5개 포함 가능하며, 모든 규칙 조건을 충족해야 함
- 규칙작업(THEN) : 규칙조건에 해당하면 규칙 작업(라우팅 작업)을 실시한다.
- 작업 종류
- 전달대상 : 대상그룹을 지정하여 사용자 요청을 전달. 여러 대상 그룹 지정이 가능하며, 각 그룹의 요청 처리 비중을 정할 수 있다.
- 리디렉션 대상 : 사용자 요청을 다른 URL로 전달(리디렉션)
- 영구(301)/임시(302) 리디렉션 가능
- 경로, 쿼리 지정 가능
- ex) second.aws-hyoh.com -> www.naver.com 연결하여 웹페이지 띄우기
- 작업 종류
- 규칙조건(IF) : 요청이 오면 규칙조건에 대조해본다. AND조건
-
-
-
-
- 고정응답 반환
- 사용자가 정한 html,css,js,json등의 웹페이지를 HTTP 응답코드(2xx,3xx..)와 함께 전달
- 잘못된 경로 진입 시, 트래픽 폭주 시 유용
- 고정응답 반환
-
-
-
3.3 대상그룹(Target Group) : 요청을 처리할 EC2의 묶음
- 전달대상에 포함된 대상그룹이 리스너로 부터 요청을 받아 작업 실시
- 특징 : HTTP 항목으로 설정 됨
- 기본설정 Protocol : Port
- ALB의 타겟이므로 HTTP, HTTPS만 사용.
- EC2들이 Protocol : Port로 설정된 요청만 받는다.
- 리스너의 포트번호와 대상그룹의 포트번호 다르게 설정가능
- 리스너 -> 대상그룹으로 요청 전달시 포트번호 변경 됨
- 헬스체크
- 소속된 EC2 상태 점검시 HTTP/HTTPS를 사용한다.
- 3-way handshake 체크 + 원하는 웹페이지 요청하여 상태체크 가능.
- 모니터링 : 2xx, 3xx, 4xx 응답코드에 대한 모니터링 제공
- 기본설정 Protocol : Port
4. ALB 주요 라우팅 규칙 종류
- 호스트 헤더
- HTTP 헤더 중 도메인 네임(호스트 헤더)를 기준으로 라우팅 결정
- 호스트 헤더에 'www.naver.com'이 포함될 경우 ""규칙 작업을 수행한다.
- 경로(Path) : 호스트가 제공하는 자원의 존재 위치
- 사용자가 도메인 네임과 함꼐 경로를 입력하면, 경로를 읽고 규칙 조건으로 사용
- 호스트 뒤에 "/first/"가 존재하면 규칙작업을 수행한다.
- HTTP 헤더
- 호스트헤더와 경로를 포함한 모든 HTTP 헤더로 라우팅 결정
- 헤더를 직접 골라서 라이팅 규칙으로 사용
- ex) User-Agent, Accept-Language, Content-Type, Authorization...
- HTTP 요청 메서드
- GET일 경우 ~~규칙작업을 수행한다
- POST일 경우 ~~ 규칙작업을 수행한다.
- 사용자 정의 메서드 포함 가능
5. 기타
- Connection Timeout : 사용자<->서버 간 커넥션 유지시간 설정
- Sticky : 한번 접속한 적 있는 서버 기억 후 기존 커넥션이 있었던 서버로 연결(쿠키 이용)
- X-Forwarded-For : 사용자 IP를 가진 헤더. Target Group으로 요청 전달시 기본적으로 탑재
- ALB가 private IP로 Source ip NAT을 실시함.
- EC2에서는 ALB IP가 Source IP로 보이므로
- ALB가 private IP로 Source ip NAT을 실시함.
- HTTP/2 : ALB 속도 향상을 위해 default로 활성화 됨
- ALB와 더블어, 대상그룹등 모든 관련된 통신대상에서 요청 프로토콜을 HTTP2로 설정 필요