Incident Library

IL-0404 PortSwigger · 2024-10-24kubernetesaws

Karpenter 가 운영 EKS 노드를 Bottlerocket v1.26.0 으로 바꾼 뒤 BSEE SaaS 고객 인스턴스의 파드가 모두 crash loop back off 에 빠졌다

2024년 10월 16일 Bottlerocket 저장소의 기본 브랜치에 PR-158 이 머지됐다. 이 변경은 모든 서비스에 기본 보안 설정 MemoryDenyWriteExecute=yes 를 넣었다. 이 설정은 쓰기와 실행이 함께 가능한 메모리를 막는다. 10월 24일 02:00 에 이 PR 을 담은 v1.26.0 이 나왔고, AWS 는 02:00 부터 04:30 사이 eu-west-1 에서 v1.26.0 을 최신 Bottlerocket AMI 로 내놓았다. 04:00 에 Karpenter 가 새 버전을 알아채고 운영 EKS 클러스터의 EC2 노드 갱신을 시작했다. 이 설정 때문에 Java 처럼 JIT 컴파일에 기대는 애플리케이션이 실행되지 못했다. systemd 문서도 이 옵션이 JIT 실행 엔진처럼 실행 중에 코드를 만드는 프로그램과 맞지 않는다고 분명히 적고 있다.

04:45 에 SaaS 가용률 지표가 크게 떨어졌지만, 기술팀이 장애를 안 것은 08:07 Growth 팀의 채널 메시지와 08:15 Product 팀원의 구두 알림 뒤였다. 기술팀은 파드 로그의 오류를 보고 OS 문제를 의심했다. EC2 노드가 05:33 에 갱신됐고 OS 가 v1.26.0 이라는 것을 확인한 뒤, Bottlerocket 저장소에서 Issue 4260 을 찾았다. 기술팀은 SaaS 운영 계정의 EC2 인스턴스를 모두 v1.25.0 으로 되돌리기 시작했고, 09:15 에 고객 인스턴스가 다시 올라왔다. 모든 고객이 3시간 45분 동안 영향을 받았고, 지원 문의는 1건이었으며 고객 데이터 손실은 없었다.

심각도
–
영향 범위
Every BSEE SaaS customer instance was unavailable and showed the Environment Unavailable message; one support case was raised and no customer data was lost
영향 사용자
all BSEE SaaS customers
지역
eu-west-1
감지까지
–
복구까지
3h 45m

증상

2024년 10월 24일 BSEE SaaS 고객 인스턴스가 모두 Environment Unavailable 메시지를 띄웠다. 04:45 에 SaaS Uptime Over Time 지표의 가용률이 크게 떨어졌고, 08:07 에 Growth 팀이 장애를 채널에 알렸다.

고객의 Kubernetes 파드는 모두 crash loop back off 상태였다. 로그에는 keystore 를 만드는 createKeystore 명령 직후 "Error occurred during initialization of VM" 과 "Failed to mark memory page as executable - check if grsecurity/PaX is enabled" 가 찍혔고, init-enterprise-server-keystore 컨테이너의 스트림이 "Stream closed EOF" 로 닫혔다.

기술팀은 오류 문구를 보고 OS 문제를 의심했다. AWS EC2 콘솔에서 EC2 노드가 05:33 에 갱신됐고 그 뒤 워크로드가 새 노드로 옮겨간 것을 확인했다. OS 버전이 v1.26.0 인 것을 보고 Bottlerocket GitHub 저장소를 찾아, Java 기반 애플리케이션을 v1.26.0 에서 돌릴 때의 호환성 문제를 다룬 Issue 4260 을 찾았다.

증상 컨테이너 재시작 반복서비스 중단

원인

촉발
2024년 10월 24일 eu-west-1 에 Bottlerocket v1.26.0 이 최신 AMI 로 나오자, Karpenter 가 이를 알아채고 04:00 부터 운영 EKS 클러스터의 EC2 노드를 새 버전으로 바꾸기 시작했다.

감지

04:45 에 SaaS Uptime Over Time 지표의 가용률이 크게 떨어졌다. 08:07 에 Growth 팀이 BSEE cloud onboarding issues 채널에 장애를 알렸고, 08:15 에 Product 팀원이 기술팀에 구두로 알렸다.

조치

후속 조치

교훈

–

출처

참고 문서

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 노드 운영체제 이미지, Karpenter. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.