Kubernetes 证书以及证书续期、过期处理
在K8s里面会用证书来实现一些加密认证,既然涉及到证书,那么就有有效期这个概念。如果证书过期,那么K8s集群就意味着失败,完全不能访问。
k8s组件之间的通信都必须要求安全加密的方式进行通信,这是强制性的。k8s类似于微服务的架构,有很多的组件。

既然涉及到这么多组件,那么就会涉及到很多的证书。
服务器证书,被访问的,作为一个服务器,客户端要访问,那么需要验证服务器的真伪。客户端就是访问服务器,服务器端要验证客户端的身份。所以在k8s里面实现的是双向的认证,不仅要验证服务器端,还要验证客户端。
电商网站通常都是HTTPS,这个就是实现了服务器证书,通常不对客户端做验证。
在k8s里面,客户端,服务器证书都有很多,比如kubelet也是被其他需要访问的,所以它也需要服务器证书。

apiserver处于核心位置,所有彼此之间的组件通信都是借助apiserver来实现的,其实它就是一个网关。比如kubelet和其他通信都需要经过apiserver。
所有组件之间彼此通信都需要借助apiserver来实现的,彼此之间的认证也是双向认证。
根证书是如何颁发的?
这里就涉及到了CA的问题,证书都是由CA颁发证书的,在k8s里面有3套CA。

一套是k8s自身的CA,负责给apiserver,kubelet,等颁发证书,这个都是使用k8s CA来实现。

之前提到过的CA,k8s的和front-proxy的相关文件都在这个目录下面。分别是证书文件和私钥文件。包括etcd的证书也放在这个目录下面了。

可以使用openssl来查看证书的信息:

比如发布者issuer kubernetses 发布给谁 subject kubenetes,根CA的证书就是自己给自己颁发。
并且有效期是10年。

同理这也是一个独立的CA,自己给自己颁发。颁发者和颁发给都是一模一样。自己给自己颁发证书。
除了这三套CA,kubelet还有一套CA,其实也是自己颁发的CA。

所以CA证书有多套,比如通过CA给k8s颁发证书

由CA颁发·的证书有效期都比较短,

这里可以看到谁给谁颁发的。
apiserver要去访问etcd,那么apiserver就是客户端,它去访问etcd,那么etcd就是服务端。所以etcd就会给他颁发一个证书,这是etcd给其颁发的证书,有效期也比较短就是1年。

k8s给每个组件都分配了相应的证书。

用户账号配置证书
除了给组件提供的证书之外,还有一些是和用户账号相关的证书,这些证书没有表现为独立的文件,而是和用户信息发在了一起。

它为了访问apiserver,也需要有相关的身份,并且也需要有证书。

只要不是CA的证书,那么有效期都是1年。

这里可以看到根CA的有效期。
在kubeadm安装中续约证书的方法比较简单,使用一条命令renew all就可以完成证书的续约,除了CA证书的文件没有改(有效期10年,足够了),但是其他的组件和客户端证书都进行了续约。这样也就是完成续约工作了。

上面完成看还有一件事情要做,就是admin的授权文件。需要覆盖一下之前的家目录下的文件。
上面的命令只会更新证书,但是授权账号的文件需要手动去更新!

最后重启组件就行了,将pod删除就会重建。

如果apiserver有问题,可以查看容器的日志,看看是否是因为证书过期导致的。

如果证书已经过期,而且再使用上面的方法是不行的,依然还是访问不了这个集群。即使续约了依然访问不了,系统里面依然有很多的证书。它只是续约了一部分证书,有些证书是没有续约的。

这些证书是kubelet的证书,没有续约。

可以看到文件里面证书已经过期了。

前面这些证书更新了,但是kubelet.conf证书没有更新。那么就可以手动去解决证书过期的时间。

之前在集群正常工作的时候,这个证书文件是自动更新的,不需要手动去更新,会有自动的轮换功能。但是整个集群不正常了,就没有续约。
