쿠버네티스에서 인그레스(Ingress)클러스터 외부에서 내부 서비스로의 HTTP(S) 트래픽을 제어하기 위한 리소스입니다. 서비스(Service)는 파드 집합에 대한 네트워크 접근을 클러스터 내부에서 추상화하지만, 인그레스는 주로 외부클러스터 내부의 연결 지점을 설정하기 위해 사용합니다.


1. 인그레스(Ingress)란?

  • 정의
    HTTP/HTTPS 요청을 특정 서비스로 라우팅할 수 있도록, 도메인(호스트명)·경로 기반의 규칙을 정의하는 객체입니다.
  • 필요성
    • 여러 서비스가 있을 경우, 각 서비스마다 NodePort나 LoadBalancer를 생성해 외부에 노출하는 방식은 관리가 복잡해질 수 있음
    • 인그레스를 사용하면 단일 진입점을 통해 트래픽 분산, SSL 종료, 경로 기반/호스트 기반 라우팅 등을 간단하게 구성 가능

2. 인그레스 동작 방식

  1. 인그레스 객체(Ingress Resource)
    • 라우팅 규칙, 도메인(호스트), 경로(path) 등을 선언합니다.
    • 예: example.com/foofoo-service, example.com/barbar-service
  2. 인그레스 컨트롤러(Ingress Controller)
    • 인그레스 리소스를 실제로 해석하고, HTTP/HTTPS 트래픽을 적절한 서비스로 라우팅하는 역할을 담당합니다.
    • 대표적으로 NGINX Ingress Controller, HAProxy, Traefik, Istio Gateway(Istio 사용 시) 등이 있으며, 클러스터에 설치·운영해야 합니다.
  3. 서비스(Service)
    • 인그레스 컨트롤러가 실제 트래픽을 넘겨줄 대상입니다(주로 ClusterIP 타입).
    • 인그레스는 서비스의 ‘프록시’ 역할을 수행한다고 볼 수 있습니다.

3. 인그레스 규칙(Ingress Rules)

3.1 호스트 기반 라우팅(Host-based Routing)

  • 예) example.com 도메인으로 들어오는 요청은 service-A로, test.comservice-B로 연결
rules:
  - host: example.com
    http:
      paths:
        - path: /
          backend:
            service:
              name: service-example
              port:
                number: 80

3.2 경로 기반 라우팅(Path-based Routing)

  • 예) example.com/fooservice-foo, example.com/barservice-bar
rules:
  - host: example.com
    http:
      paths:
        - path: /foo
          pathType: Prefix
          backend:
            service:
              name: service-foo
              port:
                number: 80
        - path: /bar
          pathType: Prefix
          backend:
            service:
              name: service-bar
              port:
                number: 80

pathType: Prefix, Exact, ImplementationSpecific 등을 지정해 경로 매칭 방식을 정의할 수 있습니다.


4. TLS(HTTPS) 설정

  • 인그레스는 TLS(SSL) 인증서를 연동해 HTTPS 트래픽을 처리할 수 있습니다.
  • 쿠버네티스 시크릿(Secret)에 SSL 인증서·키를 저장한 뒤, 인그레스 리소스의 tls 필드에서 해당 시크릿을 참조합니다.
tls:
  - hosts:
      - example.com
    secretName: example-tls

5. 인그레스 컨트롤러(Ingress Controller)와의 관계

  1. 인그레스 리소스 생성
    • kubectl apply -f ingress.yaml과 같이 YAML 매니페스트를 통해 인그레스 규칙 선언
  2. 인그레스 컨트롤러
    • 클러스터 내에 설치된 인그레스 컨트롤러(NGINX 등)가 이 인그레스 리소스를 “감시(Watch)”하고 있음
    • 인그레스 리소스에 정의된 호스트/경로 정보를 기반으로 역방향 프록시(Reverse Proxy) 설정을 자동 업데이트
  3. 클라이언트의 요청 처리
    • 도메인에 대한 요청이 인그레스 컨트롤러로 들어오면, 컨트롤러가 적절한 서비스로 라우팅
    • 서비스는 내부 파드로 트래픽을 분산 처리 (파드가 변경되어도 서비스가 자동 관리)

6. 장점 및 한계

장점

  1. 단일 진입점
    • 여러 서비스에 대해 NodePort나 LoadBalancer를 각각 생성할 필요 없이, 인그레스를 통해 한 번에 외부 노출 가능
  2. 유연한 라우팅 정책
    • 호스트 기반, 경로 기반, 여러 수준의 트래픽 제어(SSL, 인증 등)
  3. 확장성
    • NGINX, HAProxy, Traefik 등 다양한 컨트롤러를 사용할 수 있으며, 오토스케일링 환경에도 쉽게 대응

한계

  1. 인그레스 컨트롤러 설치가 필수
    • 기본 쿠버네티스 배포에 인그레스 컨트롤러가 자동으로 포함되어 있지 않은 경우, 별도로 배포해야 함
  2. 네트워크 복잡성
    • 인그레스 뒤에 서비스가 있고, 서비스 뒤에 파드가 있어 이중·삼중 프록시 구조가 생길 수 있음
  3. L7(HTTP/HTTPS) 중심
    • HTTP(S) 이외의 TCP/UDP 트래픽은 인그레스가 직접 처리하지 못하고, 다른 방식을 사용해야 함(예: Service의 NodePort, LoadBalancer 설정 등)

7. 간단한 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-web-service
                port:
                  number: 80
  • example.com으로 들어오는 모든 요청(/)은 my-web-service로 보내집니다.
  • 실제 SSL 인증, 복잡한 경로 설정, 여러 호스트 설정 등은 추가 필드로 확장 가능합니다.

8. 요약

  • 인그레스(Ingress)는 쿠버네티스 클러스터 내부 서비스를 HTTP/HTTPS 트래픽으로 노출하기 위한 핵심 리소스입니다.
  • 인그레스 컨트롤러가 인그레스 정의를 읽어 역방향 프록시(Reverse Proxy) 설정을 자동화하고, 외부에서 들어오는 요청을 해당 서비스로 라우팅합니다.
  • 호스트·경로 기반의 유연한 라우팅, SSL 종단(HTTPS 지원) 등을 통해 단일 진입점에서 다양한 내부 서비스를 관리할 수 있습니다.
  • 반드시 인그레스 컨트롤러를 설치해야 하며, L7 레벨의 HTTP/HTTPS 트래픽에 특화된 방식임을 유의해야 합니다.

이로써 인그레스를 활용하면, 쿠버네티스 환경에서 다양한 웹 서비스를 간편하게 외부로 노출하고 관리할 수 있습니다.

태그:

카테고리:

업데이트:

댓글남기기