更新kubeadm创建的集群的证书

2024-04-19 01:04

本文主要是介绍更新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字段的值,可以查看证书已经被更新

这篇关于更新kubeadm创建的集群的证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916246

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表

个人博客文章目录索引(持续更新中...)

文章目录 一、Java基础二、Java相关三、MySql基础四、Mybatis基础及源码五、MybatisPlus基础六、Spring基础及源码七、Tomcat源码八、SpringMVC基础及源码   随着文章数量多起来,每次着急翻找半天,而是新申请的域名下来了,决定整理下最近几年的文章目录索引。(红色标记为常检索文章) 一、Java基础 1、Java基础(一):语言概述2、J

大型网站架构演化(四)——使用应用服务器集群改善网站的并发能力

使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型服务器而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。 对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能,从而实现系统

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

3_创建Tab控件

1,新建MFC 对话框项目,为对话框添加Tab控件,选中Tab控件,新建控件变量m_tab_ctrl 2,为Tab控件添加tab项 m_tab_ctrl.InsertItem(0, L”000”),参数1,哪个位置;参数2,item的名称 3,为Tab控件添加监听事件, void C测试Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESUL

Solr集群的搭建和使用(2)

1   什么是SolrCloud   SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使  用SolrCloud来满足这些需求。   SolrCloud是基于Solr和Zookeeper的分布式搜索

redis哨兵、集群

1. 安装Redis3.0 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl   mkdir -p /usr/local/src/Redis cd /usr/local/src/redis wget http:/

Java NIO 创建/复制缓冲区

创建缓冲区的方式 主要有以下两种方式创建缓冲区: 1、调用allocate方法 2、调用wrap方法 我们将以charBuffer为例,阐述各个方法的含义; allocate方法创建缓冲区 调用allocate方法实际上会返回new HeapCharBuffer(capacity, capacity)对象; 缓存空间存储在CharBuffer类的成员属性char[] h