Kubernetes Ingress 및 Ingress Controller

1. Ingress란?

Kubernetes에서 Ingress는 클러스터 외부에서 내부 서비스로 HTTP/HTTPS 요청을 라우팅하는 API 객체이다. Service의 LoadBalancer나 NodePort와 비교했을 때, 보다 유연한 트래픽 라우팅을 제공하며, TLS 종료 및 가상 호스팅 기능도 지원한다.

1.1 Ingress를 사용하는 이유

  • 단일 진입점 제공: 여러 서비스에 대한 요청을 단일 도메인 또는 IP로 수신하여 내부적으로 라우팅 가능
  • 경로 기반 라우팅: 특정 URL 패턴에 따라 요청을 서로 다른 서비스로 전달 가능
  • 호스트 기반 라우팅: 여러 도메인을 하나의 Ingress로 관리 가능
  • TLS 지원: HTTPS 트래픽 처리를 위해 TLS 인증서를 사용할 수 있음
  • 비용 절감: LoadBalancer Service를 여러 개 생성하는 대신, Ingress를 사용하면 외부 트래픽을 보다 효율적으로 관리 가능

2. Ingress 리소스 구조

Ingress는 API 객체로, 기본적으로 다음과 같은 형식으로 정의된다.

2.1 기본 Ingress 예제

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

위 설정에서는 example.com/app1으로 들어오는 요청을 app1-service로, example.com/app2app2-service로 전달한다.


3. Ingress Controller

Ingress 리소스는 단독으로 동작하지 않으며, 실제로 트래픽을 라우팅하는 역할을 하는 Ingress Controller가 필요하다. Kubernetes는 기본 Ingress 기능을 제공하지만, 이를 실행하는 Ingress Controller는 사용자가 직접 배포해야 한다.

3.1 대표적인 Ingress Controller

Ingress Controller특징
NGINX Ingress Controller가장 널리 사용됨, 공식 Kubernetes Ingress 구현 지원
Traefik자동화된 서비스 디스커버리 기능 제공, 빠르고 가벼움
HAProxy Ingress고성능 로드 밸런싱 기능 제공
Kong Ingress ControllerAPI Gateway 기능 포함
Istio Ingress GatewayService Mesh 환경에서 Ingress 역할 수행

4. NGINX Ingress Controller 배포하기

4.1 NGINX Ingress Controller 설치

NGINX Ingress Controller는 Helm을 이용하여 쉽게 배포할 수 있다.

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress-controller ingress-nginx/ingress-nginx

4.2 Ingress를 통한 외부 접근 확인

kubectl get ingress

정상적으로 배포되었다면, 할당된 외부 IP를 확인할 수 있다. 브라우저에서 해당 도메인으로 접근하면 트래픽이 내부 서비스로 전달되는 것을 확인할 수 있다.


5. TLS 인증서 적용하기

Ingress는 Let’s Encrypt 등의 CA를 활용하여 TLS 인증서를 설정할 수 있다.

5.1 TLS 적용 예제

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-tls-ingress
spec:
  tls:
  - hosts:
    - example.com
    secretName: my-tls-secret
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 443

5.2 TLS Secret 생성

kubectl create secret tls my-tls-secret --cert=cert.pem --key=key.pem

이제 HTTPS를 통해 보안 트래픽을 처리할 수 있다.


6. 결론

  • Ingress는 Kubernetes에서 외부 트래픽을 내부 서비스로 라우팅하는 역할을 한다.
  • Ingress Controller가 필요하며, 대표적으로 NGINX, Traefik, HAProxy 등이 사용된다.
  • TLS 인증서를 적용하면 HTTPS 트래픽도 처리 가능하다.
  • Helm을 이용하면 쉽게 Ingress Controller를 배포하고 관리할 수 있다.

Ingress를 활용하면 Kubernetes에서 마이크로서비스 간의 네트워크 트래픽을 보다 효율적으로 관리할 수 있다. 다음 글에서는 Network Policies에 대해 다뤄보자! 🚀

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다