Ingress

Ingress는 쿠버네티스 클러스터 내의 서비스에 대한 외부 HTTP/HTTPS 트래픽을 관리하는 API 객체입니다. 서비스로의 URL 경로 기반 라우팅, SSL/TLS 종료, 이름 기반 가상 호스팅 등을 제공합니다.

특징

인그레스 컨트롤러

클라우드 네트워크 개념과 비교

기본 Ingress 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

호스트 기반 라우팅 예시

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

경로 기반 라우팅 예시

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

TLS 구성 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-ingress
spec:
  tls:
  - hosts:
      - secure.example.com
    secretName: tls-secret  # 인증서와 키가 포함된 Secret
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: secure-service
            port:
              number: 80

인그레스 어노테이션 예시 (Nginx 인그레스 컨트롤러)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-with-annotations
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/proxy-body-size: "10m"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /app/(.*)
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80

Path 타입