-
ALB vs NLB 개념, 차이점, 쿠버네티스 연동 정리AWS & GCP 2026. 4. 10. 16:27
1. 개요
AWS에는 크게 세 가지 로드밸런서가 있습니다. 이 중 현재 가장 많이 쓰이는 두 가지가 ALB(Application Load Balancer) 와 NLB(Network Load Balancer) 입니다.
로드밸런서 출시 OSI 계층 주요 프로토콜 CLB (Classic LB) 2009 4 / 7 HTTP, HTTPS, TCP ALB (Application LB) 2016 7계층 (애플리케이션) HTTP, HTTPS, gRPC NLB (Network LB) 2017 4계층 (전송) TCP, UDP, TLS CLB는 레거시로 신규 사용은 권장되지 않습니다.
2. ALB (Application Load Balancer)
개념
ALB는 OSI 7계층(애플리케이션 계층) 에서 동작하는 로드밸런서입니다. HTTP 요청의 내용(URL 경로, 헤더, 메서드, 쿼리스트링 등)을 분석하여 트래픽을 라우팅합니다. 흔히 "AWS 위의 NGINX" 라고 표현하기도 합니다.
주요 특징
- 콘텐츠 기반 라우팅: URL 경로(
/api/*,/web/*), 호스트명, HTTP 헤더, 메서드, 쿼리 파라미터 기반 라우팅 - AWS WAF 통합: 웹 방화벽을 연결하여 악성 트래픽 차단 가능
- 인증 지원: Amazon Cognito, OpenID Connect(OIDC) 기반 인증 처리
- SSL/TLS 종료(Termination): 로드밸런서에서 HTTPS를 복호화하고 내부는 HTTP로 전달
- Lambda 대상(Target) 지원: EC2, IP, Lambda 함수를 대상으로 설정 가능
- 고정 응답 / 리다이렉트: 별도 서버 없이 301/302 리다이렉트, 고정 응답 반환 가능
- WebSocket, HTTP/2, gRPC 지원
동적 IP (주의사항)
ALB는 고정 IP 주소를 제공하지 않습니다. DNS 이름(CNAME)을 통해 접근하며, 내부 IP는 동적으로 변경될 수 있습니다.
3. NLB (Network Load Balancer)
개념
NLB는 OSI 4계층(전송 계층) 에서 동작하는 로드밸런서입니다. 패킷의 IP 주소와 포트만 보고 라우팅하므로 HTTP 내용을 분석하지 않습니다. 초저지연(Ultra-low Latency) 과 고처리량(High Throughput) 이 핵심입니다.
주요 특징
- 초저지연: 패킷을 거의 그대로 전달하므로 처리 시간이 매우 짧습니다.
- 고처리량: 초당 수백만 건의 요청 처리 가능
- 정적 IP 지원: 가용 영역(AZ)별로 고정 IP 주소 또는 Elastic IP 할당 가능
- 소스 IP 보존: 클라이언트의 실제 IP를 백엔드까지 그대로 전달
- 다양한 프로토콜: TCP, UDP, TLS 지원 (HTTP가 아닌 모든 프로토콜)
- AWS PrivateLink 지원: VPC 간 안전한 서비스 노출에 사용
- WAF 미지원: 7계층을 보지 않으므로 WAF 연동 불가
4. 핵심 차이점 비교
항목 ALB NLB OSI 계층 7계층 (애플리케이션) 4계층 (전송) 프로토콜 HTTP, HTTPS, gRPC TCP, UDP, TLS 라우팅 방식 경로, 헤더, 호스트, 메서드 등 콘텐츠 기반 IP + Port 기반 (콘텐츠 무관) 지연 시간 낮음 매우 낮음 (훨씬 빠름) 처리량 높음 매우 높음 (초당 수백만 요청) 정적 IP 미지원 (DNS 기반) 지원 (AZ별 고정 IP) 소스 IP 보존 미지원 (X-Forwarded-For 헤더 사용) 지원 WAF 통합 지원 미지원 인증 (Cognito, OIDC) 지원 미지원 Lambda 대상 지원 미지원 SSL 종료 지원 지원 (Pass-through도 가능) PrivateLink 미지원 지원 월 비용 (기본) ~$23.90 ~$22.46
5. 언제 사용하는가
ALB를 선택하는 경우
- 일반 웹 애플리케이션 (HTTP/HTTPS 기반)
- 마이크로서비스 / 컨테이너 환경 — 하나의 ALB로 경로별 다수 서비스 라우팅
- 서버리스(Lambda) 와 연동이 필요한 경우
- WAF, Cognito 인증 등 보안 기능이 필요한 경우
- SSL 종료 를 로드밸런서에서 처리하고 싶은 경우
- 요약: HTTP 기반 대부분의 서비스에 기본 선택
NLB를 선택하는 경우
- TCP/UDP 기반 프로토콜 사용 (게임 서버, IoT, 데이터베이스 프록시 등)
- 극저지연 이 필요한 실시간 서비스 (주가 데이터, 실시간 스트리밍 등)
- 정적 IP 가 필요한 경우 (방화벽 화이트리스트 등록 등)
- 소스 IP 보존 이 필요한 경우 (클라이언트 IP를 그대로 받아야 하는 경우)
- AWS PrivateLink 를 통해 서비스를 외부에 노출할 경우
- 예측 불가능한 트래픽 급증 — NLB는 예열(Pre-warming) 없이 즉시 스케일
- 요약: 비HTTP, 고성능, 고정 IP, PrivateLink가 필요한 경우
6. 쿠버네티스(EKS) 환경에서의 ALB / NLB
AWS Load Balancer Controller (LBC)
EKS(Kubernetes)에서 AWS 로드밸런서를 자동으로 프로비저닝해주는 컨트롤러입니다. Kubernetes 리소스 타입에 따라 ALB 또는 NLB 가 자동 생성됩니다.
Kubernetes 리소스 → AWS Load Balancer Controller → AWS 로드밸런서 생성Kubernetes 리소스 생성되는 AWS 로드밸런서 IngressALB (Application Load Balancer) Service (type: LoadBalancer)NLB (Network Load Balancer) Gateway(v2.14.0+)ALB (Gateway API 지원) v2.5 이후부터
type: LoadBalancer서비스는 기본적으로 NLB가 생성됩니다. (기존 Classic LB 대체)
ALB 설정 — Ingress 리소스
Ingress리소스를 생성하면 ALB가 자동으로 프로비저닝됩니다.ingressClassName: alb와 어노테이션으로 동작을 제어합니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: alb.ingress.kubernetes.io/scheme: internet-facing # 인터넷 공개 여부 (internal | internet-facing) alb.ingress.kubernetes.io/target-type: ip # 대상 타입 (ip | instance) alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:... # HTTPS 인증서 alb.ingress.kubernetes.io/healthcheck-path: /health # 헬스체크 경로 alb.ingress.kubernetes.io/wafv2-acl-arn: arn:aws:wafv2:... # WAF 연동 spec: ingressClassName: alb rules: - host: api.example.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 80 - path: /web pathType: Prefix backend: service: name: web-service port: number: 80주요 ALB 어노테이션
어노테이션 설명 alb.ingress.kubernetes.io/schemeinternet-facing(공개) /internal(내부)alb.ingress.kubernetes.io/target-typeip(Pod 직접 타겟) /instance(노드 경유)alb.ingress.kubernetes.io/certificate-arnACM SSL 인증서 ARN alb.ingress.kubernetes.io/healthcheck-path헬스체크 경로 alb.ingress.kubernetes.io/wafv2-acl-arnAWS WAF ACL ARN alb.ingress.kubernetes.io/group.name여러 Ingress를 하나의 ALB로 통합 alb.ingress.kubernetes.io/listen-ports리스너 포트 설정 (예: [{"HTTP":80},{"HTTPS":443}])
NLB 설정 — Service (LoadBalancer) 리소스
type: LoadBalancer인 Service를 생성하면 NLB가 자동으로 프로비저닝됩니다.apiVersion: v1 kind: Service metadata: name: my-nlb-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" # LBC가 처리 service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip" # Pod IP 직접 타겟 service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing" # 인터넷 공개 service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true" spec: type: LoadBalancer loadBalancerClass: service.k8s.aws/nlb # v2.5+에서 명시적 지정 selector: app: my-app ports: - port: 3306 targetPort: 3306 protocol: TCP주요 NLB 어노테이션
어노테이션 설명 service.beta.kubernetes.io/aws-load-balancer-typeexternal(LBC 관리) /nlbservice.beta.kubernetes.io/aws-load-balancer-nlb-target-typeip(Pod 직접) /instance(노드 경유)service.beta.kubernetes.io/aws-load-balancer-schemeinternet-facing/internalservice.beta.kubernetes.io/aws-load-balancer-eip-allocationsElastic IP 할당 (정적 IP) service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled크로스 존 로드밸런싱 활성화
Target Type: ip vs instance
항목 ip모드instance모드트래픽 경로 LB → Pod (직접) LB → 노드 NodePort → Pod 네트워크 홉 1회 2회 Fargate 지원 가능 불가 소스 IP 보존 가능 kube-proxy 설정 필요 권장 여부 권장 레거시 호환
7. 아키텍처 흐름
ALB + Ingress (HTTP 멀티 서비스)
인터넷 ↓ ALB (L7) — /api → api-service Pod — /web → web-service Pod — /admin → admin-service PodNLB + LoadBalancer Service (TCP/고성능)
인터넷 ↓ NLB (L4) — TCP:3306 → MySQL Pod
8. 요약
상황 선택 일반 HTTP/HTTPS 웹 서비스 ALB URL 기반 멀티 서비스 라우팅 (MSA) ALB WAF / 인증 / Lambda 연동 필요 ALB TCP/UDP 기반 서비스 NLB 초저지연, 고처리량 필요 NLB 정적 IP / Elastic IP 필요 NLB PrivateLink 서비스 노출 NLB Kubernetes Ingress 리소스 → ALB 자동 생성 Kubernetes Service (LoadBalancer) → NLB 자동 생성 기본 원칙: HTTP 서비스라면 ALB부터 시작합니다. 비HTTP 프로토콜, 극저지연, 정적 IP 등 특수 요건이 생기면 NLB로 전환합니다.
9. GKE (Google Kubernetes Engine) 환경에서의 로드밸런서
개요
GKE는 AWS EKS와 마찬가지로 Kubernetes 리소스 타입에 따라 GCP의 로드밸런서를 자동으로 생성합니다. 단, EKS와 달리 로드밸런서 컨트롤러가 GKE 관리형 서비스에 내장되어 있어 별도로 설치할 필요가 없습니다.
Kubernetes 리소스 생성되는 GCP 로드밸런서 OSI 계층 AWS 대응 IngressApplication Load Balancer (ALB) 7계층 ALB Service (type: LoadBalancer)Passthrough Network Load Balancer 4계층 NLB Gateway(권장, GA)Application Load Balancer (ALB) 7계층 ALB GKE vs EKS 핵심 차이: GKE는 컨트롤러가 내장되어 별도 설치 불필요. EKS는 AWS Load Balancer Controller를 직접 설치해야 합니다.
GKE L7 Application Load Balancer — Ingress / Gateway
Ingress (유지보수 모드 — 신규는 Gateway 권장)
GKE에서
Ingress리소스를 생성하면 Google Cloud Application Load Balancer (L7) 가 자동으로 프로비저닝됩니다.kubernetes.io/ingress.class어노테이션으로 외부/내부를 구분합니다.ingress.class값생성 로드밸런서 미설정 또는 gce외부 ALB (인터넷 공개, 글로벌) gce-internal내부 ALB (VPC 내부 전용) apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.class: "gce" # 외부 ALB (기본값) # kubernetes.io/ingress.class: "gce-internal" # 내부 ALB kubernetes.io/ingress.global-static-ip-name: "my-static-ip" # 고정 IP spec: rules: - host: api.example.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 80 - path: /web pathType: Prefix backend: service: name: web-service port: number: 80GKE Ingress는 현재 유지보수 모드입니다. 신규 기능은 추가되지 않으며, Gateway API로 마이그레이션을 권장합니다.
Gateway API (현재 권장)
GatewayClass를 지정하여 로드밸런서 유형을 결정합니다.GatewayClass 설명 gke-l7-global-external-managed외부 글로벌 ALB (권장) gke-l7-regional-external-managed외부 리전 ALB gke-l7-rilb내부 ALB gke-l4-netlb외부 L4 NLB apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: gke-l7-global-external-managed listeners: - name: https protocol: HTTPS port: 443 tls: certificateRefs: - kind: Secret name: my-tls-secret --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: my-route spec: parentRefs: - name: my-gateway rules: - matches: - path: type: PathPrefix value: /api backendRefs: - name: api-service port: 80주요 ALB (GKE) 특징
- 글로벌 분산: Google의 엣지 네트워크(Google Front End)에서 글로벌하게 트래픽 처리
- Container-Native Load Balancing: NEG(Network Endpoint Group)를 통해 노드를 거치지 않고 Pod IP로 직접 트래픽 전달 → 불필요한 네트워크 홉 제거
- BackendConfig CRD: 헬스체크, Cloud Armor(WAF), 타임아웃 등 고급 설정을 별도 리소스로 분리 관리 (AWS의 어노테이션 방식과 차이)
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: my-backend-config spec: healthCheck: checkIntervalSec: 15 port: 8080 type: HTTP requestPath: /health cdn: enabled: true securityPolicy: name: my-cloud-armor-policy # Cloud Armor (WAF) timeoutSec: 40
GKE L4 Network Load Balancer — Service (LoadBalancer)
type: LoadBalancerService를 생성하면 Passthrough Network Load Balancer (L4) 가 자동으로 생성됩니다. 패킷을 변경 없이 그대로 전달하므로 소스 IP 보존이 가능합니다.외부 NLB (External)
apiVersion: v1 kind: Service metadata: name: my-nlb-service annotations: cloud.google.com/l4-rbs: "enabled" # 백엔드 서비스 기반 NLB (권장) spec: type: LoadBalancer externalTrafficPolicy: Local # 소스 IP 보존 selector: app: my-app ports: - port: 80 targetPort: 8080 protocol: TCP내부 NLB (Internal)
apiVersion: v1 kind: Service metadata: name: my-internal-nlb annotations: networking.gke.io/load-balancer-type: "Internal" # 내부 NLB spec: type: LoadBalancer selector: app: my-app ports: - port: 3306 targetPort: 3306 protocol: TCP주요 NLB (GKE) 어노테이션
어노테이션 설명 networking.gke.io/load-balancer-type: "Internal"내부 NLB 지정 cloud.google.com/l4-rbs: "enabled"백엔드 서비스 기반 외부 NLB (권장) networking.gke.io/weighted-load-balancing: pods-per-nodePod 수 기반 가중 분산 networking.gke.io/transparent-health-checker투명 헬스체크 활성화 externalTrafficPolicy동작 방식값 동작 소스 IP 보존 Cluster(기본)모든 노드에 분산, 노드 간 재전달 가능 미보존 LocalPod가 있는 노드에만 전달 보존
EKS vs GKE 로드밸런서 주요 비교
항목 AWS EKS Google GKE 컨트롤러 설치 별도 설치 필요 (AWS LBC) GKE 관리형 내장 L7 리소스 Ingress→ ALBIngress/Gateway→ ALBL4 리소스 Service (LoadBalancer)→ NLBService (LoadBalancer)→ NLB설정 방식 어노테이션 중심 어노테이션 + BackendConfig CRD Pod 직접 타겟 ip 모드 (NEG와 유사) NEG (Network Endpoint Group) 기본 공개 여부 internal (내부) external (외부) WAF 연동 AWS WAF (Ingress 어노테이션) Cloud Armor (BackendConfig CRD) 인증서 관리 ACM (외부 발급) ManagedCertificate (자동 발급) L7 권장 방식 Ingress (안정) Gateway API (권장, Ingress는 유지보수 모드)
참고 자료
- 콘텐츠 기반 라우팅: URL 경로(