목차
- 쿠버네티스 Ingress Controller, 뭘 써야 할까요?
- Ingress Controller가 뭔지 먼저 짚고 가요
- 세 가지 Ingress Controller 핵심 특징 비교
- Nginx Ingress Controller
- Traefik Ingress Controller
- HAProxy Ingress Controller
- Ingress Controller 핵심 비교표
- 실전 설치 및 기본 설정 방법
- 1. Nginx Ingress Controller 설치
- 2. Traefik Ingress Controller 설치
- 3. HAProxy Ingress Controller 설치
- ⚠️ 실제로 겪었던 주의사항과 트러블슈팅
- Nginx Ingress에서 자주 만나는 문제들
- Traefik에서 자주 만나는 문제들
- HAProxy Ingress에서 자주 만나는 문제들
- 어떤 상황에서 뭘 골라야 할까요?
- ✅ Nginx Ingress를 선택하세요, 만약...
- ✅ Traefik Ingress를 선택하세요, 만약...
- ✅ HAProxy Ingress를 선택하세요, 만약...
- 자주 묻는 질문 (FAQ)
- Q. 클러스터에 Ingress Controller를 여러 개 동시에 설치할 수 있나요?
- Q. 쿠버네티스 Ingress Controller와 서비스 메시는 다른 건가요?
- Q. Traefik v2와 v3는 많이 다른가요?
- 마무리 — 결국 팀의 상황이 답이에요
쿠버네티스 Ingress Controller, 뭘 써야 할까요?
쿠버네티스를 처음 공부할 때 저도 Ingress Controller 선택 앞에서 한참 멈췄던 기억이 나요. Nginx는 익숙하고, Traefik은 이름이 예쁘고, HAProxy는 오래됐으니 안정적일 것 같고... 근데 막상 뭘 골라야 할지 기준이 없으니까 그냥 남들 쓰는 거 따라갔었거든요.
13년 동안 인프라 엔지니어로 일하면서 홈랩부터 실제 프로덕션 환경까지 세 가지 컨트롤러를 다 써봤습니다. 오늘은 그 경험을 바탕으로 Nginx Ingress, Traefik Ingress, HAProxy Ingress를 솔직하게 비교해 드릴게요. 어떤 상황에서 어떤 걸 골라야 하는지, 실제 겪었던 삽질 포인트까지 전부 공유해 드리겠습니다.
팀에서 쿠버네티스 Ingress Controller를 선택해야 하는데 레퍼런스가 너무 많고 각자 장점만 얘기해서 오히려 더 헷갈리는 상황, 있으시죠? 이 글이 그 혼란을 정리해 드릴 거예요.
쿠버네티스 클러스터에서 외부 트래픽이 Ingress Controller를 통해 각 서비스로 라우팅되는 전체 흐름. Nginx, Traefik, HAProxy 세 가지 컨트롤러의 위치를 비교하여 보여줍니다.
Ingress Controller가 뭔지 먼저 짚고 가요
쉽게 말해서, Ingress(인그레스)는 클러스터 외부에서 내부 서비스로 들어오는 트래픽을 관리하는 쿠버네티스 오브젝트예요. 근데 Ingress 오브젝트 자체는 그냥 규칙 명세서일 뿐이고, 이걸 실제로 실행하는 게 바로 Ingress Controller(인그레스 컨트롤러)입니다.
비유하자면 Ingress는 "3번 테이블 손님은 A 주방으로, 4번 테이블은 B 주방으로" 같은 안내판이고, Ingress Controller는 그 안내판을 읽고 실제로 손님을 안내하는 직원인 거죠. 이 직원 역할을 Nginx가 할 수도 있고, Traefik이나 HAProxy가 할 수도 있는 겁니다.
- Ingress Resource: 라우팅 규칙을 정의하는 쿠버네티스 오브젝트
- Ingress Controller: Ingress 규칙을 실제로 처리하는 프록시/로드밸런서 파드
- 쿠버네티스는 기본으로 Ingress Controller를 제공하지 않아서 직접 설치해야 해요
세 가지 Ingress Controller 핵심 특징 비교
본격 비교 전에 각 컨트롤러의 DNA를 먼저 이해하면 선택이 훨씬 쉬워져요.
Nginx Ingress Controller
가장 널리 쓰이는 컨트롤러입니다. 사실 Nginx Ingress Controller에는 두 가지 버전이 있어요. 쿠버네티스 커뮤니티가 관리하는 ingress-nginx와 Nginx 사가 직접 관리하는 nginx-ingress. 보통 오픈소스 쪽에서 말하는 건 ingress-nginx 쪽이에요. 처음에 저도 이게 헷갈려서 잘못된 걸 설치했던 기억이 있습니다.
- 레퍼런스가 가장 많고 커뮤니티가 활발해요
- Nginx.conf 기반이라 기존 Nginx 경험자에게 친숙함
- Annotation(어노테이션) 기반 세밀한 설정 가능
- 설정 변경 시 nginx reload가 필요한 구조 (무중단 배포 시 주의)
Traefik Ingress Controller
클라우드 네이티브 시대에 맞게 설계된 현대적인 리버스 프록시예요. 처음 Traefik을 접했을 때 "이게 진짜 쿠버네티스랑 찰떡이구나" 싶었거든요. 서비스 디스커버리(Service Discovery)를 자동으로 처리해서 설정 파일을 거의 안 만져도 되는 게 매력이에요.
- 자동 서비스 디스커버리로 설정 최소화
- 내장 대시보드(Dashboard)로 트래픽 시각화 가능
- Let's Encrypt TLS 인증서 자동 발급/갱신 지원
- 미들웨어(Middleware) 체인으로 요청 처리 파이프라인 구성
- CRD(Custom Resource Definition) 기반 설정으로 쿠버네티스 네이티브한 느낌
HAProxy Ingress Controller
HAProxy는 원래 고성능 로드밸런서로 유명하죠. 금융권이나 대용량 트래픽 환경에서 오랫동안 검증된 친구입니다. 쿠버네티스 Ingress Controller로서의 HAProxy는 이 안정성과 성능을 그대로 가져왔어요.
- 로드밸런싱 알고리즘 선택지가 풍부함
- TCP/UDP 레이어 처리에 강점
- 설정 변경 시 무중단 리로드(hitless reload) 지원
- Nginx, Traefik 대비 국내 레퍼런스가 적은 편
Ingress Controller 핵심 비교표
| 항목 | Nginx Ingress | Traefik Ingress | HAProxy Ingress |
|---|---|---|---|
| 설정 방식 | Annotation + ConfigMap | CRD + Annotation | ConfigMap + Annotation |
| 자동 서비스 디스커버리 | 제한적 | ✅ 강력 지원 | 제한적 |
| TLS 자동화 | cert-manager 연동 필요 | ✅ 내장 지원 | cert-manager 연동 필요 |
| 내장 모니터링 UI | ❌ 없음 | ✅ 대시보드 내장 | HAProxy Stats 페이지 |
| 무중단 설정 리로드 | 부분 지원 | ✅ 지원 | ✅ 지원 |
| 학습 난이도 | 낮음 (친숙함) | 중간 | 중간~높음 |
| 커뮤니티/레퍼런스 | 매우 풍부 | 풍부 | 보통 |
| 적합한 환경 | 범용, 소~대규모 | 클라우드 네이티브, 동적 환경 | 고성능, 금융/엔터프라이즈 |
실전 설치 및 기본 설정 방법
자, 이제 실제로 설치해 봅시다. 각 컨트롤러별로 가장 빠른 설치 방법을 보여드릴게요. 제가 홈랩에서 테스트할 때 쓰는 방식이에요.
Helm을 이용한 Nginx, Traefik, HAProxy Ingress Controller 설치 과정과 각 컨트롤러의 파드 구성을 보여주는 다이어그램.
1. Nginx Ingress Controller 설치
Helm을 이용하는 게 제일 편합니다. ingress-nginx 공식 차트를 사용해요.
# 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
설치 후 기본 Ingress 리소스 예시입니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
2. Traefik Ingress Controller 설치
Traefik도 Helm으로 설치하는 게 가장 깔끔해요. 대시보드 활성화 옵션도 같이 넣어줄게요.
# Helm 레포지토리 추가
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
# values 파일 생성 (대시보드 활성화)
cat < traefik-values.yaml
dashboard:
enabled: true
api:
dashboard: true
EOF
# 설치
helm install traefik traefik/traefik \
--namespace traefik \
--create-namespace \
-f traefik-values.yaml
Traefik에서는 IngressRoute라는 CRD를 사용하는 방식이 더 권장돼요.
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: my-app-route
namespace: default
spec:
entryPoints:
- web
routes:
- match: Host(`myapp.example.com`)
kind: Rule
services:
- name: my-app-service
port: 80
3. HAProxy Ingress Controller 설치
# Helm 레포지토리 추가
helm repo add haproxytech https://haproxytech.github.io/helm-charts
helm repo update
# 설치
helm install haproxy-ingress haproxytech/kubernetes-ingress \
--namespace haproxy-controller \
--create-namespace
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
kubernetes.io/ingress.class: "haproxy"
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
⚠️ 실제로 겪었던 주의사항과 트러블슈팅
이론은 여기까지 하고, 제가 실제로 삽질했던 포인트들 정리해 드릴게요. 이게 진짜 중요한 부분이에요.
Nginx Ingress에서 자주 만나는 문제들
⚠️ 문제 1: Annotation 오타로 설정이 안 먹히는 경우
Nginx Ingress는 Annotation에 오타가 있어도 에러를 안 뿜고 그냥 무시해버려요. 처음에 이걸 몰라서 한참 헤맸습니다. 설정이 안 먹힌다 싶으면 아래 명령어로 컨트롤러 로그를 꼭 확인하세요.
kubectl logs -n ingress-nginx \
$(kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}')
⚠️ 문제 2: 413 Request Entity Too Large 에러
파일 업로드 기능이 있는 서비스를 Nginx Ingress 뒤에 놓으면 자주 만나는 에러예요. Annotation으로 해결 가능합니다.
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
Traefik에서 자주 만나는 문제들
⚠️ 문제 1: IngressRoute와 기본 Ingress 혼용 시 충돌
Traefik은 기본 쿠버네티스 Ingress 오브젝트도 처리하고 자체 IngressRoute CRD도 처리해요. 근데 팀 내에서 두 가지 방식을 섞어 쓰면 나중에 관리가 진짜 복잡해집니다. 처음부터 방식을 통일하는 걸 강력 추천해요.
⚠️ 문제 2: 대시보드 외부 노출 시 인증 필수
Traefik 대시보드를 아무 인증 없이 외부에 노출하면 큰일 납니다. BasicAuth 미들웨어라도 꼭 붙여주세요.
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: dashboard-auth
namespace: traefik
spec:
basicAuth:
secret: traefik-dashboard-auth-secret
HAProxy Ingress에서 자주 만나는 문제들
⚠️ 문제 1: ConfigMap 설정 반영 지연
HAProxy Ingress는 ConfigMap을 통한 글로벌 설정 변경이 즉시 반영되지 않는 경우가 있어요. 설정 변경 후 컨트롤러 파드를 재시작해줘야 하는 상황이 생길 수 있습니다.
kubectl rollout restart deployment haproxy-ingress -n haproxy-controller
어떤 상황에서 뭘 골라야 할까요?
제가 내린 결론을 솔직하게 말씀드릴게요. 완벽한 정답은 없지만, 상황별 추천은 꽤 명확해요.
Nginx, Traefik, HAProxy Ingress Controller의 주요 지표(성능, 설정 편의성, 생태계, 모니터링)를 레이더 차트로 비교한 시각화.
✅ Nginx Ingress를 선택하세요, 만약...
- 팀원들이 Nginx에 익숙한 경우
- 레퍼런스와 커뮤니티 지원이 중요한 경우
- 처음 쿠버네티스를 도입하는 팀
- 범용적인 웹 트래픽 처리가 주 목적인 경우
✅ Traefik Ingress를 선택하세요, 만약...
- 마이크로서비스가 자주 추가/삭제되는 동적인 환경
- TLS 인증서 관리를 자동화하고 싶은 경우
- 별도 모니터링 설정 없이 트래픽을 시각화하고 싶은 경우
- 클라우드 네이티브 환경에서 GitOps 방식으로 운영하는 경우
✅ HAProxy Ingress를 선택하세요, 만약...
- 기존에 HAProxy를 잘 알고 있는 팀
- L4(TCP/UDP) 레벨의 세밀한 로드밸런싱이 필요한 경우
- 금융, 통신 등 고성능/고가용성이 핵심인 환경
- 엄격한 엔터프라이즈 지원이 필요한 경우
자주 묻는 질문 (FAQ)
Q. 클러스터에 Ingress Controller를 여러 개 동시에 설치할 수 있나요?
네, 가능합니다. IngressClass 리소스를 이용해서 각 Ingress 오브젝트가 어떤 컨트롤러를 사용할지 지정할 수 있어요. 다만 운영 복잡도가 올라가니까 특별한 이유가 없다면 하나만 쓰는 걸 추천합니다.
Q. 쿠버네티스 Ingress Controller와 서비스 메시는 다른 건가요?
다릅니다. Ingress Controller는 클러스터 외부에서 내부로 들어오는 북-남(North-South) 트래픽을 처리하고, Istio 같은 서비스 메시는 클러스터 내부 서비스 간의 동-서(East-West) 트래픽을 관리해요. 보통 두 가지를 같이 쓰기도 합니다.
Q. Traefik v2와 v3는 많이 다른가요?
Traefik v3에서 일부 API와 설정 방식이 변경됐어요. 특히 일부 CRD API 버전이 바뀌었으니 마이그레이션 시 공식 문서를 꼭 확인하세요. 신규 설치라면 최신 버전을 쓰는 게 좋습니다.
마무리 — 결국 팀의 상황이 답이에요
Nginx, Traefik, HAProxy Ingress Controller의 특징과 적합한 사용 환경을 한눈에 정리한 요약 인포그래픽.
오늘 세 가지 쿠버네티스 Ingress Controller를 비교해 봤는데요. 제 개인적인 결론을 한 줄로 정리하면 이래요.
"처음이라면 Nginx, 클라우드 네이티브 환경이라면 Traefik, 고성능/엔터프라이즈라면 HAProxy."
저는 홈랩에서는 Traefik을 주로 써요. 대시보드가 있어서 트래픽 흐름 보기 편하고, TLS 자동화가 정말 편리하거든요. 근데 실무에서 처음 쿠버네티스를 도입하는 팀이라면 역시 Nginx가 제일 무난합니다. 레퍼런스가 많아서 문제 생겼을 때 해결하기 수월하니까요.
💡 팁 하나 더! 어떤 Ingress Controller를 선택하든 cert-manager와 함께 쓰면 TLS 인증서 관리가 훨씬 수월해집니다. cert-manager 설정 방법은 다음 글에서 자세히 다룰 예정이에요.
궁금한 점이나 다른 삽질 경험이 있으시면 댓글로 공유해 주세요. 같이 고민해 봅시다! 🎉
'IT > k8s' 카테고리의 다른 글
| [k8s] ArgoCD 프로덕션 환경 GitOps 베스트 프랙티스: 안정적인 배포와 보안 강화 (0) | 2026.04.30 |
|---|---|
| [k8s] 쿠버네티스 영구 스토리지: Longhorn vs Rook Ceph 비교 및 선택 가이드 (0) | 2026.04.27 |
| [k8s] Helm Chart 베스트 프랙티스: 프로덕션 배포 및 관리 전략 (0) | 2026.04.27 |
| [k8s] ArgoCD 멀티 클러스터 GitOps 배포 및 관리 전략 (1) | 2026.04.20 |
| [K8s] 쿠버네티스 Ingress Controller 비교: Nginx, Traefik, Gateway API 선택 가이드 (0) | 2026.04.18 |
| [k8s] kubectl 플러그인 추천: 생산성을 높이는 필수 도구 활용법 (0) | 2026.04.18 |