본문 바로가기
K8S

[kubernetes] Ingress 사용하는 이유

by Rainbound-IT 2024. 12. 23.
반응형
 
 Gateway API를 사용한다는 소리도 있으나 아직은 국내에서 그다지 많이 사용하지 않아 Ingress를 중점으로 보는게 좋지 않을까 생각이 듭니다.
 

"Ingress object를 사용하면 사용하는 로드 밸런서의 수를 줄일 수 있다"는 말은 Kubernetes 클러스터에서 외부 트래픽을 서비스(Pod)로 전달하는 과정에서 Ingress를 활용하면 로드 밸런서의 효율성을 극대화할 수 있다는 의미입니다.

이를 이해하기 위해 Kubernetes의 트래픽 흐름과 Ingress가 제공하는 이점을 살펴보겠습니다.


1. Kubernetes에서 외부 트래픽 처리 방식

a. Service와 LoadBalancer 타입

  • Kubernetes에서 LoadBalancer 타입의 Service를 사용하면 클라우드 제공자(AWS, GCP, Azure 등)는 각 Service에 대해 개별적인 외부 로드 밸런서를 프로비저닝합니다.
  • 이 로드 밸런서는 클러스터 외부에서 들어오는 트래픽을 해당 Service로 전달합니다.

문제점:

  • 여러 Service에 대해 LoadBalancer 타입을 사용하면 Service마다 별도의 로드 밸런서가 생성됩니다.
  • 클러스터가 커지고 Service 수가 많아질수록 로드 밸런서 비용 증가복잡성 증가가 발생합니다.

b. Ingress를 활용한 단일 로드 밸런서

  • Ingress를 사용하면 여러 Service에 대한 트래픽을 하나의 로드 밸런서를 통해 처리할 수 있습니다.
  • Ingress Controller는 클러스터에 하나의 외부 로드 밸런서를 생성하고, 이 로드 밸런서를 통해 여러 Service에 트래픽을 전달합니다.

2. Ingress로 로드 밸런서 수를 줄이는 원리

  1. Ingress Controller:
    • Ingress 객체를 관리하는 컴포넌트입니다.
    • 클라우드 제공자와 통합되어 하나의 외부 로드 밸런서를 프로비저닝합니다.
  2. 하나의 공용 IP:
    • Ingress Controller가 제공하는 로드 밸런서는 단일 IP 주소를 사용합니다.
    • 외부 클라이언트는 이 단일 IP를 통해 클러스터에 접근합니다.
  3. 트래픽 라우팅:
    • Ingress 객체는 트래픽을 URL 경로 또는 호스트 이름 기반으로 여러 Service로 라우팅합니다.
    • 예: example.com/api는 Service A로, example.com/web은 Service B로 트래픽 전달.

3. 예시: Ingress로 여러 Service 처리

기존 방식 (LoadBalancer Service):

apiVersion: v1
kind: Service
metadata:
  name: service-a
spec:
  type: LoadBalancer
  ports:
    - port: 80
  selector:
    app: app-a
---
apiVersion: v1
kind: Service
metadata:
  name: service-b
spec:
  type: LoadBalancer
  ports:
    - port: 80
  selector:
    app: app-b
  • 위 구성에서는 Service마다 별도의 로드 밸런서가 생성됩니다.
  • 클라우드 제공자의 로드 밸런서 비용이 두 배로 증가.

Ingress 방식:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: service-a
                port:
                  number: 80
          - path: /web
            pathType: Prefix
            backend:
              service:
                name: service-b
                port:
                  number: 80
  • Ingress Controller는 하나의 로드 밸런서를 생성.
  • 클라이언트는 example.com이라는 단일 IP를 통해 두 개의 Service에 접근 가능:
    • /api → service-a
    • /web → service-b

4. Ingress 사용의 장점

  1. 로드 밸런서 비용 절감:
    • 하나의 로드 밸런서를 통해 여러 Service를 처리하므로 비용이 절감됩니다.
    • 특히 클라우드 환경(AWS, GCP 등)에서 로드 밸런서 사용 비용이 크게 줄어듭니다.
  2. 단일 진입점 제공:
    • 외부 트래픽이 하나의 진입점(IP 또는 DNS 이름)을 통해 관리됩니다.
    • 네트워크 관리와 유지보수가 용이.
  3. 유연한 트래픽 라우팅:
    • URL 경로, 호스트 이름, 쿠키 기반 등 다양한 라우팅 규칙을 설정 가능.
  4. TLS 지원:
    • Ingress를 통해 TLS(SSL) 인증서를 관리하여 보안 트래픽을 처리 가능.

5. 고려해야 할 점

  1. Ingress Controller 필요:
    • Ingress는 기본적으로 Ingress Controller(예: NGINX, Traefik, HAProxy, Istio)가 필요합니다.
    • 클러스터에 적합한 컨트롤러를 선택해야 합니다.
  2. 성능:
    • 모든 트래픽이 단일 로드 밸런서를 통해 전달되므로 성능 병목 가능성.
    • 클러스터 크기와 트래픽 양에 따라 적절한 컨트롤러 설정이 필요합니다.
  3. 복잡성 증가:
    • 초기 설정이 LoadBalancer 타입 Service보다 복잡할 수 있습니다.

6. 결론

  • Kubernetes에서 Ingress를 사용하면 여러 Service에 대해 단일 로드 밸런서를 활용하여 비용과 관리 부담을 줄일 수 있습니다.
  • 특히 URL 경로 기반 트래픽 라우팅과 TLS 관리가 필요한 경우, Ingress는 매우 유용한 솔루션입니다.
  • 클러스터 규모와 요구 사항에 따라 Ingress를 도입하여 네트워크 효율성을 극대화할 수 있습니다.
반응형

댓글