EKS Default Namespace 삭제 시 장애 대응 가이드
📅 작성일: 2025-01-07 | 수정일: 2026-02-14 | ⏱️ 읽는 시간: 약 12분
1. 개요 (TL;DR)
EKS 클러스터에서 default namespace를 삭제하면 Control Plane에 대한 모든 접근이 차단됩니다. kubectl 명령어가 작동하지 않으며, Velero나 etcd 백업으로도 복구할 수 없습니다. Default Namespace는 삭제가 불가능하도록 관리해야하는 클러스터의 핵심 리소스입니다. 따라서 Admission Controller 혹은 다른 접근 통제 매커니즘을 활용하여 신중하게 관리하는 것을 강력하게 권장합니다.
- 장애 원인:
defaultnamespace 삭제 시kubernetesService가 함께 삭제됨 - 영향 범위: API Server 접근 불가 → 클러스터 전체 관리 불가 → (장기화시)서비스 장애 유발
- 복구 방법: AWS Support 케이스 오픈 필수 (Severity: Critical)
AWS Support에 Critical 케이스를 오픈하고, Account Team과 WWSO Specialist를 티켓에 참조로 추가하여 신속한 복구를 요청하세요.
2. 장애 원인 분석
2.1 Default Namespace의 역할
default namespace는 단순히 사용자 워크로드를 배포하는 기본 공간이 아닙니다. Kubernetes 클러스터의 핵심 리소스들이 이 namespace에 존재합니다.
default namespace에 포함된 핵심 리소스:
kubernetes Service는 클러스터 내부에서 API Server에 접근하기 위한 유일한 경로입니다. 이 Service가 삭제되면 모든 Kubernetes 컴포넌트가 Control Plane과 통신할 수 없게 됩니다.
2.2 장애 발생 메커니즘
default namespace 삭제 시 발생하는 연쇄적인 장애 과정을 다이어그램으로 살펴보겠습니다.
장애 발생 순서:
- namespace 삭제 명령 실행:
kubectl delete namespace default - Cascading 삭제: namespace 내 모든 리소스가 함께 삭제됨
- kubernetes Service 삭제: API Server endpoint가 사라짐
- 연결 단절: 클러스터 내부 컴포넌트들이 API Server와 통신 불가
- 관리 불가 상태: 어떤 kubectl 명령어도 실행할 수 없음
워커 노드에 미치는 영향
API Server endpoint가 사라진 상태가 지속되면 워커 노드에도 연쇄적인 영향이 발생합니다.
시간에 따른 노드 상태 변화:
이 상황에서는 Control Plane 자체에 접근이 불가능하기 때문에, Node Controller도 실제로 노드 상태를 업데이트하거나 taint를 추가하는 작업을 수행할 수 없습니다. 결과적으로 클러스터 전체가 "frozen" 상태에 빠지게 되며, 기존에 실행 중인 Pod들은 계속 동작하지만 새로운 스케줄링이나 상태 변경은 불가능합니다.
Frozen 상태에서의 서비스 영향
클러스터가 frozen 상태에 빠지면 기존 워크로드는 일정 시간 동안 계속 동작하지만, 시간이 경과할수록 서비스에 심각한 영향이 발생합니다.
즉시 영향받는 부분:
- ❌ 새로운 Pod 스케줄링 불가
- ❌ Pod 재시작/재배포 불가
- ❌ ConfigMap, Secret 변경 반영 불가
- ❌ HPA(Horizontal Pod Autoscaler) 스케일링 불가
시간 경과에 따른 서비스 영향:
- DNS 캐시가 만료되거나 TLS 인증서 만료시 서비스 디스커버리 실패로 인한 통신 불가
- Pod가 OOMKilled 되거나 crash 되면 재시작 불가
- 노드가 장애나면 해당 노드의 모든 워크로드 손실
- ALB/NLB Target Group 업데이트 불가로 트래픽 라우팅 실패
시간이 지날수록 장애 범위가 확대되므로, 가능한 빨리 AWS Support에 연락하는 것이 중요합니다.
3. 장애 대응 절차
Step 1: 장애 상황 확인
default namespace 삭제로 인한 장애가 의심되면, 먼저 클러스터 상태를 확인해야 합니다.
1-1. kubectl 접근 테스트
가장 먼저 kubectl 명령어가 정상 작동하는지 확인합니다.
# 클러스터 정보 조회 시도
kubectl cluster-info
# 예상되는 에러 메시지
# Unable to connect to the server: dial tcp: lookup kubernetes on 10.100.0.10:53: no such host
# 또는
# The connection to the server <cluster-endpoint> was refused
위와 같은 에러가 발생하면 kubernetes Service가 삭제되어 API Server에 접근할 수 없는 상태입니다.
1-2. AWS CLI로 클러스터 상태 확인
kubectl이 작동하지 않더라도 AWS CLI를 통해 EKS 클러스터의 상태를 확인할 수 있습니다.
# 클러스터 상태 확인
aws eks describe-cluster \
--name <cluster-name> \
--query 'cluster.{Name:name,Status:status,Endpoint:endpoint,Version:version}' \
--output table
# 예상 출력 (클러스터 자체는 ACTIVE 상태)
# -------------------------------------------------------------------
# | DescribeCluster |
# +----------+------------------------------------------------------+
# | Name | my-eks-cluster |
# | Status | ACTIVE |
# | Endpoint| https://XXXXX.gr7.ap-northeast-2.eks.amazonaws.com |
# | Version | 1.31 |
# +----------+------------------------------------------------------+
# 노드 그룹 상태 확인
aws eks list-nodegroups --cluster-name <cluster-name>
aws eks describe-nodegroup \
--cluster-name <cluster-name> \
--nodegroup-name <nodegroup-name> \
--query 'nodegroup.{Name:nodegroupName,Status:status,DesiredSize:scalingConfig.desiredSize}' \
--output table