Diagnostika a Riešenie Chyby Cert-Manager Webhook 'context deadline exceeded'

Vytvorené: 24. 8. 2025 14:57 Aktualizované: 27. 8. 2025 13:14
Vyriešené
Obsah článku

title: "Diagnostika a Riešenie Chyby Cert-Manager Webhook 'context deadline exceeded'"
slug: "k3s-cert-manager-webhook-timeout-diagnostics"
technologies: ["Kubernetes (k3s)", "Cert-Manager", "kubectl", "Networking", "Firewall", "Calico"]
tags: ["k3s", "cert-manager", "webhook", "networking", "troubleshooting", "timeout", "firewall"]
date_solved: "2025-08-24"

Projekt/Téma: Diagnostika a Riešenie Chyby Cert-Manager Webhook 'context deadline exceeded'

  1. Cieľ / Problém na vyriešenie: Pri pokuse o vytvorenie Certificate objektu zlyhal príkaz kubectl apply s chybou Internal error occurred: failed calling webhook "webhook.cert-manager.io": ... context deadline exceeded. Cieľom bolo identifikovať a odstrániť príčinu tejto chyby.

  2. Použité technológie a nástroje:

    • Orchestrátor: Kubernetes (k3s)
    • Nástroj na správu certifikátov: Cert-Manager
    • Príkazový riadok: kubectl
    • Sieťová vrstva: Calico
    • Diagnostické nástroje: curl
  3. Kľúčové postupy a konfiguračné kroky:

    1. Overenie stavu podov cert-manager: Kontrola, či všetky pody (cert-manager, cainjector, webhook) bežia správne pomocou kubectl get pods -n cert-manager.
    2. Analýza logov a udalostí podu: Použitie kubectl describe pod a kubectl logs na cert-manager-webhook pod pre zistenie prípadných chýb pri štarte.
    3. Overenie Service a Endpoints: Kontrola, či Service cert-manager-webhook správne ukazuje na IP adresu bežiaceho webhook podu pomocou kubectl get service,endpoints -n cert-manager.
    4. Kľúčový diagnostický test siete: Vytvorenie dočasného diagnostického podu (kubectl run -it --rm ... curl) a z neho spustenie príkazu curl -vk https://cert-manager-webhook.cert-manager.svc:443. Tento test overuje konektivitu na úrovni pod-to-service v rámci klastra.
    5. Analýza systemd-resolved na node: Keďže CoreDNS dedí DNS od hostiteľského nodu, a ten používa systemd-resolved, finálnym krokom bolo overenie skutočných "uplink" DNS serverov na node pomocou príkazu resolvectl status.
  4. Výsledné kódy a skripty:```bash

    Overenie stavu podov

    kubectl get pods -n cert-manager

Test konektivity z dočasného podu

kubectl run -it --rm --image=docker.io/curlimages/curl:latest net-test -- sh

Vnútri kontajnera:

curl -vk https://cert-manager-webhook.cert-manager.svc:443

Overenie skutočných DNS serverov na hostiteľskom node

ssh user@node-kde-bezi-coredns resolvectl status



5. Zistené problémy a riešenia (Gotchas):
    -   **Problém:** Timeout pri volaní `cert-manager` webhooku z Kubernetes API servera.
    -   **Riešenie:** Diagnostika ukázala, že `cert-manager` pody bežia správne a sieťová komunikácia v rámci klastra (pod-to-service) funguje (potvrdené `curl` testom). Toto zistenie izolovalo problém na sieťovú cestu medzi **API serverom (bežiacim na control-plane node) a `webhook` podom (bežiacim na worker node)**. Príčinou bola pravdepodobne reštriktívna firewall politika na control-plane node, ktorá blokovala odchádzajúcu komunikáciu do podovej siete. Problém bol vyriešený úpravou firewall pravidiel (mimo Kubernetes).

6. Finálny výsledok / Záver:
Po oprave sieťovej konektivity medzi control-plane a worker nodmi začali volania na webhook prechádzať bez timeoutu. Následné príkazy `kubectl apply` pre `Certificate` objekty prebehli úspešne.
Vyriešené: 24. 8. 2025