본문 바로가기
쿠버네티스

[쿠버네티스] Ingress, Ingress Controller란?

by woo0doo 2025. 4. 16.

 

Ingress란?

 

 

정의 및 개념

  • Ingress는 Kubernetes의 API 객체 중 하나로, 클러스터 외부에서 들어오는 HTTP 및 HTTPS 트래픽을 클러스터 내부의 서비스로 라우팅하는 역할을 담당합니다.
  • 기본적으로 Ingress는 여러 서비스에 대해 하나의 외부 엔드포인트(예: 도메인이나 IP)를 제공하며, 이를 통해 호스트 기반 또는 경로 기반 라우팅을 설정할 수 있습니다.

주요 기능

  • 라우팅 규칙 설정:
    Ingress 리소스를 사용하면 특정 도메인, 서브도메인 또는 URL 경로에 따라 요청을 분기시킬 수 있습니다. 예를 들어, example.com/api 요청은 API 서버로, example.com/web 요청은 웹 애플리케이션 서버로 전달하도록 설정할 수 있습니다.
  • SSL/TLS 종료:
    HTTPS 트래픽에 대한 암호화 해제를 Ingress 단계에서 처리할 수 있습니다. 즉, 클라이언트와의 통신은 SSL/TLS를 사용하지만, 백엔드 서비스로 전달되는 트래픽은 암호화되지 않을 수 있도록 설정할 수 있습니다.
  • 추가 기능 지원:
    URL 재작성, 리다이렉션, 기본 인증, OAuth 등 다양한 기능을 어노테이션(annotation)이나 설정을 통해 구현할 수 있습니다.

 

Ingress는 위와 같은 기능들에 대해 정의해둔 규칙들을 정의해둔 리소스이고, 이를 실제 동작하기 위해서는 인그레스 컨트롤러가 필요합니다.

Ingress가 해결하는 문제

  • 외부 트래픽 접근 문제 해결:
    클러스터 내부의 서비스들은 보통 ClusterIP를 통해 내부 네트워크에서만 접근할 수 있습니다. 그러나 Ingress를 사용하면 외부에서 클러스터 내부의 특정 서비스로 들어오는 요청을 제어할 수 있습니다.
  • 다중 도메인/경로 기반 라우팅:
    하나의 외부 IP 또는 도메인으로 여러 서비스에 대한 요청을 구분할 수 있습니다. 예를 들어, example.com/api는 API 서버로, example.com/web는 웹 애플리케이션 서버로 라우팅하는 방식입니다.

사용 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80
      - path: /web
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

위 예제는 example.com 도메인에서 /api로 들어오는 요청은 api-service로, /web 요청은 web-service로 라우팅합니다.

 


Ingress Controller란?

정의 및 역할

  • Ingress Controller는 클러스터 내에서 Ingress 리소스에 정의된 규칙을 모니터링하고, 이를 실제 네트워크 트래픽에 적용하는 실행 주체입니다.
  • Ingress Controller는 Ingress 리소스에 따라 트래픽을 라우팅하기 위해 프록시 서버(주로 NGINX, HAProxy, Traefik 등)를 동적으로 구성하고 관리합니다.

주요 기능

  • 리소스 감시 및 동적 구성:
    Ingress Controller는 Kubernetes API 서버를 통해 Ingress 리소스의 생성, 수정, 삭제를 감시하며, 이에 따라 프록시 서버나 로드 밸런서의 구성을 실시간으로 업데이트합니다.
  • 트래픽 라우팅:
    외부에서 들어오는 HTTP/HTTPS 요청을 설정된 라우팅 규칙에 따라 적절한 내부 서비스로 전달합니다.
  • SSL/TLS 관리:
    Ingress에 포함된 SSL/TLS 설정에 맞춰 암호화된 트래픽을 복호화하거나, 필요한 경우 재암호화하여 보안을 유지할 수 있습니다.
  • 추가 기능:
    URL 재작성, 리다이렉션, 인증 및 기타 보안 기능을 Ingress 리소스의 어노테이션 등을 통해 제어합니다.

동작 방식

  1. Ingress 리소스 감시:
    클러스터 내의 Ingress 리소스를 지속적으로 감시하며, 변경 사항을 탐지합니다.
  2. 프록시 서버 구성:
    탐지된 Ingress 규칙에 따라 프록시 서버(NGINX 등)를 설정하고, 이 설정에 기반해 요청을 올바른 백엔드 서비스로 전달합니다.
  3. 실시간 업데이트:
    클러스터 내 서비스의 상태나 Ingress 리소스 변경 시, Ingress Controller는 이를 즉시 반영하여 트래픽 흐름에 문제가 없도록 관리합니다.

대표적인 Ingress Controller 종류

  • NGINX Ingress Controller:
    가장 널리 사용되며, 안정성, 확장성이 뛰어난 컨트롤러입니다. 다양한 설정 옵션과 어노테이션을 활용할 수 있습니다.
  • Traefik:
    동적 구성 및 서비스 디스커버리 기능을 지원하며, 비교적 간단하게 구성할 수 있는 컨트롤러입니다.
  • HAProxy Ingress Controller:
    고성능 로드 밸런싱 기능과 다양한 고급 네트워크 기능을 제공합니다.
  • 클라우드 제공 컨트롤러:
    AWS, Google Cloud 등 주요 클라우드 제공업체에서는 클라우드 네이티브 환경에 맞춘 Ingress Controller (예: AWS ALB Ingress Controller, GCE Ingress Controller)를 제공합니다.

결론

  • Ingress는 클러스터 외부로부터 내부 서비스로 들어오는 HTTP/HTTPS 트래픽에 대한 라우팅 규칙을 정의하는 Kubernetes API 객체입니다. 이를 통해 하나의 엔드포인트에서 여러 서비스를 관리할 수 있습니다.
  • Ingress Controller는 Ingress 객체에 정의된 규칙을 모니터링하고 실제 트래픽에 적용하는 실행 컴포넌트로, 프록시 서버나 로드 밸런서를 통해 외부 요청을 내부 서비스로 전달합니다.