MSA 트레이닝 센터

NGINX Ingress Controller 를 통해 Ingress 트래픽 보호

2020년 CNCF 설문 조사에 따르면 NGINX Ingress Controller 는 참가자의 60% 이상이 사용하는 가장 많이 사용되는 Ingress Controller입니다.  이 트레이닝을 시청하여 이유를 확인하고 고객이 가장 좋아하는 기능이 무엇인지 알아보세요.

Kubernetes 클러스터의 Gateway로서 웹 애플리케이션뿐만 아니라 TCP/UDP 애플리케이션도 지원하고 보호할 수 있는지 확인하는 것이 중요합니다. 고급 CRD(Custom Resource Definitions)를 사용하면 NGINX Kubernetes Ingress Controller를 구성하는 것이 생각보다 훨씬 간단합니다.

NGINX Ingress Controller 를 통해 Ingress 트래픽 보호

Kubernetes Ingress는 클러스터 외부에서 애플리케이션으로 트래픽을 라우팅하는 데 사용됩니다. NGINX Kubernetes Ingress Controller 는 Kubernetes의 Ingress 리소스를 처리하며, 고급 보안 기능을 제공하여 애플리케이션 트래픽을 효과적으로 보호할 수 있습니다. 이 가이드에서는 NGINX Ingress Controller를 사용하여 Ingress 트래픽을 보호하기 위한 설정 및 주요 기능을 단계별로 설명합니다.

시작 전 준비 사항

사전 요구 사항

  • Kubernetes 클러스터가 구성되어 있어야 합니다.
  • kubectl CLI가 설정되어 있어야 합니다.
  • NGINX Ingress Controller가 클러스터에 배포되어 있어야 합니다. 설치 가이드를 참고하세요.

Ingress 리소스와 NGINX Ingress Controller 소개

Ingress 리소스

Kubernetes Ingress 리소스는 HTTP 및 HTTPS 트래픽을 클러스터 내부의 서비스로 라우팅하는 역할을 합니다. 기본적으로 Ingress는 다음과 같은 라우팅 규칙을 제공합니다:

  • 호스트 이름에 따른 트래픽 라우팅
  • URL 경로에 따른 트래픽 분배

NGINX Ingress Controller

NGINX Ingress Controller는 Ingress 리소스를 처리하며, TLS 종단점, 인증, 요청 제한, WAF(Web Application Firewall) 등의 고급 기능을 제공합니다.

 

Ingress 트래픽 보호 기능

TLS를 통한 HTTPS 트래픽 암호화

HTTPS는 데이터 전송을 암호화하여 트래픽을 보호하는 데 필수적입니다. NGINX Ingress Controller를 사용하여 TLS를 설정할 수 있습니다.

1. TLS 인증서 생성 및 Secret 생성: 먼저, tls.crttls.key로 구성된 인증서를 생성한 후 Kubernetes Secret으로 저장합니다.

				
					kubectl create secret tls my-tls-secret \
--cert=path/to/tls.crt \
--key=path/to/tls.key

				
			

2. Ingress 리소스에 TLS 설정 추가: Ingress 리소스 정의에서 tls 섹션을 추가하여 HTTPS 트래픽을 설정합니다.

				
					apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - example.com
    secretName: my-tls-secret
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

				
			

3. HTTPS 확인 브라우저에서 https://example.com에 접속하여 TLS 설정이 올바르게 작동하는지 확인합니다.

IP 주소 기반 접근 제어

IP 주소를 기반으로 특정 트래픽만 허용하거나 차단할 수 있습니다.

1. Whitelist 설정 특정 IP 주소만 허용하려면 nginx.ingress.kubernetes.io/whitelist-source-range 주석을 사용합니다.

				
					metadata:
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.1.0/24,203.0.113.5"

				
			

2. Blacklist 설정 특정 IP 주소를 차단하려면 NGINX Configuration Snippet을 사용해야 합니다.

				
					metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      deny 203.0.113.10;
      deny 198.51.100.0/24;
      allow all;

				
			
Basic Authentication

HTTP Basic Authentication을 사용하여 트래픽에 인증을 추가할 수 있습니다.

1. htpasswd 파일 생성: 인증 자격 증명을 생성합니다. htpasswd 도구를 사용하여 사용자 이름과 비밀번호를 추가합니다.

				
					htpasswd -c auth admin

				
			

2. Secret 생성:  생성된 auth 파일을 Secret으로 추가합니다.

				
					kubectl create secret generic basic-auth --from-file=auth

				
			

3. Ingress 리소스에 인증 설정 추가: NGINX Ingress Controller의 주석을 사용하여 Basic Authentication을 활성화합니다.

				
					metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-type: "basic"
    nginx.ingress.kubernetes.io/auth-secret: "basic-auth"
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - Login"

				
			
Rate Limiting (요청 제한)

Rate Limiting은 특정 클라이언트가 초당 요청 수를 제한하여 DDoS 공격을 방어하는 데 유용합니다.

1. Rate Limiting 설정: 요청 속도를 제한하려면 limit-req 관련 주석을 설정합니다.

				
					metadata:
  annotations:
    nginx.ingress.kubernetes.io/limit-req-zone: "$binary_remote_addr zone=mylimit:10m rate=5r/s"

				
			

2. Rate Limiting 동작: 위 설정은 클라이언트 IP별로 초당 5개의 요청만 처리하며, 초과된 요청은 차단됩니다.

모니터링 및 디버깅

NGINX 로그 확인

NGINX Ingress Controller는 로깅을 통해 트래픽 데이터를 제공합니다. 다음 명령으로 로그를 확인할 수 있습니다.

				
					kubectl logs -l app.kubernetes.io/name=ingress-nginx -n ingress-nginx

				
			

메트릭 수집

Prometheus 및 Grafana를 사용하여 NGINX 메트릭을 시각화할 수 있습니다. Ingress Controller는 Prometheus Exporter와의 통합을 제공합니다.

Best Practices

  1. HTTPS 기본 설정: 모든 트래픽에 대해 HTTPS를 강제 설정하여 데이터 보호를 강화합니다.
  2. 인증 및 접근 제어: 인증 및 IP 기반 접근 제어를 활용하여 불필요한 접근을 제한합니다.
  3. 요청 제한 설정: Rate Limiting을 통해 시스템 부하를 방지하고, 서비스 가용성을 유지합니다.
  4. 정기적인 로그 분석: 로그 데이터를 정기적으로 검토하여 보안 위협을 조기에 발견합니다.
  5. 보안 규칙 업데이트: WAF 규칙을 최신 상태로 유지하여 새로운 위협으로부터 애플리케이션을 보호합니다.

결론

NGINX Ingress Controller 를 통해 Ingress 트래픽 보호

이 가이드를 통해 NGINX Kubernetes Ingress Controller를 사용하여 Kubernetes Ingress 트래픽을 보호하는 방법을 배웠습니다. TLS 설정, 인증, 요청 제한, WAF 적용 등 다양한 보안 기능을 활용하여 클러스터의 보안을 강화하고, 안정적인 서비스를 제공하세요.

NGINX Ingress Controller 에 대한 다양한 정보를 확인하기 위해 NGINX STORE의 NGINX Ingress Controller 한글 문서를 참고해 보세요.