Kubernetes Ingress와 Gateway API
클러스터 외부 트래픽을 내부 서비스로 라우팅하는 K8s 표준
Kubernetes Ingress는 클러스터 외부 HTTP(S) 트래픽을 내부 서비스로 라우팅하는 리소스다. Ingress Controller(Nginx, Traefik, Kong)가 실제 처리를 담당하고, cert-manager가 TLS 인증서를 자동 관리한다. K8s 1.28+에서는 Gateway API가 Ingress를 대체하는 새 표준으로 자리잡고 있다.
개념
Kubernetes에서 외부 클라이언트가 클러스터 내부 서비스에 접근하려면 진입점이 필요하다. Ingress는 HTTP(S) 트래픽을 클러스터 내부 서비스로 라우팅하는 규칙을 정의하는 K8s 리소스다. Nginx 같은 리버스 프록시가 하던 역할을 K8s 선언적 방식으로 추상화한 것이다.
외부 클라이언트
↓
Ingress Controller (Nginx / Traefik / Kong)
↓ 라우팅 규칙 적용
서비스 A / 서비스 B / 서비스 C
Ingress 리소스 vs Ingress Controller
이 둘은 다른 것이다.
Ingress 리소스는 라우팅 규칙을 선언하는 K8s 오브젝트다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- host: api.datco.kr
http:
paths:
- path: /api/hr
pathType: Prefix
backend:
service:
name: hr-service
port:
number: 80
Ingress Controller는 이 규칙을 읽어서 실제로 트래픽을 처리하는 컴포넌트다. K8s에 기본 내장되어 있지 않아서 별도로 설치해야 한다.
주요 Ingress Controller
| Controller | 특징 |
|---|---|
| Nginx Ingress | 가장 널리 쓰임. 안정적. 커스터마이징은 annotation 기반 |
| Traefik | 자동 서비스 디스커버리. 설정이 간결. Let's Encrypt 내장 |
| Kong | API Gateway 기능 내장 (Rate Limit, 인증 플러그인). 무거움 |
| AWS ALB Controller | EKS에서 AWS ALB와 연동. 클라우드 네이티브 |
Nginx Ingress가 채택률이 가장 높다. Kong은 API-Gateway 기능이 필요할 때 선택한다.
cert-manager
TLS 인증서를 자동으로 발급·갱신하는 K8s 컨트롤러다. Let's Encrypt와 연동해서 HTTPS 인증서를 자동 관리한다. 인증서 만료 전에 자동 갱신하므로 수동 개입이 필요 없다.
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: api-datco-kr
spec:
secretName: api-datco-kr-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- api.datco.kr
Traefik은 cert-manager 없이 자체적으로 Let's Encrypt를 처리할 수 있다.
Gateway API
K8s 1.28+에서 Ingress를 대체하는 새 표준이다. 2023년 GA(Generally Available)로 승격됐다.
Ingress의 한계
- 표현력이 낮아서 고급 라우팅(헤더 기반, 가중치 기반)을 annotation으로 구현 → Controller마다 annotation이 달라 이식성이 없음
- 단일 리소스로 모든 규칙 관리 → 멀티 팀 환경에서 충돌 발생
- HTTP(S)만 지원 (TCP, gRPC 등 미지원)
Gateway API 리소스 구조
GatewayClass → 어떤 Controller를 쓸지 정의 (클러스터 관리자)
↓
Gateway → 실제 진입점 정의, 포트·TLS 설정 (인프라 팀)
↓
HTTPRoute → 라우팅 규칙 정의 (서비스 팀)
역할에 따라 리소스를 분리해서 멀티 팀 환경에 적합하다. 서비스 팀이 인프라 팀의 Gateway를 공유하면서 자신의 HTTPRoute만 관리할 수 있다.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: hr-route
spec:
parentRefs:
- name: main-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api/hr
backendRefs:
- name: hr-service
port: 80
Ingress vs Gateway API
| Ingress | Gateway API | |
|---|---|---|
| 표현력 | 낮음 (annotation 의존) | 높음 (선언적) |
| 이식성 | 낮음 (Controller마다 annotation 다름) | 높음 (표준 스펙) |
| 역할 분리 | 없음 | GatewayClass / Gateway / Route |
| 프로토콜 | HTTP(S)만 | HTTP, TCP, gRPC, TLS |
| 성숙도 | 안정적 | GA (1.28+), 빠르게 확산 중 |
신규 K8s 프로젝트라면 Gateway API로 시작하는 게 낫다. 기존 Ingress를 쓰고 있다면 당장 마이그레이션할 이유는 없다.
더 보기
- Service-Mesh — 클러스터 내부 서비스 간 통신 처리 (Ingress와 역할 분리)
- API-Gateway — Ingress와 함께 쓰이는 인증·인가 레이어
- Nginx — Nginx Ingress Controller의 기반 기술