Skip to main content
RunBook Academy

KubernetesCXXV · Control Plane TroubleshootingControl plane troubleshooting

cert rotation and clock skew — the cryptographic drift

Advanced⏱ ~14 minkubectlkubeadm

What you'll learn

  • Apply the 11-step methodology to certificate and clock failures
  • Diagnose the certificates and the clock skew
  • Distinguish the certificate failures from the clock failures
  • Identify the production failure modes of cryptographic drift

Prerequisites

Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16

Not yet marked complete on this device.

Control-plane certificates issued by kubeadm are valid for one year, so a cluster that is never upgraded reaches that date with nobody watching, and on the day kubectl, the controllers, and the kubelets all fail authentication at once. Clock skew produces the same symptom from a perfectly good certificate, because validity is checked against the local clock: a node running minutes ahead of the CA rejects a certificate that, from where it stands, has not been issued yet. Running kubeadm certs check-expiration and comparing date across the nodes separates the two.

The certificate rotation

The cluster’s certificates have a finite lifetime. The default is 1 year. The certificates must be rotated before they expire.

# Check the certificate's expiration
kubeadm certs check-expiration

# Renew the certificates
kubeadm certs renew all

The certificate rotation is the cluster’s cryptographic health.

The clock skew

The cluster’s clocks must be synchronized. The default synchronization is NTP (Network Time Protocol). The clock skew is the difference between the local clock and the reference clock.

# Check the clock
date

# Check the NTP
timedatectl status

# Check the NTP servers
ntpq -p

The clock skew is the cluster’s time synchronization.

The diagnostic

The canonical diagnostic:

# 1. Check the certificate's expiration
kubeadm certs check-expiration

# 2. Check the clock
date

# 3. Check the NTP
timedatectl status
ntpq -p

# 4. Check the API server's logs
kubectl logs -n kube-system -l component=kube-apiserver --tail=200

# 5. Check the kubelet's logs
journalctl -u kubelet -n 200

The diagnostic is the certificates, the clock, and the authentication.

Common failures

  • Certificate expired. The certificate is past its expiration date. The remediation is to renew the certificate.
  • Clock skew. The local clock is ahead of or behind the reference clock. The remediation is to sync the clock.
  • NTP failure. The NTP server is unreachable. The remediation is to fix the NTP server.
flowchart TD
    A[Crypto failing] --> B{Certificate valid?}
    B -->|No| C[Renew the certificate]
    B -->|Yes| D{Clock skew?}
    D -->|Yes| E[Sync the clock]
    D---|No| F{NTP OK?}
    F -->|No| G[Fix the NTP]
    F -->|Yes| H[Unknown]

The remediation

The remediation depends on the cause:

# Option 1: Renew the certificates, then restart the control
# plane. kubeadm runs the four components as static Pods, so
# move each manifest out of the kubelet's watch directory and
# back again; there are no systemd units to restart.
kubeadm certs renew all
mv /etc/kubernetes/manifests/{kube-apiserver,kube-controller-manager,kube-scheduler,etcd}.yaml /tmp/
# wait for the kubelet's fileCheckFrequency, 20s by default
mv /tmp/{kube-apiserver,kube-controller-manager,kube-scheduler,etcd}.yaml /etc/kubernetes/manifests/

# Option 2: Sync the clock
chronyc makestep

# Option 3: Fix the NTP server
# (NTP-specific)

The remediation is the cryptographic recovery.

The kubeadm certs check-expiration

A real kubeadm certs check-expiration output:

CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
admin.conf                 Aug 16, 2027 04:23 UTC   364d            no
apiserver                  Aug 16, 2027 04:23 UTC   364d            no
apiserver-etcd-client      Aug 16, 2027 04:23 UTC   364d            no
apiserver-kubelet-client   Aug 16, 2027 04:23 UTC   364d            no
ca                         Aug 16, 2027 04:23 UTC   364d            no
etcd-ca                    Aug 16, 2027 04:23 UTC   364d            no
etcd-healthcheck-client    Aug 16, 2027 04:23 UTC   364d            no
etcd-peer                  Aug 16, 2027 04:23 UTC   364d            no
etcd-server                Aug 16, 2027 04:23 UTC   364d            no
front-proxy-ca             Aug 16, 2027 04:23 UTC   364d            no
front-proxy-client         Aug 16, 2027 04:23 UTC   364d            no

The output is the certificate’s expiration.

Production discipline

A cryptographic drift is the cluster’s hypothesis. The discipline is to walk the 11-step methodology applied to the control plane, identify the cause, apply the remediation. The cryptographic health is the cluster’s authentication; the remediation is the cryptographic recovery.

  • Check the certificate’s expiration. kubeadm certs check-expiration prints the residual time for every control-plane certificate, etcd’s included.
  • Renewing is not restarting. The components read their certificates at startup, so the renewed material only takes effect once each static Pod under /etc/kubernetes/manifests/ has been recreated.
  • Check the clock and the NTP source. A valid certificate still fails verification when the local clock has drifted; chronyc makestep fixes the skew, and the unreachable NTP server is the cause behind it.

Quiz

Knowledge check · 4 questions

  1. Q1. What is the default lifetime of a kubeadm-managed certificate?

  2. Q2. A clock skew can cause the kubelet's TLS bootstrap to fail.

  3. Q3. An operator reports that the kubelet's certificate is expired. The kubelet cannot authenticate to the API server. What is the diagnostic and remediation?

    The cluster is a 1.34.x kubeadm install. The node is `node-03`. The kubelet logs show `x509: certificate has expired`. The kubelet's certificate is at `/var/lib/kubelet/pki/kubelet-client-current.pem`.

  4. Q4. Name three common causes of a cryptographic drift and the diagnostic command for each.

Passing score: 75%. Answers are checked in this browser.