Kubernetes/Kubernetes Basics

📌 Kubernetes에서 API Gateway 운영: Istio vs. Kong vs. Nginx

ygtoken 2025. 3. 4. 12:25
728x90

 

1️⃣ Kubernetes에서 API Gateway가 필요한 이유?

 

마이크로서비스 환경에서는 여러 서비스가 API를 통해 통신합니다.

이때 API Gateway를 활용하면 다음과 같은 기능을 제공하여 운영을 더욱 쉽게 만들 수 있습니다.

 

API Gateway의 주요 역할

라우팅(Routing) → 클라이언트 요청을 적절한 백엔드 서비스로 전달

트래픽 제어(Traffic Control) → 로드 밸런싱, API Rate Limiting 적용

보안(Security) → 인증, 인가, JWT 검증, WAF(Web Application Firewall) 기능 지원

Observability → API 요청 로깅 및 모니터링 제공

 

이 글에서는 Kubernetes에서 사용 가능한 대표적인 API Gateway인 Istio, Kong, Nginx를 비교하고, 각각의 사용 사례를 살펴봅니다.

 


 

2️⃣ Kubernetes에서 API Gateway 선택 기준

 

📌 Kubernetes 환경에서 API Gateway를 선택할 때 고려해야 할 요소는 다음과 같습니다.

비교 항목IstioKongNginx

설치 복잡도 복잡함 (Service Mesh 포함) 중간 (Helm 지원) 간단함
트래픽 관리 강력한 트래픽 관리 기능 API Rate Limiting 제공 기본적인 로드 밸런싱
보안 기능 JWT 인증, mTLS 지원 인증 플러그인 제공 TLS 지원, WAF 가능
모니터링 및 로깅 OpenTelemetry, Jaeger 연동 Prometheus, Grafana 지원 기본적인 로그 제공
사용 사례 서비스 메시(Service Mesh) 운영 API Gateway 중심의 트래픽 관리 간단한 API 로드 밸런싱

Istio는 서비스 메시(Service Mesh) 운영이 필요한 경우 적합

Kong은 API Gateway 중심의 트래픽 관리가 필요한 경우 적합

Nginx는 간단한 API 로드 밸런싱 및 보안 기능이 필요한 경우 적합

 


 

3️⃣ Istio를 활용한 API Gateway 운영

 

📌 Istio는 서비스 메시 기능을 제공하는 API Gateway로, Kubernetes 클러스터 내 서비스 간 통신을 제어할 수 있습니다.

 


 

✅ Step 1: Istio 설치 (Helm 사용)

 

📌 Istio를 Helm을 사용하여 설치합니다.

helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
helm install istio-base istio/base -n istio-system --create-namespace
helm install istiod istio/istiod -n istio-system

📌 설치 확인

kubectl get pods -n istio-system

Istio가 정상적으로 설치되었는지 확인!

 


 

✅ Step 2: Ingress Gateway 설정

 

📌 Istio Ingress Gateway를 설정하여 외부 트래픽을 관리할 수 있습니다.

 

📌 istio-gateway.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
  namespace: default
spec:
  selector:
    istio: ingressgateway  # Istio Ingress Gateway 선택
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "myapp.example.com"  # API Gateway를 통해 접근할 도메인

 

📌 적용 명령어

kubectl apply -f istio-gateway.yaml

Istio를 사용하여 API Gateway 역할을 수행할 수 있도록 설정됨!

 


 

4️⃣ Kong을 활용한 API Gateway 운영

 

📌 Kong은 API 관리 기능이 포함된 API Gateway로, Rate Limiting, JWT 인증 등의 기능을 제공합니다.

 

 


 

✅ Step 1: Kong 설치 (Helm 사용)

 

📌 Kong을 Helm을 사용하여 설치합니다.

helm repo add kong https://charts.konghq.com
helm repo update
helm install kong kong/kong --set ingressController.enabled=true --namespace kong --create-namespace

 

📌 설치 확인

kubectl get pods -n kong

Kong이 정상적으로 실행되는지 확인!

 


 

✅ Step 2: Kong Ingress 설정

 

📌 Kong Ingress를 설정하여 API 요청을 특정 서비스로 라우팅합니다.

 

📌 kong-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    konghq.com/strip-path: "true"  # API 경로를 자동으로 정리
spec:
  ingressClassName: kong  # Kong을 Ingress Controller로 사용
  rules:
  - host: api.example.com  # API Gateway 도메인
    http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

 

📌 적용 명령어

kubectl apply -f kong-ingress.yaml

Kong을 API Gateway로 활용하여 서비스 간 트래픽을 효과적으로 관리 가능!

 


 

5️⃣ Nginx를 활용한 API Gateway 운영

 

📌 Nginx는 간단한 API 로드 밸런싱 및 보안 기능을 제공하는 경량 API Gateway입니다.

 


 

✅ Step 1: Nginx Ingress Controller 설치

 

📌 Helm을 사용하여 Nginx Ingress Controller를 설치합니다.

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

📌 설치 확인

kubectl get pods -n default

Nginx Ingress Controller가 정상적으로 실행되는지 확인!

✅ Step 2: Nginx Ingress 설정

 

📌 Nginx Ingress를 사용하여 특정 API 요청을 서비스로 라우팅합니다.

 

📌 nginx-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
spec:
  ingressClassName: nginx  # Nginx Ingress Controller 사용
  rules:
  - host: api.example.com  # API Gateway 도메인
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: my-app
            port:
              number: 80

 

📌 적용 명령어

kubectl apply -f nginx-ingress.yaml

Nginx를 사용하여 간단한 API Gateway 역할을 수행할 수 있음!

 


 

📌 결론: Kubernetes API Gateway 비교 요약

 

Istio서비스 메시 환경에서 API Gateway 기능이 필요한 경우

Kong강력한 API 관리 기능과 확장성이 필요한 경우

Nginx간단한 API 라우팅 및 보안 기능이 필요한 경우

 

🔥 적절한 API Gateway를 선택하여 Kubernetes 환경에서 더욱 효율적인 API 트래픽을 관리하세요! 🚀

 

 

728x90