ALB는 여러 Listener를 가지며, 한 listener 당 한 가지 이상의 rule이 존재
e.g., Listener 1이 target group에 트래픽을 보내는 한 가지 규칙이 있을 때
target group은 여러 target을 갖고 있음 EC2 인스턴스나 health check 등
ALB는 TG에 등록된 target으로 요청을 라우팅하기 전에 사용자를 인증할 수 있음
ALB에 SSL, TLS, SSL 인증서를 로드할 수 있음
NLB는 두 AZ 사이에 있고, 클라이언트는 NLB에 연결되어 있음
NLB는 고정된 IP 주소가 있어서 고정 IP로 ENI에 연결됨
NLB는 AZ당 고정 IP가 하나 있어서 elastic IP를 할당할 수 있음
EC2 instance가 NLB의 다른 VPC에 있다면, 이 인스턴스를 NLB에 ID로 등록할 수 없음
ID로 인스턴스를 등록하거나 ECS 작업 내에서 자동으로 클라이언트의 IP는 보존되고 EC2 인스턴스는 클라이언트로부터 직접 발생하는 트래픽을 봄
NLB가 3개의 AZ로 활성화되어 있고 NLB DNS 이름에 대한 DNS 쿼리를 하면 3개의 IP를 갖게 됨, 활성화되어 있는 3개의 AZ와 부합함
NLB는 각 노드에 대해 DNS 이름을 갖고, 사용 가능한 AZ에 기반해 DNS name을 써서 IP 주소 하나만 확인할 수 있음
Connection Idle Timeout
client-ELB connection & ELB-target connection
NLB works without cookies
SSL - Server Name Indication (SNI): 다중 SSL 인증서를 하나의 웹 서버에 로딩하는 문제를 해결함 (다중 웹사이트와 도메인을 지원하는 서버)
Hands-on#01: ALB X-Forwarded Headers
1) create instance
instance user data
#!/bin/bash
# Use this for your user data (script without newlines)
# Installs httpd (Linux 2 version)
yum update -y
yum install -y httpd.x86_64
systemctl start httpd
systemctl enable httpd
echo "Hello World from $(hostname -f)" > /var/www/html/index.html
2) create ALB
- create TG
3) connect ssh
4) Edit the file httpd.conf, edit the LogFormat section with the following
sudo nano /etc/httpd/conf/httpd.conf
<IfModule log_config_module>
#
# The following ... a CustomLog directive (see below).
#
>> LogFormat "%{X-Forwarded-For}i %{X-Forwarded-Proto}i %{X-Forwarded-Port}i ...
5) Reload Apache
sudo systemctl reload httpd
6) Run the following command to watch your Apache Access Logs
sudo tail -f /var/log/httpd/access_log
172.31.x.x - - [19/Jul/2024:09:26:59 +0000] "GET / HTTP/1.1" 200 64 "-" "ELB-HealthChecker/2.0"
172.31.y.y - - [19/Jul/2024:09:27:07 +0000] "GET / HTTP/1.1" 200 64 "-" "ELB-HealthChecker/2.0"
...
- - - 172.31.x.x - - [19/Jul/2024:09:28:59 +0000] "GET / HTTP/1.1" 200 64 "-" "ELB-HealthChecker/2.0"
- - - 172.31.y.y - - [19/Jul/2024:09:29:07 +0000] "GET / HTTP/1.1" 200 64 "-" "ELB-HealthChecker/2.0"
15.248.a.a http 80 172.31.x.x - - [19/Jul/2024:09:29:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0"
15.248.b.b http 80 172.31.x.x - - [19/Jul/2024:09:29:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0"
- 기존에는 X-Forwarded 헤더가 없지만, ALB DNS name으로 접속(새로고침) 시 IP, protocol, port 정보 확인
Hands-on#02: NLB Proxy Protocol
1) create instance (same user data)
2) create NLB
- create TG
- choose type IP addresses
- VPC subnet: EC2 instance private addresses
3) repeat #01 6)
# public IP
15.248.a.a - - [19/Jul/2024:10:02:22 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0"
# NLB DNS
172.31.x.x - - [19/Jul/2024:10:02:28 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0"
4) edit TG attributes
- Traffic configuration: enable Proxy protocol v2, Preserve client IP addresses
5) Verify the module mod_remoteip loaded successfully
sudo /usr/sbin/httpd -M | grep -i remoteip
You'll have the following output
> remoteip_module (shared) - 원격 IP 모듈이 응답으로 공유되었다면 모듈이 성공적으로 로드됐다는 의미
6) edit the file
sudo nano /etc/httpd/conf/httpd.conf
Add this line to enable Proxy Protocol - Listen 80 다음 줄에 삽입
>> RemoteIPProxyProtocol On
7) repeat #01 5), 6)
# NLB DNS
15.248.a.a - - [19/Jul/2024:10:12:26 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0"
- NLB와 EC2 instance 사이에 proxy protocol이 작동한다는 것을 증명
References
Udemy, Pass the AWS Certified Advanced Networking Specialty Certification ANS-C01. Taught by an AWS Networking and VPC Expert!, Section 18: Elastic Load Balancers
'Networking > AWS' 카테고리의 다른 글
[AWS] SAA-C03#11: Route 53 (1) (0) | 2024.08.07 |
---|---|
[AWS] ANS-C01#02: VPC fundamentals (2) | 2024.07.24 |
AWS products (0) | 2024.07.10 |
[AWS] SAA-C03#10: VPC lab(3) (1) | 2024.07.02 |
[AWS] SAA-C03#09: VPC lab(2) (0) | 2024.07.02 |