更新kubeadm创建的集群的证书

需要熟悉的知识:
官网更新证书参考:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
静态Pod:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#static-pods
如何创建静态Pod:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/static-pod/#static-pod-creation
k8s控制平面:https://kubernetes.io/zh-cn/docs/concepts/overview/components/#control-plane-components
fileCheckFrequency 值的含义:https://kubernetes.io/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/
所涉及到的pki证书:https://kubernetes.io/zh-cn/docs/setup/best-practices/certificates/

查看kubeadm的版本

# 当前版本 v1.28.2
[root@k8s-master-01 manifests]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", GitCommit:"89a4ea3e1e4ddd7f7572286090359983e0387b2f", GitTreeState:"clean", BuildDate:"2023-09-13T09:34:32Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}

查看证书到期时间

# 该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm(admin.conf、controller-manager.conf 和 scheduler.conf) 使用的 kubeconfig 文件中嵌入的客户端证书的到期时间/剩余时间。
[root@k8s-master-01 ~]# kubeadm 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'CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Apr 18, 2025 02:53 UTC   364d            ca                      no      
apiserver                  Apr 18, 2025 02:53 UTC   364d            ca                      no      
apiserver-etcd-client      Apr 18, 2025 02:53 UTC   364d            etcd-ca                 no      
apiserver-kubelet-client   Apr 18, 2025 02:53 UTC   364d            ca                      no      
controller-manager.conf    Apr 18, 2025 02:53 UTC   364d            ca                      no      
etcd-healthcheck-client    Apr 18, 2025 02:53 UTC   364d            etcd-ca                 no      
etcd-peer                  Apr 18, 2025 02:53 UTC   364d            etcd-ca                 no      
etcd-server                Apr 18, 2025 02:53 UTC   364d            etcd-ca                 no      
front-proxy-client         Apr 18, 2025 02:53 UTC   364d            front-proxy-ca          no      
scheduler.conf             Apr 18, 2025 02:53 UTC   364d            ca                      no      CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Apr 16, 2034 02:53 UTC   9y              no      
etcd-ca                 Apr 16, 2034 02:53 UTC   9y              no      
front-proxy-ca          Apr 16, 2034 02:53 UTC   9y              no 

由于我的集群是刚刚创建的所以我的证书剩余时间为: 364d

更新证书前备份证书

如果是多节点控制平面,那么只需要备份主节点的证书即可,其他控制平面可以共享此证书

如果使用kubeadm init创建集群 证书目录默认在 /etc/kubernetes/pkiadmin.confcontroller-manager.confscheduler.conf 使用的 kubeconfig 文件中嵌入的客户端证书。

# 备份证书
[root@k8s-master-01 ~]# cp -r  /etc/kubernetes /etc/kubernetes.bak

最好是把ectd数据库也备份一下,默认是挂载到node节点上的/var/lib/etcd
cp -rp /var/lib/etcd /var/lib/etcd.bak

更新证书

如果你运行了一个 HA 集群,这个命令需要在所有控制面板节点上执行。
kubeadm certs renew 可以更新任何特定的证书,或者使用子命令 all 更新所有的证书,如下所示:

[root@k8s-master-01 ~]# kubeadm certs renew all
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewedDone renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.

重启控制平面Pod

官方文档:https://kubernetes.io/zh-cn/docs/concepts/overview/components/#control-plane-components
控制平面Pod

  • kube-apiserver
  • etcd
  • kube-scheduler
  • kube-controller-manager

在https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/,官网文档中有说明

执行完:kubeadm certs renew all此命令之后你需要重启控制面 Pod。因为动态证书重载目前还不被所有组件和证书支持,所有这项操作是必须的。 静态 Pod 是被本地 kubelet 而不是 API 服务器管理,所以 kubectl 不能用来删除或重启他们。 要重启静态 Pod 你可以临时将清单文件从 /etc/kubernetes/manifests/ 移除并等待 20 秒 (参考 KubeletConfiguration 结构中的 fileCheckFrequency 值)。如果 Pod 不在清单目录里,kubelet 将会终止它。 在另一个 fileCheckFrequency 周期之后你可以将文件移回去,kubelet 可以完成 Pod 的重建,而组件的证书更新操作也得以完成。

如何区分静态Pod: Pod 名称将把以连字符开头的节点主机名作为后缀。

