Timeouts no API server do Kubernetes no GKE: três bugs em três camadas, e a correção veio no kernel do Linux
Aprofundamento CEVIU
Aprofundamento
O caso começou em janeiro de 2026 como um ticket aparentemente banal: pods falhando de forma intermitente ao falar com o API server. O cliente tinha um ambiente GKE multicluster na região europe-west, com Private Service Connect (PSC) expondo o control plane de forma privada. O caminho de um pod até o kube-apiserver é longo: nó worker, NAT e proxy do PSC, balanceador interno, NIC da VM do control plane e, ali, o Envoy na frente do kube-apiserver. O PSC injeta um proxy protocol header em cada conexão nova para preservar o IP do cliente.
Os suspeitos óbvios caíram um a um: operator customizado (kopf), External Secrets Operator, agentes de segurança, conntrack (cerca de 50% de 1,3M de entradas) e tamanho da VM do control plane. A virada veio com capturas de pacotes simultâneas na NIC da VM e dentro do container do kube-apiserver. Os SYNs chegavam, mas o cliente recebia um ACK fora de lugar, que pertencia a uma conexão anterior com a mesma porta de origem. É o challenge ACK da RFC 5961, que o cliente deveria responder com RST para limpar o estado velho.
Em fevereiro de 2026, uma mudança no user space packet switch (USPS) do PSC passou a descartar ACKs classificados como inválidos antes do SYN-ACK. Os challenge ACKs se encaixavam nessa descrição e sumiam em silêncio. Como o NAT do PSC faz muitos pods compartilharem portas de origem, as colisões de 5-tuple eram frequentes. O rollback da mudança aliviou o problema, e em março de 2026 o cliente confirmou a recuperação. Mas era paliativo: a VM mantinha conexões em FIN_WAIT_2 por mais de dois minutos. Daí os outros bugs: reordenamento de pacotes no PIGv por causa do miss-thread do PSC e o half-close do Envoy, que mantém o socket aberto e, por não ser órfão, escapa do tcp_fin_timeout de 60 segundos. A correção definitiva foi um patch no kernel do Linux.
Por que isso importa
Para quem opera plataforma sobre GKE, o caso sugere um critério de triagem: quando o sintoma aparece em cinco clusters e em clientes externos como runners de CI, o problema provavelmente está no caminho de rede, não nos workloads. Remover operators e agentes costuma ser a primeira reação, mas aqui custou semanas. Capturas simultâneas em dois pontos do caminho foram o que destravou a investigação. Também vale registrar que um fix de segurança numa camada gerenciada pode quebrar uma dependência implícita, e que mitigação não é correção.
Linha do tempo
Google publica a análise dos três bugs em três camadas, com correção final no kernel do Linux.
Perguntas frequentes
Quais foram as três causas do timeout no API server do GKE?
A fonte descreve três bugs em camadas diferentes. O primeiro foi o reordenamento de pacotes no PIGv, causado pelo processamento de miss-thread do Private Service Connect. O segundo envolveu o half-close do Envoy, que deixa o socket aberto e faz o tcp_fin_timeout não valer. O terceiro, que levou ao patch no kernel do Linux, aparece no texto como a correção final.
Por que aumentar a VM do control plane não resolveu?
Porque o kube-apiserver não estava sobrecarregado. As latências dele estavam saudáveis. O problema estava no caminho de rede entre os clientes e o API server, no tratamento de conexões fechadas e reutilizadas.
O que é um challenge ACK e por que ele foi descartado?
É um mecanismo da RFC 5961. Quando chega um SYN que bate com o estado de uma conexão recém-fechada, o servidor responde com um ACK de desafio, e o cliente legítimo reage com RST para limpar o estado. Uma mudança no USPS do PSC passou a tratar esses ACKs como inválidos e a descartá-los, o que quebrou o fluxo.
O rollback da mudança no USPS resolveu o problema?
Resolveu o sintoma. Em março de 2026 o cliente confirmou que os clusters afetados haviam se recuperado. Mas a fonte chama o rollback de band-aid, porque a pergunta sobre o FIN_WAIT_2 prolongado continuava sem resposta.
Fontes
- cloud.google.comfonte original
- Categoria
- CEVIU DevOps
- Publicado
- 30 de outubro de 2026
- Editoria
- CEVIU DevOps

