Incident Library
적용된 필터 원인소프트웨어 결함도메인쿠버네티스모두 풀기검색어 없이 필터만 적용한 목록입니다. 최근 사례부터입니다.
추천 필터 검색하면 검색어에서 찾은 분류 값이 여기에 나옵니다.

그래프

  • 원인
  • 구성 요소
  • 증상
  • 기여 요인
  • 사례

사례46건

46건 중 16~20번째

  1. 증상

    운영 EKS 클러스터가 읽기 전용 상태가 됐다. etcd 데이터베이스 공간이 한도를 넘자 API 서버가 새 파드 생성이나 디플로이먼트 스케일 조정처럼 객체를 바꾸는 요청을 모두 거부했다. 글쓴이는 이를 P1 장애로 다뤘다.

    촉발

    Kyverno 1.12 가 ephemeralreports 객체를 너무 많이 만들어 etcd 에 쌓았다.

    원인
    구성 요소
    기여 요인
    감지

    클러스터가 읽기 전용이 되어 쓰기 요청이 거부되면서 드러났다. 글쓴이는 kube-apiserver 감사 로그에서 mvcc: database space exceeded 를 찾는 CloudWatch Logs Insights 쿼리로 오류가 처음 나온 시각을 확인하는 방법을 소개했다.

    조치
    • AWS 의 EKS 팀과 etcd 팀이 8GB 와 10GB 이던 etcd 저장 공간을 12GB 로 늘려 잠금을 풀었다.
    • AWS 엔지니어가 여러 승인을 거친 뒤, 정리되지 않고 쌓인 ephemeralreports 객체를 etcd 에서 직접 지웠다.
    후속 조치
    • apiserver_storage_size_bytes 지표로 etcd 데이터베이스 크기를 모니터링해 8GB 한도에 닿지 않게 한다.
    • Kyverno 1.12 를 쓰고 있다면 ephemeralreports 가 쌓이는 문제를 고친 v1.12.4 로 업그레이드한다. ephemeralreports 가 계속 생기면 admission 이벤트 보고를 끄거나 --aggregationWorkers 를 늘린다.
    교훈

    EKS 의 etcd 데이터베이스 한도는 8GB 다. 한도를 넘으면 클러스터가 읽기 전용이 되고, 컴팩션도 막혀 객체를 지워 공간을 되찾을 수 없다. 글쓴이가 관찰한 바로는 객체를 지우는 스크립트도 etcd 가 잠기기 전에만 통한다. 그러므로 etcd 크기를 모니터링하고 8GB 에 절대 닿지 않게 해야 한다. EKS 에서는 etcd 에 직접 접근할 수 없어 잠긴 etcd 를 스스로 풀 수 없다. AWS 지원팀에 의존해야 하고, 해결 방법을 알아도 실행되기까지 오래 걸릴 수 있다. apiserver_storage_objects 지표로 리소스 종류별 객체 수를 보면 무엇이 etcd 공간을 차지하는지 찾을 수 있다.

  2. 증상

    2024년 4월 22일 14:05 UTC 쯤 토론토 데이터센터에서 새 LKE 클러스터가 프로비저닝되지 않았다.

    촉발

    앞서 배포한 API 업데이트가 의도대로 동작하지 않았고, 새 LKE 클러스터를 프로비저닝할 때 타임아웃을 일으켰다.

    원인
    구성 요소
    기여 요인
    –
    감지

    2024년 4월 22일 14:05 UTC 쯤 Linode 팀이 토론토 데이터센터에서 새 LKE 클러스터가 프로비저닝되지 않는 것을 알아채고 조사를 시작했다.

    조치
    • 4월 23일 15:03 UTC 에 문제가 된 토론토 데이터센터의 인프라를 새 LKE 클러스터 프로비저닝에 쓰지 않도록 껐다.
    • 4월 25일 16:45 UTC 쯤 의도대로 동작하지 않던 API 업데이트를 바로잡는 수정을 적용했고, 18:05 UTC 에 새 클러스터 생성이 완전히 돌아온 것을 확인했다.
    • 수정을 적용한 뒤 잠시 빼 두었던 인프라를 다시 프로비저닝에 넣었다.
    교훈

    원인은 오류가 드러난 인프라가 아니라 앞서 배포한 API 업데이트에 있었다. 그런데도 실패는 대부분 한 데이터센터의 백엔드 자원 하나에 몰렸다. 그 자원을 새 클러스터 프로비저닝에서 빼서, 근본 원인을 찾는 데 걸린 사흘 동안 고객 영향을 줄였다.

  3. 증상

    2024년 2월 13일, 설 연휴를 마치고 돌아온 데브시스터즈 인프라셀에 개발 서버에 접속이 안 된다는 요청이 들어왔다. 연휴 직후라 사람이 손댄 변경은 없었다.

    촉발

    Let's Encrypt 가 DST Root CA X3 단계적 폐기의 첫 단계로 2024년 2월 8일부터 기본 체인을 ISRG Root X1 체인으로 바꾸고, DST Root CA X3 체인을 대체 체인으로 내주기 시작했다.

    원인
    구성 요소
    기여 요인
    –
    감지

    설 연휴 뒤인 2월 13일 개발 서버에 접속이 안 된다는 요청이 인프라셀에 들어왔다. 서버가 내주는 인증서 체인을 열어 보다가 만료된 DST Root CA X3 체인이 서빙되는 것을 발견했다.

    조치
    • cert-manager 의 preferredChain 선택 로직을 고치는 PR 을 올렸고, PR 은 머지됐다.
    교훈

    오래 숨어 있던 버그가 외부 서비스의 기본값 변경으로 갑자기 드러날 수 있다. 이번에는 Let's Encrypt 가 기본 체인을 바꾸면서 cert-manager 의 체인 선택 버그가 드러났다. 여기에 신뢰 앵커의 만료일을 검사하고 최상위 인증서를 무조건 검증하려는 구버전 BoringSSL 을 쓰고 있어서 접속 장애로 이어졌다. ACME 클라이언트마다 체인을 고르는 방식이 달라서, 설정한 preferredChain 과 실제로 발급된 체인이 다를 수 있다.

  4. 증상

    운영 중 장애로 드러난 증상은 없다. 이 사례는 Cycode Labs가 Argo CD를 조사하다 찾은 취약점 CVE-2024-31989이고, 심각도 점수는 9.1이다.

    촉발

    클러스터 안의 권한 낮은 파드 하나가 kube-DNS로 Argo CD Redis 주소를 찾아 6379 포트로 암호 없이 접속할 수 있었다. Argo CD는 캐시에 든 매니페스트를 cacheEntryHash로 검증했는데, 이 해시는 비밀 키 없이 fnv64a로 만든 값이라 누구나 다시 계산할 수 있었다.

    원인
    구성 요소
    기여 요인
    감지

    Cycode Labs가 Argo CD의 쿠버네티스 구성 요소를 조사하다 찾았다. 2024년 1월 18일 GitHub Security Advisories로 Argo CD 팀에 알렸다.

    조치
    • Argo CD 팀이 2024년 5월 21일 Redis 서버 암호를 미리 정해 두는 2.11.1, 2.10.10, 2.9.15, 2.8.19 버전을 냈다. 사전 정보 없이는 Redis에 접속할 수 없게 됐지만, 문제를 일부만 막는 조치였다.
    교훈

    Argo CD를 2.11.1, 2.10.10, 2.9.15, 2.8.19 이상으로 올린다. argocd-redis-network-policy 네트워크 정책이 있고 켜져 있는지 확인한다. 네트워크 정책이 실제로 적용되려면 CNI가 제대로 설정돼 동작해야 한다. Argo CD 플러그인으로 Secret을 넣지 말고 컨트롤러 방식의 Secret 관리 도구를 써서 Secret이 Redis에 남지 않게 한다. 보안을 더 챙기려면 Argo CD를 다른 애플리케이션과 분리된 전용 클러스터에 둔다. 비밀 키 없이 만든 해시는 아무나 다시 계산할 수 있어서 무결성을 지켜 주지 못한다.

  5. 증상

    Workload Identity 를 켠 GKE 클러스터에서 애플리케이션 로그 양이 크게 늘었다. 늘어난 로그는 "Unable to sync sandbox" 문자열이 든 디버그 로그였고, Cloud Logging 으로 수집돼 수집 할당량을 소모했다. 월 무료 사용량을 넘긴 고객에게는 추가 요금이 나왔다.

    촉발

    gke-metadata-server 0.4.272 부터 0.4.280 까지의 버전에 잘못된 설정이 들어 있어 디버그 로그를 높은 빈도로 냈다. 11-02 공지는 이것을 버그라고 불렀다.

    원인
    구성 요소
    기여 요인
    –
    감지

    상태 페이지의 첫 공지는 2023-11-02 13:32 PDT 에 조사 중이라는 내용으로 올라왔다. 고객은 gke-metadata-server 데몬셋의 components.gke.io/component-version 어노테이션을 보고 자기 클러스터가 영향받는지 확인할 수 있었다.

    조치
    • 과도한 로그를 더 이상 Cloud Logging 으로 수집하지 않게 하는 수정을 GKE 전체 플릿에 배포했다.
    • Rapid 채널 고객에게 우회 방법으로 컨트롤 플레인을 1.28.2-gke.1157000 이상 또는 1.27.7-gke.1038000 이상으로 올리도록 안내했다.
