建个网站需要服务器吗,建设公司官网制作平台,jsp做就业网站,饰品行业网站开发K8s 证书认知
在谈起 Kubernetes 证书时#xff0c;总感觉其涵盖的内容繁多#xff0c;仿佛千头万绪#xff0c;让人不知该从何处着手阐述。为了更好地理清思路#xff0c;本文将对相关内容进行系统的梳理和记录。
1、证书及链路关系
Kubeadm部署的集群#xff0c;K8s …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 yamlW0117 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 noopenssl方法到证书目录下,要看那个组件选择对应的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 NotNot 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证书过期解决方法。
31、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年会自动更新没有配置自动需要配置自动更新。