{"id":"IL-0079","org":"Altinity","date":"2025-05-17","docs":["https://issuetracker.google.com/issues/418916546?pli=1"],"title":{"en":"A GKE node auto-upgrade to an ubuntu_containerd image with a kernel regression left kube-proxy unable to apply its ip6tables rules, so load balancer health checks failed and several clusters lost all ingress traffic","ko":"GKE 노드가 새 ubuntu_containerd 이미지로 자동 업그레이드된 뒤 커널에서 kube-proxy 가 쓰는 iptables 확장이 빠져, 여러 GKE 클러스터의 인그레스 트래픽이 완전히 끊겼다."},"domain":["kubernetes","gcp","networking"],"impact":{"scope":"Several Altinity.Cloud GKE clusters running ClickHouse lost all ingress traffic","users":"Customers of the affected ClickHouse clusters","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"A managed node upgrade can break kube-proxy in a way that leaves pods and nodes looking healthy while the load balancer sends nothing, because the load balancer health check depends on kube-proxy. kube-proxy's own logs showed the cause.\n\nAltinity recommends that GKE users on ubuntu_containerd restore traffic by switching to externalTrafficPolicy: Cluster, which disables the kube-proxy health check in the load balancer, move production workloads to cos_containerd, and pause auto-upgrades where possible until a patched image has been confirmed and tested.","ko":"관리형 Kubernetes 의 노드 자동 업그레이드는 사용자가 검증하지 않은 커널을 운영 노드에 올린다. 클라우드 업체의 이미지 검증만 믿으면 이런 회귀를 막지 못한다. IPv6 를 쓰지 않아도 kube-proxy 는 IPv6 iptables 규칙을 적용하므로, 그 적용이 실패하면 로드밸런서 헬스 체크도 실패해 모든 인그레스가 끊길 수 있다. 영향받은 버전이 확인되면 아직 업그레이드되지 않은 클러스터의 업그레이드부터 멈춰야 피해가 번지지 않는다. Altinity 는 영향받은 사용자에게 externalTrafficPolicy: Cluster 로 바꿔 kube-proxy 헬스 체크를 끄고, 운영 노드 이미지를 cos_containerd 로 바꾸고, 고쳐진 이미지가 확인될 때까지 자동 업그레이드를 멈추라고 권한다."},"related":[],"sources":[{"url":"https://altinity.com/blog/when-a-gke-auto-upgrade-broke-kube-proxy-what-happened-and-how-we-responded","kind":"blog","license":"unknown","archived":null}],"summary":{"en":"Early on 17 May, several GKE clusters running Altinity.Cloud ClickHouse services lost all ingress traffic. GKE had auto-upgraded their worker nodes to the ubuntu_containerd image 1.32.3-gke.1785003 with kernel 6.8.0-1022-gke. That kernel lacked support for extensions kube-proxy uses, because of a regression in how the nf_tables module was packaged or loaded, so kube-proxy could not apply its IPv6 iptables rules. Its health check failed, the load balancer health checks that depend on it failed, and the load balancers stopped sending traffic to the nodes even though pods and nodes were otherwise healthy.\n\nThe regression was a known, ongoing problem in the Ubuntu kernel series, tracked in Ubuntu bug report #2101914, a Linux kernel mailing list thread and a community write-up. Altinity names four reasons it was hard to avoid: GKE auto-upgrades nodes with no way to opt out, IPv6 iptables rules are processed even when IPv6 is not used, GKE's image validation did not catch the problem, and the newer image builds had the same regression, so there was nothing working to roll forward to.\n\nAltinity first added maintenance exceptions to pause upgrades on the clusters that were not yet affected, which kept the problem from spreading to all of its GKE clusters. Service on the affected clusters came back once the load balancer health check policy was changed to ignore failed kube-proxy health checks, without changing workloads or infrastructure. For a lasting fix Altinity started moving the affected clusters from ubuntu_containerd to the cos_containerd image family, whose kernel does not have the broken nf_tables behaviour; this meant recreating nodes and a small amount of downtime. At the time of writing GKE had not released a fixed Ubuntu image.","ko":"5월 17일 이른 시각에 Altinity.Cloud 의 GKE 클러스터 여러 개에서 인그레스 트래픽이 완전히 끊겼고, 그 위의 ClickHouse 서비스에 접속할 수 없게 됐다. GKE 가 워커 노드를 ubuntu_containerd 1.32.3-gke.1785003 이미지로 자동 업그레이드한 것이 원인이었다. 이 이미지는 커널 6.8.0-1022-gke 를 쓴다.\n\n새 커널은 nf_tables 모듈의 패키징이나 로딩 방식에 회귀가 있어 kube-proxy 가 쓰는 일부 iptables 확장을 지원하지 않았다. kube-proxy 는 IPv6 규칙을 적용하다 계속 실패했고, 로드밸런서 헬스 체크가 실패하면서 트래픽이 노드로 오지 않았다. 이 문제는 Ubuntu 커널 시리즈에서 이미 추적 중인 버그였다.\n\n잡기 어려웠던 이유가 여럿 있었다. GKE 는 노드 자동 업그레이드를 끌 수 없었다. IPv6 를 쓰지 않아도 IPv6 iptables 규칙이 처리됐다. GKE 이미지 검증이 이 문제를 잡지 못해 깨진 이미지가 운영 클러스터까지 들어왔다. 더 새로운 이미지에도 같은 회귀가 있어 다음 버전으로 올려서 벗어날 수도 없었다.\n\n팀은 먼저 아직 영향받지 않은 클러스터의 업그레이드를 멈췄다. 그다음 로드밸런서 헬스 체크가 kube-proxy 헬스 체크 실패를 무시하도록 바꿔, 워크로드와 인프라를 건드리지 않고 서비스를 되살렸다. 재발을 막으려고 영향받은 클러스터를 다른 커널을 쓰는 cos_containerd 이미지로 옮기기 시작했다."},"trigger":{"en":"GKE automatically upgraded worker nodes to the ubuntu_containerd image 1.32.3-gke.1785003, which ships kernel 6.8.0-1022-gke.","ko":"GKE 가 노드를 ubuntu_containerd 1.32.3-gke.1785003 이미지와 커널 6.8.0-1022-gke 로 자동 업그레이드했다. 이 커널은 nf_tables 모듈의 패키징이나 로딩 방식에 회귀가 있어 kube-proxy 가 쓰는 iptables 확장을 지원하지 않았다."},"severity":"unknown","symptoms":["service-unavailable"],"timeline":{"detected_after":null,"resolved_after":null},"date_kind":"incident","detection":{"en":"An OpsGenie alert fired when one ClickHouse cluster stopped receiving queries, metrics and customer connection logs.","ko":"OpsGenie 알림으로 알았다. ClickHouse 클러스터 하나에서 쿼리, 지표, 고객 접속 로그가 모두 끊겼고, 곧 다른 클러스터들도 같은 상태가 됐다."},"components":["kube-proxy","node-image","linux-kernel","cloud-load-balancer"],"root_cause":"upgrade-breaking-change","remediation":[{"text":{"en":"added maintenance exceptions to pause all upgrades on the GKE clusters that were not yet affected","ko":"아직 영향받지 않은 클러스터에 유지보수 제외를 걸어 업그레이드를 모두 멈췄다. 이 조치로 문제가 GKE 에서 운영하는 모든 클러스터로 번지는 것을 막았다."}},{"text":{"en":"changed the load balancer health check policy to ignore failed kube-proxy health checks, so traffic flowed to the nodes again","ko":"로드밸런서 헬스 체크 정책을 바꿔 kube-proxy 헬스 체크 실패를 무시하게 했다. kube-proxy 에 필요한 확장이 없는 노드로도 트래픽이 흐르면서 서비스가 회복됐다."}},{"text":{"en":"began migrating the affected clusters from the ubuntu_containerd to the cos_containerd node image by recreating nodes","ko":"영향받은 클러스터 전부를 ubuntu_containerd 에서 nf_tables 문제가 없는 다른 커널을 쓰는 cos_containerd 이미지로 옮기기 시작했다. 노드를 새 이미지로 다시 만들어야 해서 짧은 다운타임이 생겼다."}}],"action_items":[{"text":{"en":"Expand image pre-testing pipelines to catch regressions earlier","ko":"회귀를 더 일찍 잡도록 이미지 사전 테스트 파이프라인을 넓힌다."}},{"text":{"en":"Enable notifications for upcoming GKE auto-upgrades","ko":"GKE 자동 업그레이드 예정 알림을 켜서 미리 대비한다."}},{"text":{"en":"Make GKE maintenance windows required across the fleet to control when upgrades roll out","ko":"모든 클러스터에 GKE 유지보수 기간을 반드시 설정해 업그레이드가 배포되는 시점을 직접 정한다."}},{"text":{"en":"Track Google's issue and wait for a patched Ubuntu image","ko":"Google 이슈 트래커에 올린 커뮤니티 이슈를 추적하며 고쳐진 Ubuntu 이미지를 기다린다."}}],"contributing":["known-bug-unpatched","no-staged-rollout"],"recurrence_of":null,"symptoms_text":{"en":"On a Saturday, an OpsGenie alert fired for a ClickHouse cluster in Altinity.Cloud that had gone silent: no queries, no metrics, and no logs from customers trying to connect. The pods were running and the nodes looked healthy, but no traffic reached the database. Other clusters soon showed the same thing, and external access was blocked across several GKE clusters.\n\nThe failures traced back to worker nodes that GKE had just auto-upgraded to the ubuntu_containerd image 1.32.3-gke.1785003 with kernel 6.8.0-1022-gke. Shortly after the upgrade, traffic to and from these nodes dropped to zero and the load balancer health checks against them failed.\n\nkube-proxy logs showed it failing again and again to apply iptables rules, in particular for IPv6, with errors like \"Warning: Extension MARK revision 0 not supported, missing kernel module?\" and \"ip6tables-restore v1.8.9 (nf_tables): unknown option \"--xor-mark\"\". The workloads did not use IPv6, but GKE nodes process IPv6 iptables rules by default.\n\nRolling forward to the next available image, 1.32.3-gke.1927002, did not help: it had the same kernel problem.","ko":"토요일인 5월 17일 이른 시각에 OpsGenie 알림이 울렸다. Altinity.Cloud 의 ClickHouse 클러스터 하나가 갑자기 조용해졌다. 쿼리도, 지표도, 접속하려는 고객의 로그도 들어오지 않았다. 파드는 모두 Running 이었고 노드도 정상으로 보였지만 데이터베이스까지 오는 트래픽이 없었다.\n\n같은 증상이 한 클러스터에 그치지 않았다. 여러 GKE 클러스터에서 외부 접속이 막혔고, 문제를 추적하니 새로 업그레이드된 워커 노드로 좁혀졌다. 업그레이드 직후 이 노드들로 들어오고 나가는 트래픽이 0으로 떨어졌다.\n\n로드밸런서 헬스 체크가 실패하고 있었다. kube-proxy 로그에는 iptables 규칙, 특히 IPv6 규칙을 제대로 적용하지 못한다는 오류가 계속 나왔다.\nWarning: Extension MARK revision 0 not supported, missing kernel module?\nip6tables-restore v1.8.9 (nf_tables): unknown option \"--xor-mark\"\n\n워크로드가 IPv6 를 쓰지 않아도 GKE 노드는 기본으로 IPv6 iptables 규칙을 처리한다. 팀은 다른 이미지 버전 1.32.3-gke.1927002 로 올려 보았지만 같은 커널 문제가 있었다."},"updated_at":"2026-11-10T00:00:31.758101Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0079","org_slug":"altinity"}