내 클러스터에도 있는지 확인하기

이 46건에서 가장 많이 나오는 구성 요소: 인그레스 컨트롤러, 리눅스 커널. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.

원인별1

소프트웨어 결함46건

  1. IL-0058 Argo CD 에서 여러 앱이 함께 선언한 네임스페이스가 force 동기화로 지워져 앱 약 97개가 Missing/OutOfSync 상태에서 빠져나오지 못했다.
  2. IL-0150 DynamoDB DNS 자동화의 경쟁 조건이 us-east-1 리전 엔드포인트의 DNS 레코드를 비워 DynamoDB 와 EC2 인스턴스 시작이 실패했고, 그 여파로 EKS, ECS, Fargate 의 컨테이너 시작과 클러스터 스케일링이 14시간 넘게 막혔다
  3. IL-0104 Istio 의 공격적인 DNS 캐시 갱신과 클라이언트 포트 재사용, kube-proxy 가 종료된 파드의 conntrack 항목을 정리하지 않는 문제, 2분짜리 UDP conntrack 기본 타임아웃이 겹쳐 CoreDNS 파드가 OOMKilled 됐다.
  4. IL-0171 Bottlerocket AMI 에 libdcgm.so 가 없어 GPU 노드의 AcceleratedHardwareReady 가 False 가 됐고, Karpenter 노드 자동 복구가 Ready 뒤 10~11분마다 GPU 노드를 교체하는 일을 끝없이 되풀이했다.
    Inflab2025
  5. IL-0147 AKS 202508 노드 이미지가 캐시되지 않은 쿠버네티스 바이너리를 받을 때 HTTP 프록시 설정을 쓰지 않아, 프록시 뒤에 있는 노드의 프로비저닝이 CSE 종료 코드 31 로 실패했다.
  6. IL-0247 쿠버네티스로 옮긴 검색 시스템 Manas 에서 요청 백만 건에 한 건이 평소보다 100배 느려졌다
  7. IL-0078 EKS 업그레이드 중 Terraform 으로 KMS 시크릿 암호화를 켜자 워커 노드의 IAM 권한이 빠져 운영 ZenML Pro 워크스페이스에 모두 접속할 수 없게 됐다
    ZenML2025
  8. IL-0053 Ingress NGINX Controller의 어드미션 웹훅이 인증 없이 열려 있어, 조작한 Ingress 객체로 NGINX 설정을 주입해 원격 코드를 실행하고 클러스터의 모든 Secret을 읽을 수 있었다
    Wiz2025
  9. IL-0233 eu-west1 에서 Managed Kubernetes 의 거의 모든 파드가 네트워크 연결을 잃었고 롤백으로도 돌아오지 않았다
    Nebius2025
  10. IL-0081 ingress-nginx 의 enable-serial-reloads 옵션이 NGINX 리로드 중에 엔드포인트 동적 갱신을 막아, 배포 중 트래픽이 이미 없는 파드로 가면서 API 요청이 타임아웃됐다.
    Cresta2025
  11. IL-0157 IP ACL 을 켠 LKE 클러스터에 새 노드가 붙지 못해 오토스케일링이 실패했다
    Linode2025
  12. IL-0138 nvidia-dkms-390 드라이버 빌드 실패로 망가진 커널 헤더가 몇 주 동안 방치됐다가, 정전 뒤 재부팅하자 하나뿐인 마스터 노드가 커널 패닉에 빠져 홈랩 쿠버네티스 클러스터가 6일 동안 멈췄다.
  13. IL-0347 FR-PAR-1 가용 영역에서 하이퍼바이저 약 25% 의 VPC 연결이 11분 동안 끊겼다
  14. IL-0495 쿠버네티스에서 도는 내부 로드 밸런서 일부가 헬스 체크 실패로 한꺼번에 내려가고 남은 인스턴스가 연결 폭증으로 무너졌다
  15. IL-0148 클러스터에 없는 노드를 가리키는 노드 어피니티를 가진 파드 하나 때문에 kube-scheduler 가 패닉에 빠져 AKS 클러스터에서 파드가 하나도 스케줄되지 않았다
  16. IL-0077 Kyverno 1.12 가 만든 ephemeralreports 객체가 쌓여 EKS 의 etcd 데이터베이스가 한도를 넘었고 운영 클러스터가 읽기 전용이 되어 모든 쓰기가 거부됐다
  17. IL-0161 앞선 API 업데이트가 의도대로 동작하지 않아 토론토 데이터센터에서 새 LKE 클러스터 프로비저닝이 타임아웃으로 사흘 넘게 실패했다.
    Linode2024
  18. IL-0173 Let's Encrypt 가 기본 체인을 바꾼 뒤 cert-manager 의 preferredChain 처리 버그로 만료된 DST Root CA X3 체인 인증서가 발급돼, 구버전 BoringSSL 을 쓰는 클라이언트가 개발 서버에 접속하지 못했다.
  19. IL-0065 Argo CD의 Redis 캐시가 기본으로 암호 없이 클러스터 안 모든 파드에 열려 있어, 캐시된 매니페스트를 바꿔치기해 클러스터를 장악할 수 있었다
    Cycode2024
  20. IL-0141 Workload Identity 를 쓰는 GKE 클러스터에서 gke-metadata-server 가 "Unable to sync sandbox" 디버그 로그를 대량으로 내 Cloud Logging 할당량을 소모하고 추가 요금이 나왔다
  21. IL-0151 us-east-1 의 Lambda 셀 하나가 처음 겪는 규모로 커지며 잠재 결함이 드러나 Lambda 호출이 실패했고, Lambda 에 기대는 EKS 의 새 클러스터 생성도 오류와 지연을 겪었다.
  22. IL-0174 Fluent Bit 2.0 으로 올린 로그 수집 사이드카 가운데 Kafka output 플러그인을 쓰는 컨테이너가 SIGSEGV 로 계속 재시작됐다.
  23. IL-0112 나중에 회수된 EKS 노드 AMI 로 노드를 교체한 뒤 노드가 PLEG is not healthy 를 보고하며 NotReady 를 오갔고 파드 네트워크 타임아웃이 났다
    DFDS2022
  24. IL-0139 Calico 네트워크 정책을 쓰는 GKE 클러스터를 1.22 이상으로 업그레이드하자 경쟁 조건 때문에 CNI 정리가 Unauthorized 로 실패해 파드가 Terminating 이나 Pending 에 멈췄다.
  25. IL-0175 JVM 파드의 CPU requests 를 1코어로 줄이자 JVM 이 노드의 CPU 36개를 인식해 Reactor Netty 스레드가 늘고 메모리 사용량이 경보 기준을 넘었다
  26. IL-0403 mybinder.org 의 prod hub 가 실제로는 넘지 않은 파드 quota 를 넘었다는 오류 때문에 새 파드를 만들지 못했다
  27. IL-0462 GKE 위 MySQL 파드 일부가 시작과 종료에 오래 걸려 KateSQL 인스턴스 교체가 느려졌다
  28. IL-0106 잘못된 IngressRoute 매니페스트가 Traefik v2 버그를 건드려 Traefik 파드가 모두 재시작된 뒤 Kubernetes 의 모든 서비스가 404 를 냈다
    DFDS2021
  29. IL-0032 mutating admission controller 의 JSON 패치 버그로 일주일 동안 새 코드가 배포되지 않았고, 운영 서비스 하나는 파드가 두 개만 남아 오류율이 치솟았다
    Airbnb2020
  30. IL-0146 Central India 에서 새로 만든 Azure CNI 클러스터의 VM 이 높은 값의 MAC 주소를 받으면서 bridge 모드 Azure CNI 의 오래된 버그가 드러나 터널 연결이 끊기고 kubectl exec 와 파드 간 통신이 타임아웃됐다.
  31. IL-0041 fluent-bit 이 오류 없이 멈춰 운영 노드 한 대의 애플리케이션 로그가 Elasticsearch 로 전혀 가지 않았다.
  32. IL-0029 CPU 한도를 건 컨테이너가 사용량이 한도에 한참 못 미치는데도 스로틀링되어 사용자 대면 서비스의 지연 시간이 늘었다.
    Buffer2020
  33. IL-0190 쿠버네티스 업그레이드로 etcd 리더가 있던 노드가 갑자기 종료된 뒤, Cortex distributor 두 개가 옛 리더와 맺은 TCP 연결이 멈춘 채 그 연결을 계속 써서 런던 리전 Hosted Prometheus 쓰기가 12분 동안 일부 실패했다.
  34. IL-0196 Redis Operator 로 레플리카를 늘리면서 메모리 한도를 낮추자 데이터를 가진 유일한 Redis 파드가 재시작됐고, Sentinel 이 빈 레플리카를 마스터로 올려 데이터가 모두 지워졌다.
    Palark2020
  35. IL-0012 CPU limit 과 커널 CFS 쿼터 버그로 파드가 과하게 스로틀링돼 헬스 체크가 실패하고 애플리케이션이 멈췄다
    Omio2020
  36. IL-0143 GKE 1.13 과 1.14 의 특정 버전으로 업그레이드한 노드에서 커널 패닉이 늘었다.
  37. IL-0062 GKE Ingress 뒤의 파드가 SIGTERM 을 받자마자 새 연결을 받지 않고 정상 종료해서 API 에 가끔 502 오류가 났다
  38. IL-0011 HAProxy 인그레스 템플릿이 백엔드 파드를 IP 순으로 정렬해 일부 파드에 요청이 몰리고 인그레스 컨테이너가 OOMKilled 됐다
  39. IL-0030 쿠버네티스 v1.7.4 클러스터에서 노드들이 한꺼번에 NotReady 가 되어 쓸 수 있는 노드가 20% 미만으로 줄었다.
  40. IL-0050 ndots:5, Alpine 의 musl 리졸버, Netty 4.1.30 의 DNS 처리 문제가 겹쳐 쿠버네티스 서비스가 클러스터 밖 Redis 호스트 이름을 반복해서 해석하지 못했다
  41. IL-0051 외부 업체의 로그 클라이언트가 새 컨테이너가 뜰 때마다 파일 디스크립터를 다시 열고 이전 것을 닫지 않아 쿠버네티스 노드가 too many open files 로 내려갔다
  42. IL-0074 워커 노드가 잇달아 Not Ready 에 빠지고 네트워크와 DNS 실패로 사이드카가 죽으면서, AirMap 플랫폼의 모든 서비스가 다섯 시간 동안 응답하지 않았다.
    AirMap2018
  43. IL-0504 mybinder.org 에서 사용자 파드가 지워지지 않고 쌓여 클러스터가 가득 차고 실행이 약 5시간 동안 실패했다
  44. IL-0038 kubelet 설정 변경을 롤링 업데이트하다 쿠버네티스 버그로 kubelet 이 올라오지 못해 한 클러스터의 노드가 NotReady 가 되고 파드 절반쯤이 축출됐다
    Oath2018
  45. IL-0072 etcd 쓰기 지연으로 API 서버가 오래된 데이터를 읽어 클러스터 상태가 두 가지로 번갈아 보였고, 주 운영 클러스터 전체가 약 4시간 멈췄다
  46. IL-0003 etcd 클러스터 재구성 뒤 쿠버네티스 버그로 linkerd 가 서비스 위치 갱신을 받지 못했고, linkerd 를 모두 재시작하자 엔드포인트가 없는 서비스를 파싱하지 못하는 오류가 드러나 플랫폼 전체가 멈췄다
    Monzo2017