IL-0062 Ravelin · 2019-07-26 (게시일)kubernetesgcpnetworking
Ravelin 은 GKE 의 쿠버네티스로 옮기는 작업의 마지막 단계로 API 계층을 기존 VM 에서 클러스터로 옮기고, 외부에서 API 에 접근할 수 있도록 Ingress 를 설정했다. 설정은 순조로웠지만 통합 테스트가 가끔 502 오류를 받았다. 글쓴이 Phil Pearl 은 원인을 찾아간 과정은 건너뛰고 결론만 정리했다.
흔히 파드 제거는 이런 순서로 일어난다고 생각한다. 레플리케이션 컨트롤러가 파드를 지우기로 하고, 파드의 엔드포인트가 서비스나 로드 밸런서에서 빠져 새 트래픽이 끊긴다. 그다음 파드가 preStop 훅이나 SIGTERM 을 받아 새 연결을 받지 않고, 기존 연결이 모두 끝나면 종료한다. 실제로는 엔드포인트 제거와 SIGTERM 이 순서 없이 동시에 일어난다. 일반 서비스는 엔드포인트가 아주 빨리 빠져 문제가 드러나지 않지만, Ingress 는 반응이 꽤 느려서 파드가 SIGTERM 을 받고 한참 뒤에야 엔드포인트 변경이 반영될 수 있다. 그동안 파드가 새 연결을 처리하지 않으면 클라이언트는 오류를 받는다.
글쓴이는 쿠버네티스에서는 흔히 배운 방식의 정상 종료를 하지 말라고 권한다. 파드는 SIGTERM 을 거의 무시하고 계속 새 연결을 처리해야 한다. 가능하면 클라이언트에게 다른 곳으로 연결을 옮기라고 알리고, HTTP 라면 응답 헤더에 "Connection": "close" 를 넣을 수 있다. 파드는 종료 유예 시간이 끝나 SIGKILL 을 받을 때 비로소 종료하고, 유예 시간은 로드 밸런서에 변경이 반영되는 시간보다 길게 잡는다. 동작을 바꿀 수 없는 외부 코드라면 유예 시간만큼 잠드는 preStop 훅을 넣어 파드가 아무 일 없다는 듯 계속 요청을 처리하게 한다. 글은 Ravelin 이 실제로 무엇을 바꿨는지는 적지 않았다.
Ravelin 이 API 계층을 기존 VM 에서 GKE 의 쿠버네티스 클러스터로 옮기고 Ingress 를 설정한 뒤, 통합 테스트가 가끔 502 오류를 받기 시작했다.
오류는 파드가 내려갈 때 생겼다. 파드가 SIGTERM 을 받은 뒤에도 Ingress 는 한동안 그 파드로 새 연결을 보냈다. 그런데 파드는 흔히 배우는 방식대로 정상 종료를 시작해 새 연결을 더 받지 않았다.
Ingress 를 설정한 뒤 통합 테스트가 가끔 502 오류를 받는 것을 보고 알았다.
–
–
쿠버네티스에서 엔드포인트 제거와 SIGTERM 은 동시에 일어나므로, SIGTERM 을 받았다고 바로 새 연결을 거부하면 안 된다. Ingress 는 특히 엔드포인트 변경을 늦게 반영한다. 파드는 종료 유예 시간이 끝날 때까지 계속 요청을 처리해야 하고, 유예 시간은 로드 밸런서에 변경이 반영되는 시간보다 길어야 한다.
IL-0053 Ingress NGINX Controller의 어드미션 웹훅이 인증 없이 열려 있어, 조작한 Ingress 객체로 NGINX 설정을 주입해 원격 코드를 실행하고 클러스터의 모든 Secret을 읽을 수 있었다Wiz · 2025같은 원인 · 공통 인그레스 컨트롤러
IL-0081 ingress-nginx 의 enable-serial-reloads 옵션이 NGINX 리로드 중에 엔드포인트 동적 갱신을 막아, 배포 중 트래픽이 이미 없는 파드로 가면서 API 요청이 타임아웃됐다.Cresta · 2025같은 원인 · 공통 인그레스 컨트롤러
IL-0139 Calico 네트워크 정책을 쓰는 GKE 클러스터를 1.22 이상으로 업그레이드하자 경쟁 조건 때문에 CNI 정리가 Unauthorized 로 실패해 파드가 Terminating 이나 Pending 에 멈췄다.Google Cloud · 2022같은 원인 · 공통 파드 종료 처리
IL-0106 잘못된 IngressRoute 매니페스트가 Traefik v2 버그를 건드려 Traefik 파드가 모두 재시작된 뒤 Kubernetes 의 모든 서비스가 404 를 냈다DFDS · 2021같은 원인 · 공통 인그레스 컨트롤러
IL-0011 HAProxy 인그레스 템플릿이 백엔드 파드를 IP 순으로 정렬해 일부 파드에 요청이 몰리고 인그레스 컨테이너가 OOMKilled 됐다Skyscanner · 2019같은 원인 · 공통 인그레스 컨트롤러
https://incidentlib-mcp.benchlet.com/mcpAPI 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.
IL-0072 etcd 쓰기 지연으로 API 서버가 오래된 데이터를 읽어 클러스터 상태가 두 가지로 번갈아 보였고, 주 운영 클러스터 전체가 약 4시간 멈췄다Nordstrom · 2017같은 원인 · 공통 인그레스 컨트롤러