Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
AWS Cheat Sheet - ELB
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2022-08-18
2021-11-17
11582
## ELB > 이 문서는 Cheat Sheet 입니다. 길잡이 역할을 하기 위한 주요 핵심 원리와 기능들을 설명합니다. 상세한 내용들은 별도의 문서에서 다루게 됩니다. ELB(Elastic Load Balancing)는 하나 이상의 가용 영역(AZ)에 있는 여러 개의 대상(Target)에 애플리케이션 트래픽을 자동으로 분산하는 AWS 서비스다. 원리적으로 Reverse Proxy 계통의 서비스이지만, 이쪽의 서비스들이 그렇듯이 기능이 크게 확장되어 있다. ### 유형 ELB는 3가지 유형이 있다. * CLB(Classic Load Balancer) : 3가지 유형의 ELB 중 가장 오래된 로드밸런서다. Layer 4와 Layer 7에서 기본적인 로드 밸런싱 기능을 제공한다. CLB는 지금은 거의 사용하지 않고 있다. * ALB(Application Load Balancer) : Layer 7 로드밸런서다. HTTP 헤더를 이용한 컨텐츠 기반 라우팅 기능을 제공하므로, 매우 정교한 수준에서의 로드밸런싱이 가능하다. * NLB(Network Load Balancer) : Layer 4 로드밸런서다. IP Protocol 기반의 라우팅 정책을 설정 할 수 있다. * GWLB(Gateway Load Balancer) : Layer 3 로드밸런서로, 어플라이언스를 배포하기 위해서 사용한다. ### 구성요소 ELB는 Listener, Rule, Target Group, Health check 4개의 구성요소를 가진다. ![ELB 구성요소](https://docs.google.com/drawings/d/e/2PACX-1vQ41Q01RvNoTp1AHrAR9xmd8LDq5847hiHMwi9qkzn4LCp9-qxU-209oFF5MGOGQerG-iX4JfeNjW51/pub?w=638&h=494) ELB는 "특정 그룹"으로 트래픽을 전송 할 수 있다. 예를 들어 이미지 서버와 웹 서버로 구성된 인터넷 서비스가 있다면 이미지 서버를 대상그룹으로 묶고 웹 서버를 대상그룹으로 묶을 수 있다. EC2 기반의 서버라면 EC2 인스턴스를 대상 그룹으로 묶게 될 것이다. 대상 그룹은 컨테이너를 포함 할 수도 있다. 트래픽을 받을 타겟 그룹을 정했다. 트래픽을 받는 타겟 그룹은 트래픽을 수신하기 위한 리스너가 필요하다. 애플리케이션은 포트번호로 특정 트래픽을 수신하기 때문에 이 리스너는 "포트번호"를 설정하게 된다. 이제 트래픽을 어떤 타겟으로 보낼지에 대한 규칙(Rule)을 설정해야 한다. 룰은 아래와 같은 정보를 포함한다. * HTTP 이면 A 타겟 그룹, HTTPS 이면 B 타겟 그룹으로 보낸다. * img.example.com 이면 이미지 타겟 그룹으로 보낸다. www.example.com 이면 웹 서버 타겟으로 보낸다. * HTTP 경로에 /photo 가 있으면 photo 서버 타겟 그룹으로 보낸다. /message 가 있으면 message 서버 타겟 그룹으로 보낸다. * IP 주소가 zzz.zzz.zzz.0/24 이면 A 타겟 그룹으로 보낸다. ELB는 타겟 그룹에서 트래픽을 수신하는 즉, 제대로 작동하는 서버로만 트래픽을 라우팅한다. 이를 위해서 ELB는 관리자가 설정한 Health Check URL (ex. /health.html)를 타겟 그룹에 있는 모든 서버에 대해서 일정 주기로 계속 체크한다. 만약 응답이 없다면 해당 서버를 라우팅에서 제외한다. ### Network Load Balancer Layer 7 기능이 필요하지 않은 경우 사용한다. * Layer 4(OSI 4)에서 작동하기 때문에 더 많은 데이터를 처리 할 수 있다. * Layer 4에서 단순하게 작동하기 때문에 더 많은 연결을 처리 할 수 있대. 초당 수백만개의 요청도 처리 가능하다. * 둘 이상의 가용영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 트래픽을 분산 할 수 있다. * **고정 IP 주소를 할당** 할 수 있다. 고정 IP가 필요한 애플리케이션들을 위해서 이전에는 DNS 캐시 플러시 혹은 다른 꼼수를 써야 했는데, 지금은 그럴필요가 없다. * 트래픽의 양에 따라서 자동으로 확장한다. * TCP 트래픽의 경우 프로토콜, 소스 IP 주소, 소스 포트, 타겟 IP 주소, 타겟 포트, TCP 시퀀스 번호에 따라서 트래픽을 라우팅한다. * UDP 트래픽의 경우 프로토콜, 소스 IP 주소, 소스 포트, 타겟 IP 주소, 타겟 포트에 따라서 트래픽을 처리한다. UDP는 시퀀스 번호가 없기 때문에 TCP 처럼 시퀀스를 처리하지는 않는다. * IP 주소로 Target을 등록 할 수 있으며, 외부 IP도 등록 할 수 있다. * NLB는 트래픽을 투명하게 전송하기 때문에, NLB 뒤에 로깅, 인증, DNS, IoT 등 UDP 프로토콜에 의존하는 서비스를 배치 할 수 있다. * 교차영역 로드밸런싱은 기본적으로 비활성화 되어 있으므로 메뉴얼하게 활성화 해야 한다. 특별한 이유가 없다면 활성화하는게 좋다. ### Application Load Balancer * Layer 7(OSI 7)에서 작동하기 때문에, 애플리케이션 프로토콜을 직접적으로 제어 할 수 있다. * HTTP와 HTTPS를 허용한다. * HTTPS의 경우 AWS ACM과 통합하여 ELB에 간단히 offload 할 수 있다. * 가용성을 위해서 최소 2개 이상의 서브넷을 지정해야 한다. Application Load Balancer는 아래의 3개 요소로 구성된다. * **Load blanacer** : 클라이언트의 단일 접점 역할을 한다. 로드밸런서의 도메인이름은 AWS 인프라에서 자동으로 할당하는데, 네임 서비스를 이용해서 도메인 이름을 설정해 줄 수 있다. AWS Route 53 을 이용하여 도메인 이름과 통합 할 수 있다. * **Listener** : 클라이언트의 요청을 확인하고 경로를 설정하는 일을 한다. Target Group, 우선순위, 라우팅 조건등의 규칙을 정의해야 한다. * **Target Group**은 요청을 분산해서 처리 할 하나 이상의 EC2 인스턴스, 컨테이너(ECS)를 등록 할 수 있다. ![image](https://docs.google.com/drawings/d/e/2PACX-1vTN3YVW20E9Br6v7bQLnqA59R2jV4SCR_ppULSV4G-zAWXhV2rtJioRcVRPoYzKj472tQJCWEuZtaSl/pub?w=848&h=430) 아래와 같은 기능들을 제공한다. * 경로기반 및 호스팅 기반 라우팅을 지원한다. * 단일 EC2 인스턴스에 대해서 여러 애플리케이션으로 라우팅을 할 수 있다. 애플리케이션 포트만 다르게 하면 된다. * ECS, EKS 등 컨테이너화된 애플리케이션을 지원한다. * 유저 요청 URL을 다른 URL로 리다이렉트 할 수 있다. * Amazon Cognito 사용자 풀 혹은 OIDC을 이용한 사용자 인증을 지원한다. * Lambda 함수를 Target 대상으로 등록 할 수 있다. * 기본적으로 Application Load Balancer는 각 요청을 독립적으로 라우팅한다. 하지만 Sticky Session(고정 세션)을 사용하여 사용자의 세션을 기반으로 특정 대상에 바인딩 하도록 할 수 있다. 이렇게 하면 사용자의 요청이 동일한 대상에 전송되게 할 수 있다. * IPv4와 IPv6에 대한 듀얼스택모드를 지원한다. * 교차영역 로드밸런싱을 지원한다. 즉 가용영역 전체를 그룹으로 묶어서 로드를 분산 할 수 있다. 교차영역 로드밸런싱은 기본 설정이다. * WebSocket를 지원한다. ### Gateway Loadbalancer * 주로 타사의 가상 어플라이언스를 배포하기 위해서 사용한다. * 가상 어플라이언스는 패킷 분석 시스템, 침입탐지 시스템, 방화벽 시스템등이 될 수 있다. * Layer 3에서 작동한다. IP를 이용하여 등록된 대상으로 패킷을 전달 한다. * 하나의 가용영역에서 실행된다. * VPC internal에서만 작동한다. 공인 IP를 대상으로 설정할 수는 없다. * Layer 3이라는 낮은 수준에서 작동하는 만큼 , SSL Offloading, SNI, 사용자 인증, 사용자 지정 보안 정책 등을 사용할 수 없다. 말 그대로 투명하게 패킷을 전달하는 일만 한다. ![Gateway Loadbalancer](https://docs.google.com/drawings/d/e/2PACX-1vRR6WCcYQ5f9IEmLDXrAEPhY3pYTLyniAJtr8NRXAUKluRiargS3b1iecejWjdL0YHPUhkyCkjXoKgJ/pub?w=1038&h=583) ## ELB 타입별 특징 | 기능 | Application Load Balancer | Network Load Balancer | Classic Load Balancer | Gateway Load Balancer | | --- | ------------------------- | --------------------- | --------------------- | --------------------- | | OSI Layer | Layer 7 | Layer 4 | Layer 4/7 | Layer 3 Gateway + Layer 4 Load Balancing | | Target Type | IP, Instance, Lambda | IP, Instance, ALB | N/A | IP, Instance | | Protocols | HTTP, HTTPS | TCP | TCP, SSL, HTTP, HTTPS | IP | | WebSockets | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | IP addresses as a target | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | | HTTP header-based routing | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | | | HTTP/2/gRPC | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | | | idle connection timeout 설정 | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | Cross-zone load balancing | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | SSL offloading | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | Server Name Indication(SNI) | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | Sticky sessions | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | Static / Elastic IP Address | | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | | | Custom Security policies | | | **<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">✔</span>** | | #### Internet facing or internal-only ELB는 internet facing과 internal-only 두 가지 타입중 하나를 가질 수 있다. 인터넷에서 접근을 허용하느냐, VPC 내부 네트워크에서만 접근을 허용하느냐의 차이가 있다. **Internet facing ELB:** \* ELB는 Public IP를 가진다. 사용자는 이 Public IP를 이용해서 인터넷을 통해서 요청 할 수 있다. \* 사용자의 트래픽은 EC2 인스턴스의(혹은 컨테이너) Private IP로 라우팅된다. \* ELB의 도메인 이름은 AWS에 관리한다. 포맷은 : \<name>-\<id-number>.\<region>.elb.amazonaws.com **Internal only ELB:** \* ELB는 Private IP를 가진다. \* 사용자 요청은 EC2 인스턴스의 Private IP로 라우팅된다. \* ELB 도메인 이름의 포맷은 : **internal**-\<name>-\<id-number>.\<region>.elb.amazonaws.com \* Internet gateway가 필요하지 않다. #### Security Group Security Group은 외부로 부터의 접근을 제어하는 AWS 보안 서비스로 방화벽과 유사하게 작동한다. ![image](https://docs.google.com/drawings/d/e/2PACX-1vTdrnRWciYmmnbeNtCYPm3WhRmYVd5EtVZr8TFTYh4zzBc783NzfL-SsWgsuE4kOHDVDP-qv1MMZ8IF/pub?w=760&h=379) Security group은 2개의 AWS 리소스에 대해서 설정된다. * ELB : 인터넷으로부터의 접근을 제어한다. 일반적인 인터넷 서비스라면 모든 출발지의 IP(0.0.0.0/0)을 허용하고 HTTP(S) 포트인 80과 443만을 허용하는 정책을 가질 것이다. * EC2(혹은 컨테이너) : 일반적으로 ELB에서의 접근만 허용한다. Source는 ELB일 것이고 Target Port는 Application에서 상요하는 포트가 된다. #### Monitoring AWS에서 인프라 모니터링은 **CloudWatch** 가 담당한다. ELB의 경우 CloudWatch와 Access Logs, CloudTrail을 주요 모니터링 서비스로 사용한다. * CloudWatch : 매 1분마다 매트릭을 수집한다. * Access Logs : 옵션 기능으로 기본적으로 비활성화되어 있다. ELB에 대한 액세스 로그를 활성하면 ELB의 로그를 캡처해서 지정한 Amazon S3 버킷에 저장한다. * CloudTrail : CloudTrail은 자원 관리자에게 필요한 정보를 제공한다. ELB의 설정 변경등을 위한 API 호출 기록이 남는다. #### Listener Rule & Target Group ELB는 Listener Rule에 따라서 사용자의 요청을 Target Group으로 라우팅 한다. Listener Rule은 ELB의 타입에 따라서 다르다. Layer 7을 다루는 ALB의 경우에는 HTTP 프로토콜을 기반으로 다양한 정책을 설정할 수 있기 때문에 좀 더 복잡하고 NLB는 좀 더 단순한 룰을 가진다는 것을 제외하면 기본 원리는 동일하다. 아래 이미지는 Application Load Balancer의 Listener Rule 이다. ![image](https://docs.google.com/drawings/d/e/2PACX-1vTBckfIMqSK_BdHEJXZNzOFx6O3pg0QRjukwjt07Y-z3NYgrX2R_q5lP6diCbd1R2Y4ar7O1fMbk9bx/pub?w=962&h=272) 1. 만약 URL PATH가 /expressapp 과 일치한다면 ea-tg target group으로 트래픽을 라우팅한다. 2. 만약 URL PATH가 /expressapp2 와 일치한다면 e-tg2 target group으로 트래픽을 라우팅한다. 3. 위의 어떤 룰과도 일치하지 않는다면 default action이 작동하며, ea-tg target group으로 트래픽을 라우팅한다. Application Load Balancer는 유연하게 라우팅 설정을 할 수 있기 때문에 **MSA** 방식의 서비스를 구축하는데 널리 사용한다.
Recent Posts
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
5분만에 만들어보는 Streamlit 챗봇
Let's encrypt로 SSL 인증서 관리하기
Upscayl을 이용한 이미지 업스케일링
스테이블 디퓨전 설치 및 사용해보기
Archive Posts
Tags
aws
aws cheat sheet
ELB
internet service
network
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags