
GWLB = “투명 게이트웨이 + L3/L4 로드밸런서”를 합친 서비스. GENEVE(UDP/6081) 캡슐화를 써서 가상 어플라이언스(방화벽/IDS/IPS/DPI 등) 로 트래픽을 인라인(핑거 인 더 와이어)으로 보냈다가 다시 돌려보내며, Gateway Load Balancer Endpoint(GWLBE) 로 VPC 간/계정 간에도 쉽게 삽입할 수 있음 (AWS Documentation)
무엇을 하나요?
GWLB는 모든 포트의 IP 패킷(L3) 을 받아 타깃 어플라이언스로 분산하고, 트래픽 수요에 맞춰 수평 확장합니다. 어플라이언스와는 GENEVE(UDP 6081) 로 트래픽을 캡슐화/복호화해 주고받음 (AWS Documentation)
GWLBE(= Gateway Load Balancer Endpoint)
PrivateLink 기반 VPC Endpoint 타입으로, 소비자 VPC의 라우트 테이블에서 다음 홉을 GWLBE로 지정하면 트래픽이 제공자 VPC의 GWLB를 거쳐 어플라이언스로 전달됩니다(크로스 VPC/계정 아키텍처). (AWS Documentation)
대표 유즈케이스
North–South 인입/이그레스 검사, East–West VPC 간 트래픽 검사, 서드파티 방화벽/IDS/IPS/DLP/DPI 인라인 삽입 등. (AWS Documentation)
Listener/Target Group(프로토콜: GENEVE, 포트 6081)
GWLB는 GENEVE로 원 패킷을 캡슐화해 Target(어플라이언스)로 보냄. TLV 필드에 메타데이터를 실어 전달(어플라이언스가 파싱). (AWS Documentation)
Health Check
Target Group 기본 Health Check = TCP(프로토콜/파라미터 제약 존재). 어플라이언스의 상태를 헬스체크 포트로 확인. (awslabs.github.io)
Flow Stickiness(연결 고정)
기본은 5-tuple(SRC/DST IP, SRC/DST Port, L4 Protocol). 필요 시 3-tuple 또는 2-tuple로 변경 가능. 단, Idle timeout 커스텀은 5-tuple일 때만 가능(UDP는 120s 고정). (AWS Documentation)
Cross-Zone Load Balancing
기본 비활성화(false). 활성화 시 모든 AZ의 Healthy 타깃으로 분산 가능(교차-AZ 과금 고려). (AWS Documentation)
MTU 주의
GWLB 인터페이스 MTU는 최대 8,500바이트. 캡슐화 오버헤드 고려하여 어플라이언스 MTU를 조정하세요. (AWS Documentation)
(Consumer VPC) (Provider VPC)
App Subnet ──route──▶ GWLBE ──PrivateLink──▶ GWLB ──GENEVE──▶ Appliances(EC2)
▲ │
└───────────────────────(Decap/Return)◀───────────────┘
Transit Gateway 연동(East–West 검사): Appliance Mode(대칭 라우팅 보장)를 활성화하세요. 비대칭 흐름은 상태풀 어플라이언스에서 문제를 유발(특히 5-tuple 권장). (AWS Documentation)
One-Arm / Two-Arm 방화벽
요구사항(SSL/TLS 인스펙션, 이그레스/인그레스)과 네트워크 단순성 간 트레이드오프를 고려해 선택. AWS 베스트 프랙티스 문서에 패턴이 정리돼 있음. (Amazon Web Services, Inc.)
다중 AZ
각 AZ에 GWLBE를 만들고, 필요 시 GWLB Cross-Zone을 고려하여 AZ별 수용량 불균형을 완화하되 교차-AZ 과금을 감안. (Amazon Web Services, Inc.)
Stickiness 선택 가이드
Idle Timeout
TCP 60–6000초로 조정 가능(기본 350초). 장수명 연결은 Keep-Alive 조정 권장. UDP는 120초 고정. (AWS Documentation)
대칭 라우팅
RT, TGW, GWLBE 배치를 AZ 대칭으로 하고, Appliance Mode로 유입/유출 경로 일치. (AWS Documentation)
장애/스케일 시나리오
Cross-Zone을 끄면 AZ 내 타깃만 사용, 켜면 모든 AZ Healthy 타깃으로 분산(과금 주의). 어플라이언스/AZ 장애 시 동작을 미리 테스트. (AWS Documentation)
# 1) Target Group (GENEVE/6081)
aws elbv2 create-target-group \
--name tg-gwlb \
--protocol GENEVE --port 6081 \
--vpc-id vpc-xxxxxxxx \
--target-type instance
# 2) GWLB 생성
aws elbv2 create-load-balancer \
--name gwlb-inspection \
--type gateway \
--subnets subnet-azA subnet-azB
# 3) 리스너 연결
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:...:loadbalancer/gateway/gwlb-inspection/... \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:...:targetgroup/tg-gwlb/...
# 4) Endpoint Service(제공자 VPC)로 GWLB 게시
aws ec2 create-vpc-endpoint-service-configuration \
--gateway-load-balancer-arns arn:aws:elasticloadbalancing:...:loadbalancer/gateway/gwlb-inspection/...
# 5) 소비자 VPC에서 GWLBE 생성 후, App Subnet 라우트의 Next Hop을 GWLBE로
aws ec2 create-vpc-endpoint \
--vpc-id vpc-consumer \
--service-name com.amazonaws.vpce.<region>.vpce-svc-xxxx \
--vpc-endpoint-type GatewayLoadBalancer \
--subnet-ids subnet-app-azA subnet-app-azB
라우팅: 검사 대상 프리픽스(예: 0.0.0.0/0 또는 특정 CIDR)를 vpce-xxxx(GWLBE)로 가리키도록 Route Table을 수정.
보안: 어플라이언스 인스턴스는 UDP/6081(GENEVE) 수신 가능해야 함. (Amazon Web Services, Inc.)