MSA 트레이닝 센터

Kubernetes 트래픽 분할

이 트레이닝 영상에서는 NGINX Ingress Controller와 NGINX Service Mesh로 Canary, 서킷 브레이크 및 Blue-Green을 포함한 트래픽 분할을 통해 복원력을 보장하는 방법을 배웁니다.

  • Microservices 트래픽 관리 모범 사례 논의
  • Edge와 클러스터 내 트래픽 분할에 대한 개요 사용 사례
  • NGINX Ingress Controller 및 NGINX Service Mesh로 트래픽 분할에 대한 라이브 데모

Kubernetes 트래픽 분할

Kubernetes는 현대 애플리케이션 배포 및 관리에 강력한 플랫폼을 제공합니다. 이 가이드에서는 Ingress Controller와 Service Mesh를 사용하여 트래픽 분할을 구현하는 방법을 다룹니다. 특히 Canary 배포 및 Blue-Green 배포 전략에 대해 자세히 설명합니다. 이를 통해 안정적이고 유연한 배포를 설계하는 방법을 배울 수 있습니다.

트래픽 분할이란?

트래픽 분할은 애플리케이션의 새로운 버전을 점진적으로 도입하거나 서로 다른 환경으로 트래픽을 유도하기 위해 트래픽을 제어하는 전략입니다. 주요 목표는 다음과 같습니다:

  • 새로운 코드 변경 사항의 위험을 줄이기
  • 다운타임 없는 배포 제공
  • 다양한 환경에서 성능을 테스트하기

주요 트래픽 분할 전략

  1. Canary 배포: 새로운 버전을 소수의 사용자에게만 배포하여 문제를 조기에 감지하고 점진적으로 트래픽을 늘립니다.
  2. Blue-Green 배포: 기존 버전(Blue)과 새로운 버전(Green)을 동시에 실행하고, 테스트가 완료되면 트래픽을 전환합니다.

Ingress Controller를 사용한 Kubernetes 트래픽 분할

Ingress Controller는 HTTP 및 HTTPS 트래픽을 클러스터 내에서 서비스로 라우팅하는 역할을 합니다. 이를 활용하여 트래픽 분할을 구현할 수 있습니다.

NGINX Ingress Controller로 Canary 배포

1. 배포 준비:

    • 애플리케이션의 두 가지 버전(예: v1, v2)을 배포합니다.
    • Deployment와 Service를 구성하여 두 버전을 각각 정의합니다.

2. Ingress 리소스 설정:

    • 다음과 같이 canary 어노테이션을 사용하여 Canary 트래픽 분할을 설정합니다:

				
					apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"  # Canary로 10% 트래픽 전달
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-v1  # 기본 서비스
            port:
              number: 80
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-v2  # Canary 서비스
            port:
              number: 80

				
			

3. 모니터링 및 조정:

    • Canary 배포 후, 트래픽 모니터링 도구(Prometheus, Grafana 등)를 사용하여 성능과 오류를 추적합니다.
    • 문제가 없으면 Canary 트래픽 비율을 점진적으로 늘립니다.

Service Mesh를 사용한 트래픽 분할

Service Mesh는 서비스 간 통신을 관리하고 제어하는 강력한 도구입니다. Istio와 같은 Service Mesh는 세분화된 트래픽 제어 기능을 제공합니다.

Istio를 사용한 Blue-Green 배포

1. VirtualService 및 DestinationRule 설정:

    • VirtualService를 사용하여 트래픽을 두 버전으로 분리합니다.
    • DestinationRule을 통해 각 서비스의 서브셋을 정의합니다.

				
					apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: app-destination
spec:
  host: app.example.svc.cluster.local
  subsets:
  - name: blue
    labels:
      version: v1
  - name: green
    labels:
      version: v2
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: app-virtualservice
spec:
  hosts:
  - "app.example.com"
  http:
  - route:
    - destination:
        host: app.example.svc.cluster.local
        subset: blue
      weight: 50
    - destination:
        host: app.example.svc.cluster.local
        subset: green
      weight: 50

				
			

1. 트래픽 전환:

    • 새로운 버전(Green)에 대한 테스트가 완료되면 트래픽 비율을 100%로 설정하여 전환합니다.

2. 모니터링 및 롤백:

    • 새로운 버전에서 문제가 발생하면 기존 버전(Blue)으로 빠르게 롤백합니다.

결론

NGINX Ingress Controller: 설치 및 배포를 위한 종합 가이드

Kubernetes에서 Ingress Controller와 Service Mesh를 사용한 트래픽 분할은 애플리케이션 배포의 안정성과 유연성을 높이는 데 매우 유용합니다.

  • Ingress Controller는 간단하고 가벼운 트래픽 분할 솔루션을 제공합니다.
  • Service Mesh는 더 정교하고 세분화된 제어를 가능하게 합니다.

트래픽 분할 전략을 올바르게 구현하면 사용자의 신뢰를 유지하면서도 빠르고 안전하게 애플리케이션을 배포할 수 있습니다. 이 가이드를 통해 효과적인 배포를 설계하시길 바랍니다!

다양한 Kubernetes 배포 전략을 알고 싶으신가요? NGINX STORE 블로그의 Kuberenetes 카테고리를 참고하세요.