시작하며

쿠버네티스 클러스터 내부의 서비스를 외부에 노출할 때, NodePort나 LoadBalancer 타입의 서비스를 여러 개 만들다 보면 관리가 복잡해진다. Ingress는 HTTP/HTTPS 트래픽을 클러스터 내부의 여러 서비스로 라우팅하는 단일 진입점 역할을 한다.

Ingress 개념

Ingress란 무엇인가?

Ingress는 쿠버네티스 클러스터 외부에서 내부 서비스로의 HTTP/HTTPS 트래픽 라우팅 규칙을 정의하는 오브젝트다. 서비스에 직접 외부 트래픽을 연결하는 것과 달리, Ingress는 다음과 같은 기능을 제공한다.

  • 도메인 기반 가상 호스팅(Virtual Hosting)
  • URL 경로 기반 라우팅
  • TLS/SSL 종료(Termination)
  • 여러 서비스를 하나의 IP(LoadBalancer)로 노출

Ingress Controller

Ingress 오브젝트 자체는 라우팅 규칙만 정의하며, 실제 트래픽 처리는 Ingress Controller가 담당한다. 대표적인 구현체로는 nginx-ingress-controller, AWS ALB Ingress Controller 등이 있다. 클러스터에 Ingress Controller가 설치되어 있지 않으면 Ingress 오브젝트를 생성해도 동작하지 않는다.

Ingress YAML 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port:
              number: 80

위 예시에서 myapp.example.com/api로 들어오는 요청은 api-service로, 나머지 경로는 frontend-service로 라우팅된다.

Service 타입과의 비교

타입특징
ClusterIP클러스터 내부에서만 접근 가능
NodePort노드의 특정 포트로 외부 노출
LoadBalancer클라우드 로드밸런서와 연동
IngressHTTP 레이어 라우팅, 여러 서비스 통합

정리하며

Ingress는 쿠버네티스에서 HTTP/HTTPS 기반 애플리케이션을 외부에 노출할 때 가장 효율적인 방법이다. 여러 서비스를 하나의 외부 IP로 통합하고, 도메인 또는 경로 기반으로 트래픽을 분산할 수 있기 때문에 운영 환경에서 널리 사용된다. Ingress를 사용하려면 반드시 클러스터에 Ingress Controller가 배포되어 있어야 한다.