Incident Library
Applied filters Root causeCertificate or credential expirySymptomContainer crash loopFactorUnreviewed defaultsClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases2 cases

1 to 2 of 2

  1. Symptoms

    The cluster could not be reached from outside. On the control plane node, sudo systemctl status kubelet showed TLS handshake errors such as "http: TLS handshake error from 101.198.0.183:19517: tls: client requested unsupported application protocols" and "http: TLS handshake error from 101.198.0.172:36328: tls: client offered only unsupported versions: [302 301]".

    Trigger

    The leaf certificates that kubeadm had generated for the cluster, valid for one year by default, expired at 2026-02-20 16:16 UTC.

    Root cause
    Component
    Contributing factor
    Detection

    The author could not connect to the cluster from outside and went to the control plane node to read the kubelet logs.

    Remediation
    • renewed all expired certificates with sudo kubeadm certs renew all
    • restarted containerd and the kubelet so the static control plane pods restarted with the new certificates
    • copied the renewed /etc/kubernetes/admin.conf to $HOME/.kube/config
    Lessons

    A kubeadm cluster stops working one year after its leaf certificates were issued unless they are renewed. The first errors seen may be TLS handshake failures or a flag error that does not mention certificates; the decisive message is the x509 expiry in the kube-apiserver log for its connection to etcd. The author recommends checking expiry with kubeadm certs check-expiration and renewing from 30 days before. kubeadm upgrade apply renews the certificates too, so a cluster upgraded at least once a year avoids the problem; a cluster run for a long time without upgrades can renew from cron, for example with 0 3 1 1 * root kubeadm certs renew all && systemctl restart kubelet in /etc/cron.d/kubeadm-cert-renew.

  2. Symptoms

    At 11:38 UTC on 3 August 2022 an end-user team told the platform team that applying a Service resource to one of the Kubernetes clusters failed.

    Trigger

    A certificate chain in a third-party application expired, through no action of DFDS, and the outdated Kyverno installation got stuck in a crash loop.

    Root cause
    Component
    Contributing factor
    Detection

    An end-user team alerted the platform team at 11:38 UTC that applying a Service resource failed; the platform team started looking into it at 11:50 UTC.

    Remediation
    • reproduced the issue in a sandbox cluster and deployed the fix there first
    • updated Kyverno to a newer Helm chart version in the affected production cluster
    Action items
    • Implement monitoring on Kyverno
    • Create internal documentation on the Kyverno setup
    • Investigate the exact certificate issue in the third-party application
    • Consider changing the failurePolicy on ClusterPolicy resources going forward
    Lessons

    Operational issues should be added to the 'Ops Day to Day' board from the start.

Check your cluster for this

These 2 cases involve Admission webhook and Calico. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.

By root cause1