Kubernetes Ingress와 Gateway API

클러스터 외부 트래픽을 내부 서비스로 라우팅하는 K8s 표준

Kubernetes Ingress는 클러스터 외부 HTTP(S) 트래픽을 내부 서비스로 라우팅하는 리소스다. Ingress Controller(Nginx, Traefik, Kong)가 실제 처리를 담당하고, cert-manager가 TLS 인증서를 자동 관리한다. K8s 1.28+에서는 Gateway API가 Ingress를 대체하는 새 표준으로 자리잡고 있다.

Gateway

개념

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의 기반 기술
sunshinemoon · 2026