k8s证书更新
通过kubeadm安装的k8s集群,默认有效期为1年,到期后如果不更新, 使用kubectl时会出现如下提示:`Unable to connect to the server: x509: certificate has expired or is not yet valid`
1、查看证书过期情况:
执行命令kubeadm alpha certs check-expiration,如图:
kubeadm certs check-expiration #新命令,kubeadm alpha certs check-expiration已弃用

2、查看根CA证书的有效期(十年)
进入目录并执行命令:
cd /etc/kubernetes/pki
ls | grep ca.crt | xargs -I {} openssl x509 -text -in {} | grep -i "Not After"

3、证书目录结构如下:

Kubernetes 集群根证书包括 /etc/kubernetes/pki/ca.crt 和/etc/kubernetes/pki/ca.key , 由此根证书签发的证书有:
- kube-apiserver 组件持有的服务端证书: /etc/kubernetes/pki/apiserver.crt 、 /etc/kubernetes/pki/apiserver.key
- kubelet 组件持有的客户端证书 : /etc/kubernetes/pki/apiserver-kubelet-client.crt 、 /etc/kubernetes/pki/apiserver-kubelet-client.key
注意: kubelet 上一般不会明确指定服务端证书, 而是只指定 ca 根证书, 让 kubelet 根据本地主机信息自动生成服务端证书并保存到配置的cert-dir文件夹中
汇聚层(aggregator)证书: /etc/kubernetes/pki/front-proxy-ca.crt 、 /etc/kubernetes/pki/front-proxy-ca.key , 由此根证书签发的证书只有一组:
- 代理端使用的客户端证书, 用作代用户与 kube-apiserver 认证 : /etc/kubernetes/pki/front-proxy-client.crt 、 /etc/kubernetes/pki/front-proxy-client.key
etcd 集群根证书: /etc/kubernetes/pki/etcd/ca.crt 、 /etc/kubernetes/pki/etcd/ca.key , 由此根证书签发机构签发的证书有:
- etcd server 持有的服务端证书 : /etc/kubernetes/pki/etcd/server.crt 、 /etc/kubernetes/pki/etcd/server.key
- peer 集群中节点互相通信使用的客户端证书 : /etc/kubernetes/pki/etcd/peer.crt 、 /etc/kubernetes/pki/etcd/peer.key
- pod 中定义 Liveness 探针使用的客户端证书 : /etc/kubernetes/pki/etcd/healthcheck-client.crt 、 /etc/kubernetes/pki/etcd/healthcheck-client.key
- 配置在 kube-apiserver 中用来与 etcd server 做双向认证的客户端证书 : /etc/kubernetes/pki/apiserver-etcd-client.crt 、 /etc/kubernetes/pki/apiserver-etcd-client.key
Serveice Account秘钥: /etc/kubernetes/pki/sa.key 、 /etc/kubernetes/pki/sa.pub , 这组的密钥对儿仅提供给 kube-controller-manager 使用. kube-controller-manager 通过 sa.key 对 token 进行签名, master 节点通过公钥 sa.pub 进行签名的验证.
4、备份证书:
可将/etc/kubernetes目录整个打包即可,执行命令如下:
tar -zcvf kubernetes_cert.tgz /etc/kubernetes
5、更新证书:
执行命令kubeadm certs renew all 即可,如下:

然后拷贝admin.conf文件到.kube路径下,执行命令如下:
cp /etc/kubernetes/admin.conf /root/.kube/config
6、再次执行命令查看证书过期时间,如图:

7、执行命令重启 kube-apiserver、 kube-controller、kube-scheduler、etcd,执行命令如下:
docker ps |grep -E ‘k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd’ | awk -F ‘ ‘ ‘{print $1}’ |xargs docker restart


