03 证书

问题

突然,整个集群的都失联了,api-server无法访问,发现api-server的容器异常退出了。

systemctl restart kubelet

执行上述命令,发现查看api-server容器的日志,发现不能访问etcd,再查看etcd容器的日志,发现是证书的问题。

kubeadm alpha certs check-expiration

CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
admin.conf                 May 15, 2020 13:03 UTC   364d            false
apiserver                  May 15, 2020 13:00 UTC   364d            false
apiserver-etcd-client      May 15, 2020 13:00 UTC   364d            false
apiserver-kubelet-client   May 15, 2020 13:00 UTC   364d            false
controller-manager.conf    May 15, 2020 13:03 UTC   364d            false
etcd-healthcheck-client    May 15, 2020 13:00 UTC   364d            false
etcd-peer                  May 15, 2020 13:00 UTC   364d            false
etcd-server                May 15, 2020 13:00 UTC   364d            false
front-proxy-client         May 15, 2020 13:00 UTC   364d            false
scheduler.conf             May 15, 2020 13:03 UTC   364d            false

执行上述命令,查看集群的证书是否过期。

这些指令根据kubectl版本的不同,而不同的,根据具体的cli提示进行操作。

可能会遇到kubeadm没有上述指令的情况,执行下面这个指令来查看但个证书文件是否过期。

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
kubeadm alpha certs renew all --config kubeadm.yaml
# kubeadm.yaml是使用kubeadm安装时候的配置文件

执行上面的指令更新全部的证书,然后在重启kubelet,这样会触发static pod的重启。

或者执行mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak/ 然后再修改回来,也可以触发static pod的重启

更多关于kubeadm更新证书的操作,查看官网的介绍。

然后更新kubeconfig,因为kubectl是通过这个文件和api-server通信的,具体有两种方式。

方式一

kubectl config set-credentials admin  \
        --certificate-authority=$SSL_PATH/ca.crt  \
        --client-certificate=$SSL_PATH/apiserver-kubelet-client.crt   \
        --client-key=$SSL_PATH/apiserver-kubelet-client.key

执行只更新通信过程中认证证书相关的部分。

方式二

将kubernetes平台相关组件的配置文件根据新的证书全部重新生成。

# 一个个重新生成
kubeadm alpha kubeconfig user --client-name=admin
kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin  > /etc/kubernetes/admin.conf
kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > /etc/kubernetes/controller-manager.conf
kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > /etc/kubernetes/kubelet.conf
kubeadm alpha kubeconfig user --client-name system:kube-scheduler > /etc/kubernetes/scheduler.conf

# 或者执行这个命令,需要先把/etc/kubernetes/*.conf文件备份起来,否则会直接读取原文件而不生成新的
kubeadm init phase kubeconfig all --config kubeadm.yaml

重新生产的admin.conf就是kubectlapi-server通信用的配置文件,然后把这个文件复制到~/.kube并且重命名为config

关于kubeadm alpha指令更多的介绍,查看官网

升级集群更新证书

kubeadm upgrade apply --certificate-renewal v1.15.0

更多内容查看这里

上次修改: 23 May 2020