kubeadm 集群里有哪些证书、各自多久过期?apiserver 的证书里写了什么?admin.conf 和 super-admin.conf 差在哪?续期之后要不要重启 apiserver?这篇在控制面节点里用 openssl 逐张读证书,再真的续一次期并观察 apiserver 对外出示的证书。
/etc/kubernetes/pki/:apiserver-etcd-client.crt apiserver-etcd-client.key apiserver-kubelet-client.crt apiserver-kubelet-client.key apiserver.crt apiserver.key ca.crt ca.key etcd front-proxy-ca.crt front-proxy-ca.key front-proxy-client.crt front-proxy-client.key sa.key sa.pub
/etc/kubernetes/pki/etcd/:ca.crt ca.key healthcheck-client.crt healthcheck-client.key peer.crt peer.key server.crt server.key
/etc/kubernetes/*.conf:admin.conf controller-manager.conf kubelet.conf scheduler.conf super-admin.conf
kubeadm certs check-expiration:
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 10, 2027 08:03 UTC 364d ca no
apiserver Oct 10, 2027 18:01 UTC 364d ca no
apiserver-etcd-client Oct 10, 2027 08:03 UTC 364d etcd-ca no
apiserver-kubelet-client Oct 10, 2027 08:03 UTC 364d ca no
controller-manager.conf Oct 10, 2027 08:03 UTC 364d ca no
etcd-healthcheck-client Oct 10, 2027 08:03 UTC 364d etcd-ca no
etcd-peer Oct 10, 2027 08:03 UTC 364d etcd-ca no
etcd-server Oct 10, 2027 08:03 UTC 364d etcd-ca no
front-proxy-client Oct 10, 2027 08:03 UTC 364d front-proxy-ca no
scheduler.conf Oct 10, 2027 08:03 UTC 364d ca no
super-admin.conf Oct 10, 2027 08:03 UTC 364d ca no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Oct 07, 2036 08:03 UTC 9y no
etcd-ca Oct 07, 2036 08:03 UTC 9y no
front-proxy-ca Oct 07, 2036 08:03 UTC 9y no控制面节点 /etc/kubernetes/pki 下有 ca、etcd/ca、front-proxy-ca 三套 CA 和各组件证书;/etc/kubernetes/ 下的 admin.conf、super-admin.conf、controller-manager.conf、scheduler.conf、kubelet.conf 把客户端证书内嵌在里面。kubeadm certs check-expiration:11 张叶子证书都是 364 天后过期(Oct 10, 2027),3 个 CA 是 9 年(Oct 07, 2036),EXTERNALLY MANAGED 全是 no。
subject=subject=CN=kube-apiserver;issuer=issuer=CN=kubernetes 有效期:notBefore=Oct 10 17:56:11 2026 GMT;notAfter=Oct 10 18:01:11 2027 GMT(共 365 天) SAN:DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:kx-main-control-plane, DNS:localhost, IP Address:10.96.0.1, IP Address:172.18.0.3, IP Address:127.0.0.1 用途:TLS Web Server Authentication;CA 证书 ca.crt 的有效期:notAfter=Oct 7 08:03:13 2036 GMT apiserver-kubelet-client:subject=subject=CN=kube-apiserver-kubelet-client;issuer=issuer=CN=kubernetes apiserver-etcd-client:subject=subject=CN=kube-apiserver-etcd-client;issuer=issuer=CN=etcd-ca etcd server:subject=subject=CN=kx-main-control-plane;issuer=issuer=CN=etcd-ca admin.conf 内嵌的客户端证书:subject=O=kubeadm:cluster-admins, CN=kubernetes-admin;super-admin.conf:subject=O=system:masters, CN=kubernetes-super-admin controller-manager.conf:subject=CN=system:kube-controller-manager;scheduler.conf:subject=CN=system:kube-scheduler
apiserver.crt:subject CN=kube-apiserver,issuer CN=kubernetes,有效期 365 天,SAN 有 kubernetes、kubernetes.default、kubernetes.default.svc、kubernetes.default.svc.cluster.local、kx-main-control-plane、localhost、10.96.0.1、172.18.0.3、127.0.0.1,用途是 TLS Web Server Authentication。客户端证书的 subject 就是身份:admin.conf 是 O=kubeadm:cluster-admins, CN=kubernetes-admin(靠 RBAC 绑定 cluster-admin),super-admin.conf 是 O=system:masters, CN=kubernetes-super-admin(system:masters 组绕过 RBAC),controller-manager、scheduler 分别是 CN=system:kube-controller-manager、CN=system:kube-scheduler。
/var/lib/kubelet/pki/:kubelet-client-2026-10-10-08-03-14.pem kubelet-client-current.pem kubelet.crt kubelet.key kubelet-client-current.pem 指向:/var/lib/kubelet/pki/kubelet-client-2026-10-10-08-03-14.pem;subject=subject=O=system:nodes, CN=system:node:kx-main-control-plane;notAfter=Oct 10 08:03:13 2027 GMT kubelet.crt(serving):issuer=issuer=CN=kx-main-control-plane-ca@1791619394(自签,不是集群 CA 签的);kubelet 配置 rotateCertificates=rotateCertificates: true;serverTLSBootstrap=未设置
/var/lib/kubelet/pki/ 下 kubelet-client-current.pem 是符号链接,指向带时间戳的 kubelet-client-2026-10-10-08-03-14.pem,subject 是 O=system:nodes, CN=system:node:kx-main-control-plane;配置里 rotateCertificates: true,到期前会自动轮转(靠 CSR,见 k21)。kubelet.crt(10250 端口的服务证书)是自签的,issuer 是 kx-main-control-plane-ca@…,不是集群 CA 签的;serverTLSBootstrap 没设置。
renew 前:文件里 serial=3EA9911F6D50D107 notBefore=Oct 10 17:56:11 2026 GMT;apiserver 实际出示 serial=3EA9911F6D50D107 notBefore=Oct 10 17:56:11 2026 GMT;apiserver 容器启动时间 2026-10-10T18:01:12 kubeadm certs renew apiserver:certificate for serving the Kubernetes API renewed renew 后马上读文件:serial=5A98A8B813D8C969 notBefore=Oct 10 17:56:32 2026 GMT 不重启 apiserver,0.1 秒后它出示的证书就变成了新的:serial=5A98A8B813D8C969 notBefore=Oct 10 17:56:32 2026 GMT;容器没有重启(同一个容器 True,启动时间仍是 2026-10-10T18:01:12) kubeadm certs check-expiration 里 apiserver 一行:apiserver Oct 10, 2027 18:01 UTC 364d ca no(它读的是磁盘上的文件) kubectl 访问正常:ok
kubeadm certs renew apiserver 后,磁盘上的 apiserver.crt 立刻变成新的(serial 从 3EA9911F6D50D107 变为 5A98A8B813D8C969;notBefore 比当前时间早 5 分钟,这是 kubeadm 为容忍时钟偏差回拨的)。不重启 apiserver,0.1 秒就发现它对外出示的证书已经是新的——容器没有重启(同一个容器,启动时间不变),说明 apiserver 会自动重新加载服务证书文件。kubeadm certs check-expiration 里 apiserver 一行随之变成 Oct 10, 2027 18:01 UTC;它读的是磁盘文件,不是进程里的状态。