MSA 트레이닝 센터

NGINX Service Mesh 의 Rate Limit 설정으로 보안 강화

이 트레이닝 영상에서는 NGINX 엔지니어는 오픈소스인 NGINX Service Mesh 를 사용하여 Rate Limiting 정책을 정의하고 적용하는 방법을 시연합니다.

악의적(예: 무차별 대입 암호 추측 및 DDoS 공격)이든 양성(예: 고객이 판매에 몰리는 경우)이든 대량의 HTTP 요청은 서비스를 압도하고 앱 충돌을 일으킬 수 있습니다.  Rate Limiting은 사용자가 주어진 기간 동안 만들 수 있는 요청 수를 제한합니다. 

 

NGINX Service Mesh 의 Rate Limit 설정으로 보안 강화

NGINX Service Mesh 는 Kubernetes 환경에서 서비스 간 트래픽을 제어하고 보안을 강화하는 강력한 오픈소스 도구입니다. Rate Limiting 정책을 활용하면 각 서비스에 대한 요청 빈도를 제한하여 시스템 과부하를 방지하고 DDoS(Distributed Denial of Service) 공격을 완화할 수 있습니다. 이 가이드는 NGINX Service Mesh를 사용하여 Rate Limiting 정책을 정의하고 적용하는 방법을 설명합니다.

Rate Limiting의 필요성

Rate Limiting은 클라이언트 요청 빈도를 제한하여 다음과 같은 문제를 방지할 수 있습니다:

  • 서비스 과부하 방지: 트래픽 급증 시 애플리케이션의 안정성을 보장.
  • 보안 강화: 악의적인 요청을 줄이고, DDoS와 같은 공격으로부터 보호.
  • 리소스 최적화: 제한된 리소스를 효율적으로 사용.

NGINX Service Mesh의 Rate Limiting 설정

NGINX Service Mesh에서 Rate Limiting은 Traffic Policies를 통해 설정됩니다. 이를 통해 특정 서비스에 대한 요청 빈도를 제어할 수 있습니다.

NGINX Service Mesh 설치

먼저, Kubernetes 클러스터에 NGINX Service Mesh를 설치해야 합니다. 설치가 이미 완료된 경우 이 단계를 건너뛸 수 있습니다.

설치 명령
				
					curl -fsSL https://nginx.org/packages/keys/nginx_signing.key | sudo apt-key add -
helm repo add nginx-service-mesh https://helm.nginx.com/stable
helm repo update
helm install nginx-mesh nginx-service-mesh/nginx-service-mesh

				
			

설치 후, kubectl get pods -n nginx-mesh 명령으로 NGINX Service Mesh가 제대로 실행되고 있는지 확인합니다.

Rate Limiting 정책 정의

NGINX Service Mesh는 TrafficPolicy 리소스를 사용하여 서비스 간 트래픽에 Rate Limiting을 적용합니다.

기본 Rate Limiting 설정

다음 예제는 특정 서비스에 대해 초당 최대 10개의 요청만 허용하는 정책을 정의합니다.

				
					apiVersion: networking.nginx.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: rate-limit-policy
  namespace: default
spec:
  destination:
    app: my-service
  policy:
    rateLimit:
      requestsPerUnit: 10
      unit: second

				
			
주요 설정
  • requestsPerUnit: 단위 시간당 허용되는 요청 수.
  • unit: 제한 단위(초, 분 등).

Rate Limiting 정책 적용

Rate Limiting 정책을 적용하려면 해당 YAML 파일을 클러스터에 적용합니다.

				
					kubectl apply -f rate-limit-policy.yaml

				
			

정책이 적용되면, my-service로 들어오는 요청이 초당 10개로 제한됩니다.

고급 설정

IP별 Rate Limiting

특정 클라이언트 IP별로 요청을 제한하려면 다음과 같이 설정합니다.

				
					apiVersion: networking.nginx.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: rate-limit-by-ip
  namespace: default
spec:
  destination:
    app: my-service
  policy:
    rateLimit:
      requestsPerUnit: 5
      unit: second
      key: remoteAddr

				
			
서비스별 Rate Limiting

특정 서비스 간 트래픽에만 제한을 적용하려면 다음과 같이 설정합니다.

				
					apiVersion: networking.nginx.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: service-to-service-rate-limit
  namespace: default
spec:
  source:
    app: frontend
  destination:
    app: backend
  policy:
    rateLimit:
      requestsPerUnit: 50
      unit: minute

				
			

테스트 및 검증

정상 요청 테스트

초당 10개의 요청 제한이 설정된 서비스를 테스트하려면 curl 또는 로드 테스트 도구를 사용합니다.

				
					curl http://<SERVICE-IP> -H "Host: my-service"

				
			
Rate 초과 요청 테스트

다중 요청을 통해 제한 초과 시 반환되는 응답 상태 코드를 확인합니다.

				
					for i in {1..20}; do curl -s -o /dev/null -w "%{http_code}\n" http://<SERVICE-IP> -H "Host: my-service"; done

				
			

출력 예시:

				
					200
200
429
429

				
			

429 Too Many Requests 상태 코드는 Rate Limiting이 적용되었음을 나타냅니다.

모니터링 및 관리

Prometheus와 Grafana 통합

NGINX Service Mesh는 Prometheus와 Grafana와 통합되어 Rate Limiting 상태를 실시간으로 모니터링할 수 있습니다.

Prometheus 설치
				
					helm install prometheus prometheus-community/kube-prometheus-stack

				
			
Grafana 대시보드 설정

Grafana에서 NGINX Service Mesh 메트릭을 확인하여 Rate Limiting 동작을 모니터링합니다.

로그 확인

Rate Limiting 관련 로그는 NGINX Service Mesh의 로깅 기능을 통해 확인할 수 있습니다.

				
					kubectl logs -n nginx-mesh -l app=nginx-mesh

				
			

Best Practices

  • 적절한 Rate 설정: 서비스의 트래픽 패턴과 용량에 따라 Rate Limiting 값을 설정하세요.
  • 모니터링 활성화: Prometheus와 Grafana를 사용하여 실시간으로 정책 상태를 확인하고, 이상 동작을 조기에 발견하세요.
  • IP 및 서비스별 제한 사용: 사용자와 서비스의 특성에 따라 Rate Limiting 정책을 세분화하세요.
  • 주기적인 검토: 트래픽 변화에 맞춰 정책을 정기적으로 검토하고 업데이트하세요.
  • 테스트 환경 설정: 실제 환경에 적용하기 전에 테스트 환경에서 충분히 검증하세요.

결론

NGINX Service Mesh 시작하기

NGINX Service Mesh를 활용한 Rate Limiting은 서비스 간 트래픽을 효과적으로 관리하고, 과부하나 악의적인 요청으로부터 시스템을 보호하는 데 중요한 역할을 합니다. 이 가이드를 따라 정책을 설정하고 모니터링하여 안정적이고 안전한 서비스 운영을 실현하세요. Rate Limiting과 함께 다른 보안 메커니즘을 통합하면 다층 방어 전략을 구현할 수 있습니다.

NGINX Service Mesh 에 대해 더욱 자세히 알아보려면 NGINX STORE에 문의하여 사용 사례에 대해 상담 받아보세요.