MSA 트레이닝 센터

NGINX Service Mesh 를 통해 트래픽 분할하는 방법

이 트레이닝 영상에서는 NGINX 엔지니어는 오픈소스인 NGINX Service Mesh 를 사용하여 Blue-Green 배포 및 Canary 배포를 실행하는 방법을 안내합니다.

NGINX Service Mesh를 통해 트래픽 분할하는 방법

NGINX Service Mesh 는 Kubernetes 환경에서 트래픽 제어와 보안을 간단히 처리할 수 있는 오픈소스 서비스 메쉬 솔루션입니다. 이를 활용하면 애플리케이션 배포 전략(Blue-Green 배포 및 Canary 배포)을 구현하여 안정성과 유연성을 높일 수 있습니다. 이 가이드는 NGINX Service Mesh를 사용해 트래픽을 분할하고, Blue-Green 배포와 Canary 배포를 설정하는 방법을 안내합니다.

NGINX Service Mesh 소개

NGINX Service Mesh는 서비스 간 트래픽을 관리하고, 보안을 강화하며, 배포 전략을 지원하는 강력한 도구입니다. 주요 특징은 다음과 같습니다:

  • mTLS 지원: 서비스 간 트래픽 암호화와 인증 제공.
  • 트래픽 제어: HTTP 및 gRPC 트래픽 라우팅 지원.
  • 정책 관리: 세분화된 트래픽 제어 및 접근 정책 구성 가능.
  • 배포 전략 지원: Canary 및 Blue-Green 배포 구현 가능.

Blue-Green 배포 구현

Blue-Green 배포는 애플리케이션의 두 버전(Blue와 Green)을 동시에 실행하며, 트래픽을 전환하여 새로운 버전의 안정성을 확인하는 전략입니다.

애플리케이션 배포 준비

Blue 버전 배포

Blue 버전의 애플리케이션을 배포합니다.

				
					apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-blue
  labels:
    app: my-app
    version: blue
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
      version: blue
  template:
    metadata:
      labels:
        app: my-app
        version: blue
    spec:
      containers:
      - name: app-container
        image: my-app:blue
        ports:
        - containerPort: 80

				
			
Green 버전 배포

새로운 Green 버전을 배포합니다.

				
					apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-green
  labels:
    app: my-app
    version: green
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
      version: green
  template:
    metadata:
      labels:
        app: my-app
        version: green
    spec:
      containers:
      - name: app-container
        image: my-app:green
        ports:
        - containerPort: 80

				
			

트래픽 분할 설정

NGINX Service Mesh의 트래픽 라우팅 규칙을 사용하여 트래픽을 Blue에서 Green으로 전환합니다.

TrafficSplit 리소스 정의

트래픽 분할 비율을 설정하는 TrafficSplit 리소스를 생성합니다.

				
					apiVersion: split.smi-spec.io/v1alpha3
kind: TrafficSplit
metadata:
  name: my-app-split
  namespace: default
spec:
  service: my-app
  backends:
  - service: app-blue
    weight: 90
  - service: app-green
    weight: 10

				
			
트래픽 전환

Green 버전에 대한 트래픽 비율을 점차 증가시키면서 안정성을 확인합니다. 예를 들어, 다음과 같이 업데이트합니다.

				
					spec:
  backends:
  - service: app-blue
    weight: 50
  - service: app-green
    weight: 50

				
			

Canary 배포 구현

Canary 배포는 새로운 애플리케이션 버전을 점진적으로 릴리스하여 안정성을 확인한 후, 전체 트래픽으로 전환하는 전략입니다.

Canary 버전 배포

Canary 버전 애플리케이션을 배포합니다.

				
					apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-canary
  labels:
    app: my-app
    version: canary
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
      version: canary
  template:
    metadata:
      labels:
        app: my-app
        version: canary
    spec:
      containers:
      - name: app-container
        image: my-app:canary
        ports:
        - containerPort: 80

				
			

트래픽 분할 설정

Canary 배포에서는 초기 소량의 트래픽을 Canary 버전으로 라우팅한 후, 점차 증가시키면서 테스트합니다.

TrafficSplit 리소스 정의

트래픽의 일부를 Canary 버전으로 라우팅합니다.

				
					apiVersion: split.smi-spec.io/v1alpha3
kind: TrafficSplit
metadata:
  name: my-app-split
  namespace: default
spec:
  service: my-app
  backends:
  - service: app-stable
    weight: 95
  - service: app-canary
    weight: 5

				
			
Canary 트래픽 점진적 증가

Canary 버전에 대한 트래픽 비율을 점진적으로 증가시키면서 시스템 상태를 모니터링합니다.

				
					spec:
  backends:
  - service: app-stable
    weight: 70
  - service: app-canary
    weight: 30

				
			

모니터링 및 검증

관찰 도구 통합

NGINX Service Mesh는 Prometheus, Grafana, Jaeger와 통합되어 애플리케이션 상태와 트래픽 분할 상태를 실시간으로 모니터링할 수 있습니다.

Prometheus 및 Grafana 대시보드 설정
				
					istioctl dashboard grafana

				
			
트래픽 추적

분산 추적 도구 Jaeger를 사용하여 트래픽 경로와 상태를 확인합니다.

				
					istioctl dashboard jaeger

				
			

Best Practices

  • 소량 트래픽 테스트: 초기에는 소량의 트래픽을 새로운 버전으로 라우팅하여 문제를 조기에 발견하세요.
  • 모니터링 활성화: Prometheus 및 Grafana를 통해 시스템 성능과 안정성을 지속적으로 확인하세요.
  • 자동화된 배포 사용: CI/CD 파이프라인과 통합하여 TrafficSplit 설정을 자동화하세요.
  • 안전한 롤백 계획: 새로운 버전에 문제가 발견되면 기존 버전으로 신속히 트래픽을 전환할 수 있도록 설정하세요.

결론

NGINX Service Mesh 시작하기

NGINX Service Mesh는 Blue-Green 및 Canary 배포를 구현하는 데 필요한 강력한 트래픽 제어 기능을 제공합니다. 이를 통해 Kubernetes 환경에서 안정적인 애플리케이션 배포와 업데이트를 수행할 수 있습니다. 이 가이드를 따라 배포 전략을 설정하고 모니터링하여 애플리케이션의 안정성과 성능을 극대화하세요.

NGINX Service Mesh 에 대한 다양한 배포 전략 Best Practice를 확인해 보려면 NGINX STORE에 문의하여 사용 사례에 대해 알아보세요.