AWS Ingress 운영 방식 2가지
Posted by Albert 5Day 7Hour 48Min 10Sec ago [2025-12-10]
① AWS Load Balancer Controller(ALB Ingress Controller) 사용 → ALB 생성됨 (가장 많이 사용됨)
② NGINX Ingress Controller + AWS NLB 사용 → NLB 생성됨 (고성능 TCP/UDP 필요 시 사용)
각 방식은 구조가 완전히 다르기 때문에 AWS 운영에서는 어떤 방식으로 갈지 먼저 결정해야 해.
아래에서 두 방식 모두 실제 설정 방법 & 예시 YAML까지 상세하게 보여줄게.
1. AWS Load Balancer Controller(ALB) 방식 (가장 많이 사용되는 방식)
아키텍처
[Internet] ↓ [AWS ALB] ← ALB는 자동 생성됨 ↓ [Ingress] ↓ [Service ClusterIP] ↓ [Pods]
특징
- ALB가 L7(HTTP/HTTPS)로 직접 라우팅
- 도메인 기반 라우팅
- path 기반 라우팅
- WAF, Shield, ACM 인증서 적용 가능 (장점 매우 큼)
- 클라우드 네이티브 방식 → AWS에서 공식적으로 권장
1-A. AWS Load Balancer Controller 설치 과정
① IAM Role 생성
AWS CLI:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json
② ServiceAccount 생성 (IRSA)
eksctl create iamserviceaccount \ --cluster your-cluster \ --namespace kube-system \ --name aws-load-balancer-controller \ --attach-policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \ --approve
③ Helm으로 Controller 설치
helm repo add eks https://aws.github.io/eks-charts helm repo update helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --set clusterName=your-cluster \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
1-B. ALB Ingress 리소스 예시 (도메인 2개)
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
rules:
- host: aaa.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: aaa-service
port:
number: 80
- host: bbb.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bbb-service
port:
number: 80)
ALB가 자동 생성된다 → 1개의 ELB가 만들어짐
→ A 레코드:
aaa.com → ALB DNS bbb.com → ALB DNS
HTTPS 적용하기 (ACM 인증서)
metadata:
annotations:
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:region:account:cert/xxx
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
AWS에서 가장 많이 쓰는 방식은 ALB (HTTP/HTTPS) + ALB Ingress Controller 조합이야.
2. NGINX Ingress Controller + AWS NLB 사용
아키텍처
[Internet] ↓ [AWS NLB] ← 자동 생성 ↓ [NGINX Ingress Controller Service: LoadBalancer] ↓ [Ingress 규칙] ↓ [Service ClusterIP → Pods]
특징
- NLB는 L4(초고성능 TCP/UDP)
- HTTP 성능도 매우 높음
- WebSocket, gRPC 모두 안정적
- TLS termination을 NGINX에서 처리
- 클라우드 의존성 ↓ (멀티클라우드 대비 가능)
2-A. NGINX Ingress Controller 설치
Helm:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx --create-namespace \ --set controller.service.type=LoadBalancer \ --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"="nlb"
이렇게 하면 AWS에서 NLB가 자동 생성됨.
2-B. Ingress 예시 (aaa.com / bbb.com)
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: aaa.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: aaa-service
port:
number: 80
- host: bbb.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bbb-service
port:
number: 80
이 경우 DNS는:
aaa.com → NLB DNS 주소 bbb.com → NLB DNS 주소
어떤 방식이 실제로 더 많이 쓰일까?
방식용도장점AWS ALB Ingress Controller (L7)일반 웹서비스WAF/ACM 연동, 도메인 라우팅 강력NGINX Ingress + NLB (L4)고성능 트래픽, gRPC, WebSocket성능↑, 유연성↑
AWS 기반 일반 웹 서비스는 80% 이상이 ALB Ingress Controller 사용
대규모 트래픽 또는 커스텀 NGINX 설정이 필요하면 NLB + NGINX 조합
결론
AWS 운영 기준
가장 추천되는 방식
→ AWS Load Balancer Controller(ALB)
→ 인증서 ACM, 외부 도메인 라우팅, WAF, Shield 사용 가능해서 운영 최적
고성능 / 커스텀 Proxy 필요 시
→ NGINX Ingress + NLB