MSA 트레이닝 센터

NGINX Service Mesh 를 통한 클러스터 내 트래픽 보호

NGINX Plus의 기능을 활용하여 가용성이 높고 확장 가능한 컨테이너화된 환경을 운영하는 당사의 Data Plane은 다른 Sidecar가 제공할 수 없는 수준의 엔터프라이즈 트래픽 관리, 성능 및 확장성을 제공합니다. NGINX Service Mesh는 프로덕션 등급 Service Mesh 배포에 필요한 원활하고 투명한 로드 밸런싱, 리버스 프록시, 트래픽 라우팅, ID 및 암호화 기능을 제공합니다. 

이 트레이닝 영상에서는 통합 Data Plane을 특징으로 하는 안전한 turnkey service-to-service 솔루션으로 Kubernetes를 제어(control)하는 방법을 배울 수 있습니다.

NGINX Service Mesh를 통한 클러스터 내 트래픽 보호

이 가이드는 NGINX Service Mesh(NSM)를 사용하여 Kubernetes 클러스터 내 서비스 간 트래픽을 보호하는 방법을 설명합니다. NGINX Service Mesh는 통합 데이터 플레인을 특징으로 하며, 안전하고 간단한 방식으로 서비스 간 통신을 제어하고 보호할 수 있는 Turnkey 솔루션을 제공합니다.

이 가이드는 서비스 간 암호화, 트래픽 정책 구성, 모니터링 및 관리 방법에 초점을 맞춥니다.

NGINX Service Mesh 소개

NGINX Service Mesh란?

NGINX Service Mesh는 서비스 간 통신 보안을 위한 간단하고 효율적인 솔루션입니다. 통합 Data Plane을 통해 모든 서비스 간 통신에 대해 일관된 보안 정책을 적용하며, 중앙 제어 Plane에서 이러한 정책을 쉽게 관리할 수 있습니다.

주요 기능 및 장점

  • mTLS 지원: 모든 서비스 간 트래픽에 대해 자동으로 암호화 및 인증을 적용.
  • 네트워크 정책: 세분화된 트래픽 제어를 통해 서비스 간 허용/차단을 구성.
  • 가시성: 서비스 간 트래픽과 성능에 대한 실시간 모니터링 제공.
  • NGINX 통합: NGINX의 고성능 데이터 플레인을 활용하여 효율적인 네트워크 트래픽 관리.
  •  

준비 사항

사전 요구 사항

  • Kubernetes 클러스터 (버전 1.20 이상 권장).
  • Helm 설치 및 초기화 완료.
  • 클러스터에 대한 kubectl 접근 권한.
  • Prometheus 및 Grafana 설치(선택 사항).

NGINX Service Mesh 설치

NGINX Service Mesh를 설치하여 Kubernetes 클러스터에 통합합니다.

설치 방법

1. NGINX Service Mesh 다운로드: 최신 설치 스크립트를 다운로드합니다.

				
					curl -O https://downloads.f5.com/esd/products/nginx_service_mesh/latest/install.sh
chmod +x install.sh

				
			

2. NGINX Service Mesh 설치:  설치 스크립트를 실행하여 클러스터에 NSM을 배포합니다.

				
					./install.sh --nginx-mesh-api-server

				
			

3. 설치 확인: NSM이 올바르게 설치되었는지 확인합니다.

				
					kubectl get pods -n nginx-mesh
				
			

클러스터 내 트래픽 보호 구현

서비스 간 암호화 (mTLS)

NGINX Service Mesh는 mTLS를 기본적으로 활성화하여 서비스 간 통신을 암호화합니다. 모든 서비스 간 트래픽이 암호화되었는지 확인하려면 트래픽 캡처 도구를 사용하여 데이터 패킷을 분석할 수 있습니다.

  • mTLS 정책 활성화
    모든 서비스 간 통신에서 mTLS를 강제하려면 아래와 같이 설정합니다.
				
					kubectl patch configmap nginx-mesh-config -n nginx-mesh \
  -p '{"data":{"mtls":"true"}}'

				
			

트래픽 제어 정책

불필요한 서비스 간 트래픽을 제한하고 필요한 트래픽만 허용하는 정책을 구성합니다.

1. 서비스 간 허용 정책: 특정 서비스 간 통신을 허용하려면 TrafficTarget 리소스를 생성합니다.

				
					apiVersion: access.smi-spec.io/v1alpha3
kind: TrafficTarget
metadata:
  name: allow-frontend-to-backend
spec:
  destination:
    kind: ServiceAccount
    name: backend
    namespace: default
  sources:
  - kind: ServiceAccount
    name: frontend
    namespace: default
  rules:
  - kind: HTTPRouteGroup
    name: backend-routes
    matches:
    - backend

				
			

2. 서비스 간 차단 정책: 기본적으로 모든 트래픽을 차단하고, 필요한 트래픽만 허용하도록 설정합니다.

				
					kubectl patch configmap nginx-mesh-config -n nginx-mesh \
  -p '{"data":{"default-deny":"true"}}'

				
			

트래픽 관찰 및 로깅

1. Prometheus 및 Grafana를 통한 모니터링: NGINX Service Mesh는 Prometheus와 Grafana와 통합되어 트래픽 데이터를 시각화할 수 있습니다.

				
					helm install prometheus prometheus-community/kube-prometheus-stack

				
			
  • 로그 확인
    NGINX Service Mesh의 로그를 확인하여 트래픽 및 정책의 상태를 점검합니다.
				
					kubectl logs -n nginx-mesh -l app=nginx-mesh-metrics
				
			

Ingress 및 Egress 트래픽 보호

클러스터 외부에서 들어오거나 나가는 트래픽에 대한 보호도 필수적입니다.

  • Ingress 보호
    NGINX Ingress Controller를 활용하여 외부 트래픽을 HTTPS로 보호합니다.
				
					apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80

				
			
  • Egress 제한
    외부로 나가는 트래픽을 제한하려면 EgressPolicy를 설정합니다.
				
					apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-egress
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress: []

				
			

Best Practices

  • 모든 서비스 간 통신에 대해 mTLS를 기본 활성화하여 데이터 보호를 강화하세요.
  • 최소 권한 원칙을 준수하여 필요한 트래픽만 허용하고 기본적으로 모든 트래픽을 차단하세요.
  • Prometheus와 Grafana를 사용해 트래픽 데이터를 실시간으로 모니터링하고 문제를 사전에 발견하세요.
  • Ingress와 Egress 트래픽 보호를 통해 외부로부터의 위협을 방지하고 클러스터 보안을 강화하세요.

결론

NGINX Service Mesh는 Kubernetes 클러스터에서 서비스 간 통신을 보호하기 위한 강력한 도구입니다. mTLS 암호화, 트래픽 정책 구성, 실시간 모니터링 기능을 통해 클러스터 보안을 크게 강화할 수 있습니다.