Probe vs Health Check 불일치 디버깅
2026-04-07 작성2026-06-30 수정15분 읽기
📌 기준 환경: EKS 1.33+, AWS Load Balancer Controller v2.9+, Ingress-NGINX v1.11+
1. 개요
Kubernetes Probe와 Load Balancer/Ingress Controller의 Health Check는 독립적으로 실행되며, 서로 다른 메커니즘과 타이밍을 가집니다. 이로 인한 불일치는 다음과 같은 장애를 유발합니다:
- 503 Service Unavailable: Probe는 성공하지만 ALB Health Check 실패
- 502 Bad Gateway: Graceful Shutdown 시퀀스 불일치로 종료 중인 Pod로 트래픽 전송
- 일시적 장애: Rolling Update 중 새 Pod가 준비되기 전에 트래픽 수신
- 504 Gateway Timeout: Ingress 타임아웃과 백엔드 응답 시간 불일치
본 문서는 K8s Probe와 ALB/NLB/Ingress Health Check의 메커니즘 차이를 명확히 하고, 빈발하는 불일치 패턴별 진단 방법과 권장 설정을 제공합니다.
관련 문서 참조
- Probe 기초: Pod 헬스체크 & 라이프사이클 — Probe 설정 상세
- 네트워킹 디버깅: 네트워킹 문제 해결 — Service/DNS 이슈 (추후 작성 예정)
- 고가용성: EKS 고가용성 아키텍처 가이드 — PDB, Graceful Shutdown
2. 메커니즘 비교: Probe vs Health Check
2.1 Kubernetes Probe (kubelet 실행)
Kubernetes Probe는 kubelet이 각 노드에서 독립적으로 실행하는 헬스 체크입니다.
| Probe 유형 | 실행 주체 | 체크 대상 | 실패 시 동작 |
|---|---|---|---|
| readinessProbe | kubelet | 컨테이너 | Service Endpoints에서 제거 (Pod는 살아있음) |
| livenessProbe | kubelet | 컨테이너 | 컨테이너 재시작 (SIGTERM → SIGKILL) |
| startupProbe | kubelet | 컨테이너 | 초기화 완료 전 다른 Probe 비활성화, 실패 시 재시작 |
핵심 특징:
- Pod 내부에서 실행: kubelet이 컨테이너에 직접 접근
- Service Endpoint 제어: readinessProbe 실패 →
kubectl get endpoints목록에서 제거 - 빠른 체크: 기본 1초 timeout, 10초 간격