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




LIST

Copyright © 2014 visionboy.me All Right Reserved.