1. 개요
AWS의 Application LoadBalancer는 L7 기반의 LoadBalancer이며 HTTP 헤더 및 Method, 경로 기반 라우팅과 같은 다양한 LoadBalancing 기능을 지원합니다. 사용자 트래픽이 늘어남에 따라 동적으로 확장되며, 따라서 IP 주소가 고정되지 않는 형태로 서비스를 제공합니다. IP 고정이 되지 않기 때문에 On-Premise나 VPC 외부 통신 구간의 방화벽 등 보안 장비에서 FQDN이나 IP 대역으로 허용 정책을 등록해야만 했으며, 고정 IP로 Application LoadBalancer 서비스 제공이 필요한 경우에는 Global Accelerator를 앞단에 구성하거나, 별도의 Network LoadBalancer와 Lambda를 구성하여 Application LoadBalancer의 IP 변화를 체크하여 Network LoadBalancer의 Target을 변경하는 방법을 사용해야 했습니다.
이에 AWS에서는 Application LoadBalancer를 Network LoadBalancer의 Target으로 설정 가능하게끔 서비스를 업데이트하였으며, (21년 10월 업데이트) 해당 설정을 통해 Application LoadBalancer 앞단 Network LoadBalancer를 통해 고정 IP를 제공할 수 있게 되었으며, PrivateLink 연결 및 AvailabilityZone 별 고정 IP 주소를 포함하는 Network LoadBalancer의 이점을 Application LoadBalancer에서 제공하는 고급 라우팅과 결합하여 활용이 가능해졌습니다.
이번 포스팅에서는 이처럼 Application LoadBalancer를 Network LoadBalancer의 Target으로 설정하는 방법 및 활용 가능한 아키텍처에 대해 알아보도록 하겠습니다.
2. 이점
2.1 Application LoacBalancer 용 PrivateLink
● PrivateLink를 Network LoadBalancer로 연결하고, 해당 트래픽을 Target인 Application LoadBalancer로 라우팅하여 L7 LoadBalancing이 가능
2.2 Application LoacBalancer 용 고정 Network LoacBalancer IP 주소
● Network LoadBalancer의 가용 영역 당 하나의 고정 IP를 사용 가능하며, 기존 Application LoadBalancer IP가 변경됨에 따라 발생하던 이슈를 해결 가능
● 고정 IP 를 사용함으로써 On-Premise 방화벽에 FQDN이나 IP 대역이 아닌 고정 IP로 정책 등록 가능
● DNS A 레코드 유형을 사용하여 서비스 도메인에 Network LoadBalancer의 고정 IP 등록 가능
● 응용단 인터페이스 연계를 위하여 IP 를 하드코딩할 필요가 있는 경우 고정 IP 등록 가능
2.3 다중 프로토콜 제공
● Network LoadBalancer 및 Application LoadBalancer를 이용함으로써 동일한 서비스 도메인에 대해 다중 프로토콜 이용 가능
● HTTP/HTTPS 웹서비스는 Target으로 Application LoadBalancer를 지정하고, 그 외 프로토콜은
기존 타입의 Target(Instance-type 등)으로 등록하여 하나의 Network LoadBalancer로 트래픽 분산 가능
3. 설정 가이드
3.1 Application LoadBalancer type Target Group 생성
● Network LoadBalancer와 Application LoadBalancer는 이미 생성되어 있다고 가정합니다.
● Target Group 생성 시 다음과 같이 Application LoadBalancer Type을 선택하며, Application LoadBalancer와 동일한 VPC를 선택합니다.
Health Check 설정 시 Timeout 및 Success codes는 고정되며, 이는 AWS 자체 Network LoadBalancer-Application LoadBalancer 간 Health Check 방식입니다.
● Target으로 설정할 Application LoadBalancer를 선택합니다.
3.2 Network LoacBalancer의 Listener에 Application LoacBalancer type Target Group 등록
● Target Group 확인 시 Network LoadBalancer와 Application LoadBalancer 정보를 확인 가능합니다.
● Target이 Unhealthy 일 경우, Application LoadBalancer의 Security Group을 확인하여 신규 정책을 등록합니다. (Network LoadBalancer 의 Private IP 통신 허용 필요)
● 설정 완료 후 Network LoadBalancer와 Application LoadBalancer의 서비스 위치(internet-facing or Internal)에 따라 서비스 정상 동작 여부 테스트
1) Internet-facing NLB + Internal ALB : 정상 동작
2) Internet-facing NLB + Internet-facing ALB : 정상 동작
3) Internal NLB + Internal ALB : 정상 동작
4) Internal NLB + Internet-facing ALB : 정상 동작
● HTTP 이외의 별도 TCP 포트에 대한 Listener를 Network LoadBalancer에 추가하여 서비스 정상 동작 여부 테스트 (34000 RDP 접속테스트 수행)→ NLB Listener : 34000 → EC2 : 3389 (EC2 Security Group에 tcp 34000 허용 정책 추가 필요)
정상 접근 확인
3.3 고려 사항
● 서비스 트래픽에 대해 TLS 처리가 필요한 경우, Network LoadBalancer가 아닌 Application LoadBalancer에서 HTTPS Listener를 설정해야 합니다. (Network LoadBalancer는 L4 로만 동작)
● Network LoadBalancer와 Application LoadBalancer는 동일한 VPC 및 동일한 Account에
생성해야 합니다.
→ 다른 Account/VPC 일 경우에는 Global Accelerator 또는 Lambda 기반의 구성 방안을 사용
● 가용성, 확장성 및 성능 최적화를 위해 Network LoadBalancer와 Application LoadBalancer의
가용 영역을 동일하게 설정합니다.
● 하나의 Application LoadBalancer type Target Group은 하나의 Network LoadBalancer에만 연결됩니다. (Network LoadBalancer 당 하나의 Application LoadBalancer만 연동 가능)
● 하나의 Application LoadBalancer는 Application LoadBalancer type Target Group을 분리하여 여러 Network LoadBalancer에 연동 가능합니다.
● 성능 최적화 및 Cross-Zone 데이터 전송 요금 방지를 위해 Network LoadBalancer의
Cross-zone load balancing 설정은 Disable 하는 것을 권고합니다.
● Application LoadBalancer에 할당된 Security Group으로 Source 접근을 제어하며, 아래와 같이
Network LoadBalancer의 Scheme에 따라 설정합니다.
(Network LoadBalancer 는 Preserve client IP 설정 자동 Enable)
● Application LoadBalancer type Target Group의 Health Check 관련하여 아래 내용을 사전에 고려하도록 합니다.
- Timeout이 6초, Success codes가 200~399로 고정(변경 불가)
- Network LoadBalancer의 Private IP로 Target인 Application LoadBalancer의 Health Check를
수행하므로, Application LoadBalancer의 Security Group에 Network LoadBalance의
Private IP 허용 필요
4. 참고
● https://aws.amazon.com/ko/blogs/networking-and-content-delivery/application-load-balancer-type-target-group-for-network-load-balancer/
● https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html