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 버전의 애플리케이션을 배포합니다.
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 버전을 배포합니다.
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 리소스를 생성합니다.
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 버전으로 라우팅한 후, 점차 증가시키면서 테스트합니다.
트래픽의 일부를 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 버전에 대한 트래픽 비율을 점진적으로 증가시키면서 시스템 상태를 모니터링합니다.
spec:
backends:
- service: app-stable
weight: 70
- service: app-canary
weight: 30
모니터링 및 검증
관찰 도구 통합
NGINX Service Mesh는 Prometheus, Grafana, Jaeger와 통합되어 애플리케이션 상태와 트래픽 분할 상태를 실시간으로 모니터링할 수 있습니다.
istioctl dashboard grafana
분산 추적 도구 Jaeger를 사용하여 트래픽 경로와 상태를 확인합니다.
istioctl dashboard jaeger
Best Practices
- 소량 트래픽 테스트: 초기에는 소량의 트래픽을 새로운 버전으로 라우팅하여 문제를 조기에 발견하세요.
- 모니터링 활성화: Prometheus 및 Grafana를 통해 시스템 성능과 안정성을 지속적으로 확인하세요.
- 자동화된 배포 사용: CI/CD 파이프라인과 통합하여 TrafficSplit 설정을 자동화하세요.
- 안전한 롤백 계획: 새로운 버전에 문제가 발견되면 기존 버전으로 신속히 트래픽을 전환할 수 있도록 설정하세요.
결론
NGINX Service Mesh는 Blue-Green 및 Canary 배포를 구현하는 데 필요한 강력한 트래픽 제어 기능을 제공합니다. 이를 통해 Kubernetes 환경에서 안정적인 애플리케이션 배포와 업데이트를 수행할 수 있습니다. 이 가이드를 따라 배포 전략을 설정하고 모니터링하여 애플리케이션의 안정성과 성능을 극대화하세요.
NGINX Service Mesh 에 대한 다양한 배포 전략 Best Practice를 확인해 보려면 NGINX STORE에 문의하여 사용 사례에 대해 알아보세요.
댓글을 달려면 로그인해야 합니다.