- If the control plane runs as native systemd services (custom from-scratch installs), certificate file paths and TLS flags are visible from unit files or the running processes.
- If the cluster was provisioned with kubeadm, control plane components run as static pods; manifests live under /etc/kubernetes/manifests and certificates are typically under /etc/kubernetes/pki.
When doing a certificate health check, create a simple spreadsheet (paths, CN, SANs, organization, issuer, expiry) to track the findings across all nodes. Use this spreadsheet format to guide your tracking.
- Confirm each component presents the correct Subject Common Name (CN) for identity.
- Ensure required Subject Alternative Names (SANs) — DNS and IP — are present.
- Verify the issuer matches your expected CA.
- Detect expired or soon-to-expire certificates to plan rotations and prevent outages.
- Systemd-managed control plane
- If the control plane is managed via systemd, inspect unit files (typically in /etc/systemd/system or /lib/systemd/system) to find flags pointing at cert/key files. Example unit excerpt for kube-apiserver:
- kubeadm / static pod control plane
- Inspect the static pod manifest for the kube-apiserver under /etc/kubernetes/manifests to find the exact certificate paths and filenames used by the control plane container:
- Use openssl to read a PEM certificate and inspect its fields:
- Subject CN matches the component (e.g., CN=kube-apiserver).
- Expected DNS and IP SANs are present.
- Issuer is the expected CA (kubeadm typically uses CA with CN=kubernetes).
- Certificate validity period is current (check the Not After date for expiry).


- If components run under systemd, start with the system journal to find TLS handshake and certificate errors:
- If control plane components are running as static pods (kubeadm), view pod logs with kubectl. Replace <etcd-pod> with the actual pod name and add -n kube-system if necessary:
- If the control plane is down and kubectl cannot reach the API server, check the container runtime logs directly:
- For CRI-based runtimes (containerd/crio) use crictl:
- For Docker runtime:
- Missing SANs: reissue the certificate including the correct DNS/IP SANs.
- Expired certificates: rotate/reissue them. Kubeadm provides certificate management helpers (see kubeadm certs docs).
- Unexpected issuer: investigate whether a certificate was manually replaced or issued by an unknown CA.
Useful links and references
- Kubernetes Certificates concept: https://kubernetes.io/docs/concepts/cluster-administration/certificates/
- kubeadm certificate management: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-certs/
- Collect findings into the spreadsheet described in the callout to track certificate path, CN, SANs, issuer, and expiry across nodes.
- Test these steps in a lab environment before running them on production clusters to avoid accidental outages.