NGINX Service Mesh 소개

Kubernetes 환경에서 컨테이너 트래픽을 관리하기 위해 NGINX Plus로 구동되는 Data Plane을 활용하는 완전히 통합된 경량 Service Mesh인 NGINX Service Mesh(NSM)를 소개하겠습니다. NSM은 무료로 다운로드할 수 있습니다. 개발 및 테스트 환경에서 사용해 보고 NGINX STORE에서 피드백을 기다리겠습니다.

Microservices 방법론을 채택하면 배포가 확장되고 복잡해짐에 따라 문제가 발생합니다. Service 간의 통신은 복잡해지며, 디버깅 문제는 더 어려울 수 있으며, 더 많은 Service는 관리해야 할 더 많은 리소스를 의미합니다.

NSM은 중앙에서 프로비저닝(Provisioning)할 수 있도록 지원하여 다음과 같은 과제를 해결합니다.

  • Security – 보안은 그 어느 때보다 중요합니다. 데이터 유출로 인해 기업은 매년 수백만 달러의 수익과 평판을 잃을 수 있습니다. NSM은 모든 통신이 mTLS 암호화되어 해커가 도용할 민감한 데이터가 없도록 합니다. Access Control를 사용하면 서로 통신할 수 있는 Service에 대한 정책을 정의할 수 있습니다.
  • Traffic Management – 새로운 버전의 애플리케이션을 배포할 때 버그가 있는 경우 처음에 수신하는 트래픽 양을 제한할 수 있습니다. NSM 지능형 컨테이너 트래픽 관리를 사용하면 새로운 Service에 대한 트래픽을 제한하고 시간이 지남에 따라 서서히 증가시키는 정책을 지정할 수 있습니다. 속도 제한(Rate Limiting) 및 회로 차단기(Circuit Breaker)와 같은 기능을 통해 Service를 통과하는 트래픽을 완벽하게 제어할 수 있습니다.
  • Visualization(시각화) – 수천 개의 Service를 관리하는 것은 디버깅 및 가시성의 악몽이 될 수 있습니다. NSM은 NGINX Plus에서 사용할 수 있는 전체 Metrics 세트를 표시하는 내장 Grafana 대시보드를 통해 이 기능을 제어할 수 있도록 지원합니다. 또한 Open Tracing 통합을 통해 세분화된 트랜잭션 추적을 가능하게 합니다.
  • Hybrid deployments – 대부분의 기업이 인프라가 Kubernetes에서 실행되는 것은 아닙니다. NSM은 Legacy 애플리케이션이 누락되지 않도록 보장하며 NGINX Ingress Controller 통합을 통해 Legacy 서비스는 Mesh Service와 통신할 수 있으며 그 반대도 가능합니다.

NSM은 컨테이너 트래픽에 암호화 및 인증을 원활하게 적용하여 제로 트러스트(Zero Trust) 환경에서 애플리케이션을 보호합니다. 조직이 문제를 빠르고 정확하게 배포하고 해결할 수 있도록 트랜잭션에 대한 관찰 가능성과 통찰력을 제공합니다. 또한 세분화된 트래픽 제어 기능을 제공하여 DevOps 팀이 애플리케이션 구성 요소를 배포하고 최적화하는 동시에 Dev팀이 분산 애플리케이션을 구축하고 쉽게 연결할 수 있도록 지원합니다.

목차

1. NGINX Service Mesh 란?
2. 기능 및 구성 요소
3. NGINX Service Mesh 시작

1. NGINX Service Mesh 란?

NSM은 East‑West(Service-to-Service) 트래픽을 위한 통합 Data Plane과 North‑South 트래픽을 위한 NGINX Plus Ingress Controller의 기본 통합으로 구성 되며 단일 Control Plane으로 관리됩니다.

Control Plane은 NGINX Plus Data Plane에 맞게 설계 및 최적화되었으며 NGINX Plus Sidecar에 배포되는 트래픽 관리 규칙을 정의합니다.

NSM을 사용하면 Sidecar Proxy가 Mesh의 모든 Service와 함께 배포됩니다. 다음과 같은 오픈소스 솔루션과 통합됩니다.

  • Grafana – Prometheus Metrics 시각화 하는 NSM 대시보드가 내장되어 있어 시작하는 데 도움이 됩니다.
  • Kubernetes Ingress Controller – Mesh에 대한 Ingress 및 Egress 트래픽 관리
  • SPIRE – Mesh에 대한 인증서 관리, 배포 및 순환을 위한 인증 기관
  • NATS – Control Plane에서 Sidecar로 경로 업데이트와 같은 메시지를 전달하기 위한 확장 가능한 Messaging Plane
  • Open Tracing – 분산 추적(Zipkin 및 Jaeger 모두 지원됨)
  • Prometheus – 요청, 연결 및 SSL Handshake 수와 같은 NGINX Plus Sidecar의 Metrics 수집 및 저장

2. 기능 및 구성 요소

NGINX Plus는 Data Plane로서 Sidcar Proxy(East‑West 트래픽)와 Ingress Controller(North‑South 트래픽)를 포괄하고 있으며 Service 간 컨테이너 트래픽을 가로채고 관리합니다. 기능은 다음과 같습니다.

  • Mutual TLS (mTLS) 인증(Authentication)
  • Load Balancing
  • High Availability (고가용성)
  • Rate Limiting (속도 제한)
  • Circuit Breaking (회로 차단)
  • Blue‑Green 및 Canary 배포
  • Access Controls (접근 제어)

