欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > K8s 证书认知(K8s Certificate Awareness)

K8s 证书认知(K8s Certificate Awareness)

2025/2/20 23:15:06 来源:https://blog.csdn.net/J56793/article/details/145418161  浏览:    关键词:K8s 证书认知(K8s Certificate Awareness)

K8s 证书认知

在谈起 Kubernetes 证书时,总感觉其涵盖的内容繁多,仿佛千头万绪,让人不知该从何处着手阐述。为了更好地理清思路,本文将对相关内容进行系统的梳理和记录。

1、证书及链路关系

Kubeadm部署的集群,K8s CA证书是10年,其他组件的证书日期是1年,etcd证书日期可以通过配置设置为10年。

  • 服务端证书: 服务端证书是安装在服务器端的证书,主要用于服务器向客户端证明自己的合法身份,确保客户端连接到正确的服务器,有效时间一般设置比较长。

  • 客户端证书: 客户端证书是安装在客户端的证书,主要用于向服务器证明客户端的身份,确保服务器只接受合法的客户端请求,有效时间相对可以设置短些。

  • CA证书: 服务端或客户端证书都通过CA生成的,Kubeadm安装的集群一般有三套CA证书,一套给etcd、一套给K8s内部使用、一套给聚合层使用,他们都是10年。

  • 证书配置一般有三个文件,含CA,证书和私钥(key字样): 证书是验证对方证书有效性,私钥是解密和签名操作。

1.1、etcd证书

通过ps -ef| grep etcd或systemctl status etcd查看etcd配置从而知道证书目录。

链路关系:服务本身、etcd集群节点间和客户端(etcdctl指令和kube-apiserver访问etcd的客户端证书)。

1.2、kubeadm token令牌

当kubeadm init或一个新节点或组件启动时,它可以使用Token向kube-apiserver进行身份认证,一般是24h。可通过kubeadm token create命令生成,kubeadm token list查看。

1.3、kube-apiserver证书

最复杂,需要和多个组件链接认证,通过查看apiserver配置文件,一般在/etc/kubernetes/manifests目录下kube-apiserver.yaml

链路关系:服务本身、客户端证书(kube-apiserver访问etcd、kubelet和front-proxy)。

1.4、kubelet证书

kubelet有客户端证书和服务端证书,客户端证书可以通过设置自动续签。

链路关系:客户端(kubelet访问kube-apiserver,是通过kubeconfig,其中客户端证书和私钥为:kubelet-client-current.pem)、服务端(可以在kube-apiserver和metric-server访问时使用,但一般不会设置)。

1.5、ServiceAccount认证

在K8s集群内部访问kube-apiserver使用的是SA,如pod和kube-proxy访问kube-apiserver。/etc/kubernetes/pki目录下,还有sa.pub和sa.key这两个就是用于sa认证的。这点容易遗漏。

1.6、其他组件证书

像kube-controller-manager、kube-scheduler和kubectl都是通过kubeconfig访问kube-apiserver, 配置文件中包括client-certificate-data 和 client-key-data的客户端证书和密钥。

2、查看证书日期方法(可参考,可不看)

