보안 그룹 및 포트 설정 가이드
이 문서는 EKS 클러스터 내의 서비스들이 AWS 리소스(RDS, ElastiCache 등) 및 외부망과 원활하게 통신하기 위해 필요한 보안 그룹(Security Group) 및 포트 설정에 대해 설명합니다.
핵심 포트 요약
EKS 백엔드 파드 및 클러스터 관리의 정상 동작을 위해 다음 포트들이 반드시 허용되어야 합니다.
| 포트 | 프로토콜 | 용도 | 설명 |
|---|---|---|---|
| 3000 | TCP | Application | NestJS 백엔드 서비스의 기본 포트. ALB가 파드로 트래픽을 전달할 때 사용함. |
| 53 | UDP/TCP | DNS | 도메인 주소(RDS, Redis 엔드포인트 등)를 IP로 변환하기 위해 필수. UDP 53번이 막히면 EAI_AGAIN 에러가 발생함. |
| 6379 | TCP | Redis | AWS ElastiCache(Valkey/Redis)와의 데이터 읽기/쓰기 및 메시지 브로커 통신용. |
| 443 | TCP | HTTPS | AWS SDK를 통한 S3 업로드, SQS 메시지 발행 및 EKS 컨트롤 플레인 통신용. |
| 10250 | TCP | Kubelet API | kubectl logs, kubectl exec 등 관리 명령어가 노드 내 컨테이너에 전달되기 위해 필요. |
| 9443 | TCP | Webhook | AWS Load Balancer Controller 등 Admission Webhook이 설정을 검증하고 적용하기 위해 사용. |
주요 설정 상세
1. 백엔드 서비스 (Port 3000, TCP)
백엔드 애플리케이션(NestJS)이 통신을 위해 사용하는 기본 포트입니다.
- 자동 관리: AWS Load Balancer Controller에 의해 관리되는 규칙입니다.
Ingress설정 시 생성되는Target Group Binding에 의해 ALB 보안 그룹으로부터의 인바운드 트래픽이 자동으로 허용됩니다. - 주의 사항: 이 규칙을 수동으로 삭제할 경우, ALB의 상태 검사(Health Check)가 실패하여 서비스가 중단(502/504 에러)될 수 있습니다.
2. DNS (Port 53, UDP/TCP)
Kubernetes 내부의 CoreDNS는 도메인 조회를 위해 기본적으로 UDP 53 포트를 사용합니다.
- 문제 발생: 보안 그룹에서 TCP 53만 열고 UDP 53을 막을 경우, Node.js 백엔드에서
getaddrinfo EAI_AGAIN에러가 발생하며 Redis나 DB 엔드포인트를 찾지 못하게 됩니다. - 권장 설정: EKS 노드 보안 그룹의 인바운드/아웃바운드 모두에서 VPC 내부(또는 전체)에 대해 UDP/TCP 53 포트를 모두 허용합니다.
2. Redis (Port 6379, TCP)
백엔드 파드가 캐시 저장소 및 실시간 웹소켓 통신을 위한 메시지 브로커(Shared Redis)에 접근하기 위해 사용합니다.
- Production 특이사항: Production 환경의 ElastiCache는 **전송 중 암호화(TLS)**가 활성화되어 있을 수 있습니다. 이 경우 백엔드 환경 변수에서
REDIS_TLS_ENABLED=true설정이 필요합니다.
3. AWS 서비스 통신 (Port 443, TCP)
EKS 파드가 AWS의 매니지드 서비스(S3, SQS, ECR 등)와 통신할 때 사용하는 표준 HTTPS 포트입니다.
- VPC Endpoint: 프라이빗 서브넷에 있는 노드들은 이 포트를 통해 각 서비스의 VPC Endpoint와 통신합니다.
4. 관리 및 운영 (Port 10250, 9443, TCP)
- 10250: 이 포트가 막히면 개발자가
kubectl exec으로 파드 내부를 진단하거나kubectl logs로 로그를 확인할 수 없습니다. - 9443: ALB Controller가 Ingress를 생성하거나 변경할 때, AWS API와 연동하기 전 내부 검증 단계에서 사용합니다.
트러블슈팅 가이드: EAI_AGAIN 에러
백엔드 로그에 다음과 같은 에러가 발생한다면 DNS 설정 및 53번 포트를 확인해야 합니다.
Error: getaddrinfo EAI_AGAIN master.vivid-ai-redis-prod...
at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26) {
errno: -3001,
code: 'EAI_AGAIN',
syscall: 'getaddrinfo'
}
체크리스트:
- 보안 그룹에서 UDP 53 포트가 허용되어 있는가? (가장 흔한 원인)
- VPC 설정에서
enableDnsSupport와enableDnsHostnames가true인가? - 도메인 주소 끝에 마침표(
.)를 추가하여 FQDN으로 사용 중인가? (예:...amazonaws.com.)