3. NGINX Service Mesh 시작

NSM을 시작하려면 먼저 다음이 필요합니다.

  • Kubernetes 환경에 대한 액세스. NGINX Service Mesh 는 Amazon Elastic Container Service(EKS), Azure Kubernetes Service(AKS), Google Kubernetes Engine(GKE), VMware vSphere 및 Stand‑Alone Bare‑Metal 클러스터를 비롯한 여러 Kubernetes 플랫폼에서 지원됩니다.
  • NSM을 설치할 시스템에 설치된 kubectl Command Line 유틸리티.
  • NGINX Service Mesh 릴리스 패키지에 액세스합니다. 패키지에는 Kubernetes 클러스터에서 액세스할 수 있는 Private Container Registry로 Push해야 하는 NSM 이미지가 포함되어 있습니다. 이 패키지에는 NSM을 배포하는 데 사용되는 nginx-meshctl Binary도 포함되어 있습니다.

기본 설정으로 NSM을 배포하려면 다음 명령을 실행합니다. 배포 프로세스 중에 Trace은 Mesh 구성 요소의 성공적인 배포를 확인하고 마지막으로 NSM이 자체 Namespace에서 실행되고 있음을 확인합니다.

$ DOCKER_REGISTRY=your-Docker-registry ; MESH_VER=0.6.0 ; \
 ./nginx-meshctl deploy  \
  --nginx-mesh-api-image "${DOCKER_REGISTRY}/nginx-mesh-api:${MESH_VER}" \
  --nginx-mesh-sidecar-image "${DOCKER_REGISTRY}/nginx-mesh-sidecar:${MESH_VER}" \
  --nginx-mesh-init-image "${DOCKER_REGISTRY}/nginx-mesh-init:${MESH_VER}" \
  --nginx-mesh-metrics-image "${DOCKER_REGISTRY}/nginx-mesh-metrics:${MESH_VER}"
Created namespace "nginx-mesh".
Created SpiffeID CRD.
Waiting for Spire pods to be running...done.
Deployed Spire.
Deployed NATS server.
Created traffic policy CRDs.
Deployed Mesh API.
Deployed Metrics API Server.
Deployed Prometheus Server nginx-mesh/prometheus-server.
Deployed Grafana nginx-mesh/grafana.
Deployed tracing server nginx-mesh/zipkin.
All resources created. Testing the connection to the Service Mesh API Server...
 
Connected to the NGINX Service Mesh API successfully.
NGINX Service Mesh is running.

기본값이 아닌 설정을 포함한 추가 명령 옵션을 보려면 다음을 실행하십시오.

$ nginx-meshctl deploy –h

NSM Control Plane이 nginx-mesh Namespace에서 제대로 실행되고 있는지 확인하려면 다음을 실행합니다.

$ kubectl get pods –n nginx-mesh
NAME                                 READY   STATUS    RESTARTS   AGE
grafana-6cc6958cd9-dccj6             1/1     Running   0          2d19h
mesh-api-6b95576c46-8npkb            1/1     Running   0          2d19h
nats-server-6d5c57f894-225qn         1/1     Running   0          2d19h
prometheus-server-65c95b788b-zkt95   1/1     Running   0          2d19h
smi-metrics-5986dfb8d5-q6gfj         1/1     Running   0          2d19h
spire-agent-5cf87                    1/1     Running   0          2d19h
spire-agent-rr2tt                    1/1     Running   0          2d19h
spire-agent-vwjbv                    1/1     Running   0          2d19h
spire-server-0                       2/2     Running   0          2d19h
zipkin-6f7cbf5467-ns6wc              1/1     Running   0          2d19h

수동 또는 자동 Injection에 대한 정책을 설정하는 배포 옵션에 따라 NGINX Sidecar Proxy는 기본적으로 배포된 애플리케이션에 Inject됩니다.

예를 들어 기본 Namespace에 sleep 애플리케이션을 배포한 다음 Pod를 검사하면 sleep 애플리케이션과 연결된 NGINX Plus Sidecar라는 두 개의 컨테이너가 실행되고 있음을 알 수 있습니다.

$ kubectl apply –f sleep.yaml
$ kubectl get pods –n default
NAME                     READY   STATUS    RESTARTS   AGE
sleep-674f75ff4d-gxjf2   2/2     Running   0          5h23m

다음 명령을 실행하여 Sidecar를 로컬 시스템에 Expose함으로써 기본 NGINX Plus 대시보드로 sleep 애플리케이션을 모니터링할 수도 있습니다.

$ kubectl port-forward sleep-674f75ff4d-gxjf2 8080:8886

그런 다음 브라우저에서 http://localhost:8080/dashboard.html 로 이동합니다. 또한 Prometheus서버에 연결하여 sleep 애플리케이션을 모니터링할 수도 있습니다.

Kubernetes의 사용자 지정 리소스를 사용하여 액세스 제어(Access Control), 속도 제한(Rate Limiting) 및 회로 차단(Circuit Breaking)과 같은 트래픽 정책을 구성할 수 있습니다.

솔루션 개요를 확인하고 NGINX Plus Ingress Controller의 성능을 직접 테스트 및 사용해 보려면 지금 30일 무료 평가판을 신청하거나 사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.