网站首页 > 教程文章 正文
现象:原本ready的nodes突然变为:noready状态,登录nodes查看,负载正常,硬件正常。(后来才注意nodes AGE 是在365左右)
关注点: master的日志会有“x509: certificate has expired or is not yet valid, x509: certificate has expired or is not yet valid”报错
描述:开始说证书过期的时候,我们很困惑,搭建之初,为了避免证书过期问题,我们特意自签署证书都是签的100年,系统时间也对的,为嘛过期了呢。
通过此次故障才了解(k8s集群分为两种证书:一、用于集群 Master、Etcd等通信的证书。 二、用于集群 Kubelet 组件证书)
【我们改的100年其实是master ,etcd的证书】
【
我们在搭建 Kubernetes 集群时,一般只声明用于集群 Master、Etcd等通信的证书 为 10年 或者 更久,但未声明集群 Kubelet 组件证书 ,Kubelet 组件证书 默认有效期为1年。集群运行1年以后就会导致报 certificate has expired or is not yet valid 错误,导致集群 Node不能于集群 Master正常通信。
】
查看nodes节点证书有效期:
证书放在:部署k8s的时候证书存放目录
openssl x509 -in kubelet-client-current.pem -noout -text
我们的处理方案:启用了自动续期,以防下次在忘了
1)升级controller-manager,修改配置文件
# 证书有效期为1年 和自动重载证书配置
--experimental-cluster-signing-duration=8760h0m0s
--feature-gates=RotateKubeletServerCertificate=true
2)创建自动批准相关 CSR 请求的 ClusterRole
$vim tls-instructs-csr.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
rules:
- apiGroups: ["certificates.k8s.io"]
resources: ["certificatesigningrequests/selfnodeserver"]
verbs: ["create"]
kubectl apply -f tls-instructs-csr.yaml
- 自动批准 kubelet-bootstrap 用户 TLS bootstrapping 首次申请证书的 CSR 请求
$ kubectl create clusterrolebinding node-client-auto-approve-csr --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap
2.自动批准 system:nodes 组用户更新 kubelet 自身与 apiserver 通讯证书的 CSR 请求
$ kubectl create clusterrolebinding node-client-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes
3.自动批准 system:nodes 组用户更新 kubelet 10250 api 端口证书的 CSR 请求
$ kubectl create clusterrolebinding node-server-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver --group=system:nodes
3)重启kube-controller-manager 服务
$ systemctl daemon-reload
systemctl restart kube-controller-manager.service
# 重启启动,启动正常后会颁发新的ssl证书给客户端
4)修改kubelet的配置文件,并重启kubelet服务
修改 kubelet 组件配置,具体添加下面3行参数 --feature-gates=
RotateKubeletServerCertificate=true --feature-gates=
RotateKubeletClientCertificate=true
# 1.8版本以上包含1.8都支持证书更换自动重载,以下版本只能手动重启服务 --rotate-certificates
-----------------------------------------这些要在各个nodes操作
-------------------------------------------------------
#进入到ssl配置目录,删除之前的证书文件(删除前备份)
$ rm -f kubelet-client-current.pem kubelet-client-*.pem kubelet.key kubelet.crt
$ systemctl restart kubelet # ,查看证书有效期 $ [root@node04 ssl]# openssl x509 -in
kubelet-client-current.pem -noout -text | grep "Not"
Not Before: Jun 4 03:57:00 2020 GMT
Not After : Jun 4 03:57:00 2021 GMT
#查看node和node上pod的运行状态。(测试没有问题,不用提前迁移pod)
- 上一篇: TLS详解
- 下一篇: 公钥基础设施你了解多少?
猜你喜欢
- 2025-05-26 源码分享:在pdf上加盖电子签章
- 2025-05-26 ssl 加密证书
- 2025-05-26 Headscale渐入佳境补充篇-自定义中转derper的证书问题
- 2025-05-26 公钥基础设施你了解多少?
- 2025-05-26 TLS详解
- 2025-05-26 序列化漏洞影响半数以上Android手机
- 2025-05-26 IBM发现Android特权提升漏洞 影响55%设备
- 2025-05-26 记:Nginx 如何配置SSL证书
- 2025-05-26 手把手教学|Nginx 如何配置 HTTPS 服务器
- 2025-05-26 Fleck:一个轻量级的C#开源WebSocket服务端库
- 最近发表
-
- 【Python】一文学会使用 Pandas 库
- Docsify-3分钟搭建属于自己的技术文档WIKI
- Elasticsearch数据迁移方案(elasticsearch索引迁移)
- Vue、Nuxt服务端渲染、NodeJS全栈项目
- Android Studio下载Gradle超时解决方案
- 一文讲清楚 Markdown+Typora+Pandoc+图床+PicGo
- 用户说 | 手把手体验通义灵码 2.0 AI 程序员如何让我进阶“架构师”?
- 15.7k star,经典与效率兼备的后台管理框架
- Cursor + 12306 MCP,打造AI智能选票系统,超酷的!
- 别再自建仓库了,云效Maven仓库不限容量免费用
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)