[root@k8s-master-01 ~]# kubectl -n kube-system get pod 
NAME                                    READY   STATUS    RESTARTS        AGE
coredns-66f779496c-frrdh                1/1     Running   0               3h23m
coredns-66f779496c-vrxsh                1/1     Running   0               3h23m
etcd-k8s-master-01                      1/1     Running   0               3h23m
etcd-k8s-master-02                      1/1     Running   0               3h23m
etcd-k8s-master-03                      1/1     Running   0               3h18m
kube-apiserver-k8s-master-01            1/1     Running   0               3h23m
kube-apiserver-k8s-master-02            1/1     Running   0               3h23m
kube-apiserver-k8s-master-03            1/1     Running   7               3h18m
kube-controller-manager-k8s-master-01   1/1     Running   1 (3h23m ago)   3h23m
kube-controller-manager-k8s-master-02   1/1     Running   0               3h23m
kube-controller-manager-k8s-master-03   1/1     Running   1               3h18m
kube-proxy-6wxlc                        1/1     Running   0               3h16m
kube-proxy-mftd2                        1/1     Running   0               3h23m
kube-proxy-qb6sv                        1/1     Running   0               3h18m
kube-proxy-rrz7d                        1/1     Running   0               3h23m
kube-scheduler-k8s-master-01            1/1     Running   1 (3h23m ago)   3h23m
kube-scheduler-k8s-master-02            1/1     Running   0               3h23m
kube-scheduler-k8s-master-03            1/1     Running   2               3h18m

观察上述控制平面Pod可以看出etcdkube-apiserverkube-controller-managerkube-scheduler-k8s都属于静态Pod

静态Pod由kubelet 守护进程管理,以声明式yaml文件创建的静态Pod默认文件位置在/etc/kubernetes/manifests

[root@k8s-master-01 ~]# ll /etc/kubernetes/manifests/
总用量 16
-rw-------. 1 root root 2443 418 10:53 etcd.yaml
-rw-------. 1 root root 3400 418 10:53 kube-apiserver.yaml
-rw-------. 1 root root 2901 418 10:53 kube-controller-manager.yaml
-rw-------. 1 root root 1487 418 10:53 kube-scheduler.yaml

kubelet守护进程每过20s检查/etc/kubernetes/manifests文件,并维护文件中定义的静态Pod状态,只需要将/etc/kubernetes/manifests目录下静态控制平面Pod的yaml文件取走并操作20s,那么kubelet没有发现yaml文件,那么就会删除Pod,等待删除完毕在将yaml移动到/etc/kubernetes/manifests目录下等待下一个20skubelet进行检查到yaml文件就会重新生成Pod。

a. 移除/etc/kubernetes/manifests下yaml文件

# 如果是HA集群所有控制平面都要执行
[root@k8s-master-01 ~]# mv /etc/kubernetes/manifests/*.yaml  /tmp/

b. 等待20s后查看容器是否被删除

kube-apiserver 已经被删除,所以只能看容器了

# 查看容器
[root@k8s-master-01 ~]# crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
eb4590388247f       1575deaad3b05       4 hours ago         Running             kube-flannel        0                   56d10600846d8       kube-flannel-ds-2t5rt
a3aa7ba373b44       c120fed2beb84       4 hours ago         Running             kube-proxy          0                   9edafbe02a310       kube-proxy-rrz7d

可以查看控制平面的容器已经被删除了
c. 把yaml文件重新放到 /etc/kubernetes/manifests/ 下,等待20s,插件容器是否被创建,并查看集群状态

# 所有控制平面执行
mv /tmp/*.yaml /etc/kubernetes/manifests/
# 查看容器,可以看出静态Pod已经被创建
[root@k8s-master-01 ~]# crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
8b671549ac68f       cdcab12b2dd16       26 seconds ago      Running             kube-apiserver            0                   50ebb554a1058       kube-apiserver-k8s-master-01
8f950f68f3ee1       55f13c92defb1       26 seconds ago      Running             kube-controller-manager   0                   5d00a3dbfe10e       kube-controller-manager-k8s-master-01
4808581b3db60       7a5d9d67a13f6       26 seconds ago      Running             kube-scheduler            0                   b259f15380790       kube-scheduler-k8s-master-01
e7de7ac6c72f7       73deb9a3f7025       27 seconds ago      Running             etcd                      0                   6c45b979035a5       etcd-k8s-master-01
eb4590388247f       1575deaad3b05       4 hours ago         Running             kube-flannel              0                   56d10600846d8       kube-flannel-ds-2t5rt
a3aa7ba373b44       c120fed2beb84       4 hours ago         Running             kube-proxy                0                   9edafbe02a310       kube-proxy-rrz7d
# 可以看出所有Pod正常
[root@k8s-master-01 ~]# kubectl -n kube-system get pod 
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-66f779496c-frrdh                1/1     Running   0          3h44m
coredns-66f779496c-vrxsh                1/1     Running   0          3h44m
etcd-k8s-master-01                      1/1     Running   0          57s
etcd-k8s-master-02                      1/1     Running   0          3h44m
etcd-k8s-master-03                      1/1     Running   0          3h39m
kube-apiserver-k8s-master-01            1/1     Running   0          57s
kube-apiserver-k8s-master-02            1/1     Running   0          3h44m
kube-apiserver-k8s-master-03            1/1     Running   0          3h39m
kube-controller-manager-k8s-master-01   1/1     Running   0          57s
kube-controller-manager-k8s-master-02   1/1     Running   0          3h44m
kube-controller-manager-k8s-master-03   1/1     Running   0          3h39m
kube-proxy-6wxlc                        1/1     Running   0          3h38m
kube-proxy-mftd2                        1/1     Running   0          3h44m
kube-proxy-qb6sv                        1/1     Running   0          3h39m
kube-proxy-rrz7d                        1/1     Running   0          3h44m
kube-scheduler-k8s-master-01            1/1     Running   0          57s
kube-scheduler-k8s-master-02            1/1     Running   0          3h44m
kube-scheduler-k8s-master-03            1/1     Running   0          3h39m

查看证书是否被更新

[root@k8s-master-01 ~]# kubeadm 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'CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Apr 18, 2025 06:03 UTC   364d            ca                      no      
apiserver                  Apr 18, 2025 06:03 UTC   364d            ca                      no      
apiserver-etcd-client      Apr 18, 2025 06:03 UTC   364d            etcd-ca                 no      
apiserver-kubelet-client   Apr 18, 2025 06:03 UTC   364d            ca                      no      
controller-manager.conf    Apr 18, 2025 06:03 UTC   364d            ca                      no      
etcd-healthcheck-client    Apr 18, 2025 06:03 UTC   364d            etcd-ca                 no      
etcd-peer                  Apr 18, 2025 06:03 UTC   364d            etcd-ca                 no      
etcd-server                Apr 18, 2025 06:03 UTC   364d            etcd-ca                 no      
front-proxy-client         Apr 18, 2025 06:03 UTC   364d            front-proxy-ca          no      
scheduler.conf             Apr 18, 2025 06:03 UTC   364d            ca                      no      CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Apr 16, 2034 02:53 UTC   9y              no      
etcd-ca                 Apr 16, 2034 02:53 UTC   9y              no      
front-proxy-ca          Apr 16, 2034 02:53 UTC   9y              no 

对比EXPIRES字段的值,可以查看证书已经被更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家庭营销广告Criteo公司首次获得MRC零售媒体测量认证

家庭营销广告Criteo公司首次获得零售媒体测量MRC认证 商业媒体公司Criteo2024年3月28日宣布,它首次获得媒体评级委员会(MRC)的认证,在其企业零售媒体平台commerce Max和commerce Yield上,在桌面、移动网络和移动应用内…

数据库函数ABS详解

ABS函数的语法是:ABS(number),其中number是要计算绝对值的数字或表达式。例如,如果要计算-5的绝对值,可以使用以下查询: SELECT ABS(-5) FROM dual;这将返回结果为5。 在Oracle中,ABS是一个内置…

4-Java方法详解

目录 Java方法详解 1、什么是方法 2、方法的定义及调用 3、方法重载 4、命令行传参 5、可变参数 6、递归 例题:代码实现一个计算机 Java方法详解 1、什么是方法 2、方法的定义及调用 形参:用来定义作用的 实参:实际调用传递给他的参数…

java | junit | 基本+技巧

1.参考链接 1.1 单测概念 https://medium.com/lathasreeseeni/junit-2d9857773e8 1.2 高级技巧 https://symflower.com/en/company/blog/2023/how-to-write-junit-test-cases-advanced-techniques/ assertThrows: 有时候,我们的方法,需要抛出…

ES系列之相似度模型

概述 ES作为一款搜索引擎,搜索结果如何排序,即什么条目或内容更靠前,是一个很核心的问题。排序通常是通过计算语料库中的文档和用户查询之间的相关性或相似度评分来进行。 相似性(得分/排名模型)定义匹配文档如何进行…

C#基于SSE传递消息给Vue前端实现即时单向通讯

一、简述 通常前端调用后端的API,调用到了,等待执行完,拿到返回的数据,进行渲染,流程就完事了。如果想要即时怎么办?如果你想问什么场景非要即时通讯,那可就很多了,比如在线聊天、实…

libwebsockets 简介

文章目录 1. 前言2. libwebsockets 的 编译 和 使用2.1 编译2.2 使用2.2.1 构建运行上下文2.2.2 事件处理循环 3. websocket 协议 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. libwebsockets…

EASERVER管理密码忘记的处理方式

一个多年的老客户,EASERVER的管理员密码忘记了,查了一些资料,把它重置了,做个记录 This is a really quick tip on how to reset password for the administrator id “jagadmin” used in EA Server. We use this id for everyt…

Java 笔记 01:Java 概述,MarkDown 常用语法整理

一、前言 记录时间 [2024-04-18] 昨天整理完 Docker 基础后略微思索了一下,还是决定把 Java 捡起来,系统地学习一遍,参考的学习课程是狂神说 Java 零基础,真诚感激此系列视频对笔者的帮助。 零基础可以学 Java 吗?只要…

JVS低代码平台表单引擎:字符串拼接与逻辑函数的完美结合

字符串拼接使用逻辑函数配置 示例场景:通过按钮触发逻辑使用函数将两个日期字段组合为范围时间类型。 选择开始日期和结束日期后,点击【合并】按钮自动处理回显至起止日期字段。在【合并】按钮上设置逻辑。 注意:这里【起止日期】组件是数组…

【web开发02】后端开发Maven

后端开发Maven 1 Maven是什么?1.1 Maven基础概念1.1.2 仓库1.1.3 坐标 2 配置maven环境3 创建maven项目4 导入maven项目4 依赖管理4.1 依赖配置4.2 依赖传递4.2.1 排除依赖 4.3 依赖范围4.4 生命周期4.4.1 运行生命周期 1 Maven是什么? Maven本质是项目…

无梯度计算模式

无梯度计算模式是指在进行优化、求解或模型训练时,不依赖于目标函数或其相关组件(如损失函数、约束函数等)的梯度信息来指导搜索或更新过程的方法。这种模式适用于以下几种情况: 梯度不可用或难以计算: 目标函数可能包…

android和java 线程Tread

1。线程的生命周期。 可以分为创建,就绪,运行,阻塞,死亡 5个状态。 1.1 创建 new :当程序new了一个线程后,线程就处于新建状态,这时候他和其他 java对象一样,被java虚拟机分配了内存,但没有线程的特性。 …

idea 切换分支后 Project目录树小消失

idea 切换分支后 Project目录树小消失 生气了 生气了 若代码已经保存提交,直接删除本地项目,重新拉取。

二次元AI绘画生成器免费:教你生成精美图片

二次元AI绘画生成器,无疑是现代技术与艺术完美结合的典范。这些工具不仅将复杂的绘画过程简化,更让每一个艺术爱好者的创意得以充分展现。这些生成器能够精准捕捉大家的创意精髓,将其转化为细腻、独特的二次元画作。无论是角色设计、场景描绘…

SpringMVC(五)【拦截器】

前言 今天来把 SpringMVC 最后一部分学完,虽然课时很短,但是学起来还是很慢的,不过确收获很大。不得不感慨学大数据确实有必要把 SSM、SpringBoot 等各种 JavaEE 技术好好学一学,收获很大,尽管我们到现在 Java 代码写了…

Redis几种常见的应用方式

1.登录认证 redis最常见的应用就是,登录认证把。再首次登录返回给前端token,把用户名和登录状态缓存到redis一段时间,每次其他请求进来过滤器那这token解析出来的用户名或其他关键的key值,再redis里面查询缓存,有则直…

【算法】二分查找

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、二分查找二、查找元素的第一个和最后一个位置三、x的平方根四、搜索插入位置五、山脉数组的峰顶索引…

【Leetcode每日一题】 分治 - 排序数组(难度⭐⭐)(60)

1. 题目解析 题目链接:912. 排序数组 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路: 快速排序作为一种经典的排序算法,其核心思想在于通过“分而治之”的策略&#xff…

eCongnition 根据栅格类别图分类分割结果

目录 1、导入标签文件 2、根据栅格类别计算对象类别 3、导出栅格计算的类别 1、导入标签文件 导入栅格类别文件Label.tif 参考:eCongnition 对图像进行多尺度分割-CSDN博客 2、根据栅格类别计算对象类别 对类别栅格创建 mode[Maximum] 特征,该特征…