K8s原生方法和openssl方法查看 原生方法:kubeadm certs check-expiration 说明如下:scheduler.conf也显示过期日期,因为文件里面包括证书和密钥,所以也有过期日期。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linekubeadm certs check-expiration[check-expiration] Reading configuration from the cluster...[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'W0117 15:36:09.319227   21835 utils.go:69] The recommended value for "clusterDNS" in "KubeletConfiguration" is: [10.233.0.10]; the provided value is: [169.254.25.10]
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGEDadmin.conf                 Dec 25, 2025 05:12 UTC   341d                                    noapiserver                  Dec 25, 2025 05:12 UTC   341d            ca                      noapiserver-kubelet-client   Dec 25, 2025 05:12 UTC   341d            ca                      nocontroller-manager.conf    Dec 25, 2025 05:12 UTC   341d                                    nofront-proxy-client         Dec 25, 2025 05:12 UTC   341d            front-proxy-ca          noscheduler.conf             Dec 25, 2025 05:12 UTC   341d                                    no
CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGEDca                      Dec 23, 2034 05:12 UTC   9y              nofront-proxy-ca          Dec 23, 2034 05:12 UTC   9y              no

openssl方法:到证书目录下,要看那个组件选择对应的crt或者pem文件, openssl x509 -in *.crt -noout -text | grep 'Not':

ounter(lineounter(lineounter(lineounter(linecd /etc/kubernetes/pkiopenssl x509 -in apiserver-kubelet-client.crt -noout -text | grep 'Not'Not Before: Dec 25 05:12:35 2024 GMTNot After : Dec 25 05:12:36 2025 GMT

3、证书更新(参考,可不看)

目前大概有三种方法,一种升级、命令更新和编译Kubeadm源码修改。主要分四大类,一个是etcd,一个是kube-apiserver服务端,一个是kubelet客户端,一个是K8s其他组件证书

  • etcd修复,参考之前写过一篇etcd证书过期解决方法。

3,1、kube-apiserver相关证书
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line1、在k8s-master节点执行renew allkubeadm certs renew all --config=/root/kubeadm-config.yaml2、查看更新日期,kubeadm certs check-expiration3、更新kubeconfig文件rm -fr /etc/kubernetes/*.confkubeadm init phase kubeconfig all --config /root/kubeadm-config.yaml4、重启相关pod,包括kube-apiserver、kube-controller-manager和kube-scheduler5、拷贝admin.conf到$HOME/.kube/下
3.2、kubelet证书

若 kubelet 已经配置了证书自动更新,则可略过该步骤,可查看节点 /etc/kubernetes/kubelet.conf 中 client-certificate 和 client-key: 如果为证书路径,则说明当前节点开启了 kubelet 证书自动更新,可略过该步骤; 如果为证书内容,则需要参考该步骤对 kubelet.conf 进行更新。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 1. 查看 token 是否为空或者过期kubeadm token list# 2. 生成新tokenkubeadm token create# 3. 记录token值替换node节点 /etc/kubernetes/bootstrap-kubelet.conf 中 token# 4. 替换node节点 /etc/kubernetes/bootstrap-kubelet.conf 中 user.token 字段# 5. 删除 /etc/kubernetes/kubelet.confrm -rf /etc/kubernetes/kubelet.conf# 6. 重启kubeletsystemctl restart kubelet# 7. 查看节点状态kubectl get node
3.2.1、配置kubelet证书自动更新​​​​​​​
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line1、为 kube-controller-manager和kube-apiserver和kube-schedule 添加 --experimental-cluster-signing-duration 参数(v1.19及以上版本为 --cluster-signing-duration),然后重启2、kubelet配置文件添加参数 rotateCertificates: true(每个node操作)3、获取 kubeadm join 命令,该命令须在 master 节点上执行kubeadm token create --print-join-command4、 利用 kubeadm 重新 bootstrap kubelet(每个node操作)# 移除 /etc/kubernetes/kubelet.confmv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.bak# 注意: 1. 复制自己生成的命令; 2. kubeadm join 后添加 phase kubelet-startkubeadm join phase kubelet-start lb.kubesphere.local:6443 --token lx8w73.nmt255scsz0krakz --discovery-token-ca-cert-hash sha256:55a4ffbf1271bd46d3b2dda2bb716de2a1cc23fb70aa57f241db2ee08f48b715

4、总结

针对证书过期问题,第一要明确那个证书过期再对症下药。通过进入不同证书目录执行openssl指令或K8s原生指令kubeadm certs check-expiration查看哪个组件过期。

  • etcd证书一般10年,不容易过期。

  • kube-apiserver证书一般1年,有问题先排查。

  • kubelet证书一般1年,会自动更新,没有配置自动需要配置自动更新。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词