Voltar
Timeouts no API server do Kubernetes no GKE: três bugs em três camadas, e a correção veio no kernel do Linux

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

  1. 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

Avalie este artigo:
Categoria
CEVIU DevOps
Publicado
30 de outubro de 2026
Editoria
CEVIU DevOps

Quer receber mais sobre CEVIU DevOps?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser