728x90
반응형

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

 

728x90
728x90

'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

+ Recent posts