【kubernetes系列】kubeadm证书调整

部署k8s集群之前调整

默认情况下,使用kubeadm部署的k8s集群的证书有效期为1年。我们可以在初始k8s集群之前就调整好时间,避免后期经常更新。可以使用以下脚本对kubeadm的时间调整后重新编译生成kubeadm。此脚本针对k8s1.19.16版本,不同版本可能有所区别,请自行测试。
[root@k8s-m1 ~]# cat kubeadm_update.sh

yum install -y gcc make rsync jq git
wget  https://dl.google.com/go/go1.15.15.linux-amd64.tar.gz -O go1.15.15.linux-amd64.tar.gz
tar zxvf go1.15.15.linux-amd64.tar.gz  -C /usr/local
echo  -e 'export GOROOT=/usr/local/go\nexport GOPATH=/usr/local/gopath\nexport PATH=$PATH:$GOROOT/bin\n' >> /etc/profile
source /etc/profile 2>/dev/nul#git clone https://github.com/kubernetes/kubernetes -b v1.19.16
sed -i 's/24 * 365/24 * 365 * 100/g' ./kubernetes/cmd/kubeadm/app/constants/constants.go
sed -i 's/duration365d * 10/duration365d * 100/g' ./kubernetes/staging/src/k8s.io/client-go/util/cert/cert.go
sed -ri 's#KUBE_GIT_TREE_STATE="dirty"#KUBE_GIT_TREE_STATE="clean"#g' ./kubernetes/hack/lib/version.sh
cd kubernetes/
make all WHAT=cmd/kubeadm GOFLAGS=-v
cp -a  ../kubernetes/_output/local/bin/linux/amd64/kubeadm /usr/bin/
kubeadm version

部署k8s集群之后定期手动更新证书

使用自定义的证书

默认情况下,kubeadm 会生成运行一个集群所需的全部证书。 你可以通过提供你自己的证书来改变这个行为策略。

如果要这样做,你必须将证书文件放置在通过 --cert-dir 命令行参数或者 kubeadm 配置中的 certificatesDir 配置项指明的目录中。默认的值是 /etc/kubernetes/pki。

如果在运行 kubeadm init 之前存在给定的证书和私钥对,kubeadm 将不会重写它们。 例如,这意味着你可以将现有的 CA 复制到 /etc/kubernetes/pki/ca.crt 和 /etc/kubernetes/pki/ca.key 中,而 kubeadm 将使用此 CA 对其余证书进行签名。

外部 CA 模式

只提供了 ca.crt 文件但是不提供 ca.key 文件也是可以的 (这只对 CA 根证书可用,其它证书不可用)。 如果所有的其它证书和 kubeconfig 文件已就绪,kubeadm 检测到满足以上条件就会激活 “外部 CA” 模式。kubeadm 将会在没有 CA 密钥文件的情况下继续执行。

否则,kubeadm 将独立运行 controller-manager,附加一个 --controllers=csrsigner 的参数,并且指明 CA 证书和密钥。

包括集群使用外部 CA 的设置指南参考https://kubernetes.io/zh-cn/docs/setup/best-practices/certificates/

检查证书是否过期check-expiration 能被用来检查证书是否过期

[root@k8s-m1 ~]# kubeadm alpha 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 -oyaml'CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 May 21, 2024 02:54 UTC   264d                                    no      
apiserver                  May 21, 2024 02:54 UTC   264d            ca                      no      
apiserver-kubelet-client   May 21, 2024 02:54 UTC   264d            ca                      no      
controller-manager.conf    May 21, 2024 02:54 UTC   264d                                    no      
front-proxy-client         May 21, 2024 02:54 UTC   264d            front-proxy-ca          no      
scheduler.conf             May 21, 2024 02:54 UTC   264d                                    no      CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Mar 05, 2049 06:42 UTC   25y             no      
front-proxy-ca          Oct 16, 2031 06:59 UTC   8y              no 

该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm 使用的 KUBECONFIG 文件中嵌入的客户端证书的到期时间/剩余时间。
另外, kubeadm 会通知用户证书是否由外部管理; 在这种情况下,用户应该小心的手动/使用其他工具来管理证书更新。

警告: kubeadm 不能管理由外部 CA 签名的证书
注意: 上面的列表中没有包含 kubelet.conf 因为 kubeadm 将 kubelet 配置为自动更新证书。

手动更新证书

我们可以随时通过 kubeadm alpha certs renew 命令手动更新证书。

[root@k8s-m1 ~]# kubeadm alpha certs renew all

此命令用 CA(或者 front-proxy-CA )证书和存储在 /etc/kubernetes/pki 中的密钥执行更新。

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

或者完成后重启etcd,kube-apiserver,kube-controller,kube-scheduler这四个容器

for i in etcd kube-apiserver kube-controller kube-scheduler;do echo ….restart container $i….; docker ps |grep $i | grep -v pause | cut -d " " -f1 | xargs docker restart; done 

然后sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config重新拷贝证书。

警告:
如果你运行了一个 HA 集群,以上操作需要在所有控制面板节点上执行。

其他方法如自动更新证书和用 Kubernetes 证书 API 更新证书 请参考以下官方文档。
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/

更多关于kubernetes的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出

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

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

相关文章

App Inventor 2 开发 ChatGPT 对话App

ChatGPT大家应该不会陌生,它的回答内容非常的专业及深入,具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App,先看效果: App Inventor 2 ChatGPT教育领域对话演示 代码块如下: 用到的核心组件“ChatBot…

Java注解、文件IO以及匿名函数

文章目录 1. 注解1.1 自定义注解1.2 元注解1.2.1 Target1.2.2 Retention 1.3 注解的解析 2. 文件IO2.1 非流式文件类2.2 流式文件类2.2.1 字节输入流2.2.2 字节输出流2.2.3 字符输入流2.2.4 字符输出流 3. 匿名3.1 lambda表达式3.2 方法引用 1. 注解 注解可以在类、方法、构造…

6.oracle中listagg函数使用

1. 作用 可以实现行转列,将多列数据聚合为一列,实现数据的压缩 2. 语法 listagg(measure_expr,delimiter) within group ( order by order_by_clause); 解释: measure_expr可以是基于任何列的表达式 delimiter分隔符&#xff0c…

HTML学习笔记02

HTML笔记02 页面结构分析 元素名描述header标题头部区域的内容(用于页面或页面中的一块区域)footer标记脚部区域的内容(用于整个页面或页面的一块区域)sectionWeb页面中的一块独立区域article独立的文章内容aside相关内容或应用…

红黑树(AVL树的优化)上

红黑树略胜AVL树 AVL树是一颗高度平衡搜索二叉树: 要求左右高度差不超过1(严格平衡) 有的大佬认为AVL树太过严格,对平衡的要求越严格,会带来更多的旋转(旋转也还是会有一定的消耗!!…

java多线程之线程通信

java多线程文章 java多线程之线程创建和状态 java多线程之FutureTask、Future、CompletableFuture java多线程之线程池 java多线程之线程通信工具类 合理的使⽤Java多线程可以更好地利⽤服务器资源。⼀般来讲,线程内部有⾃⼰私 有的线程上下⽂,互不⼲…

WordPress使用子主题插件 Child Theme Wizard,即使主题升级也能够保留以前主题样式

修改WordPress网站样式,主题升级会导致自己定义设置的网站样式丢失,还需要重新设置,很繁琐工作量大,发现在WordPress 中有Child Theme Wizard子主题插件,使用Child Theme Wizard子主题插件,即使主题升级&am…

使用devsidecar 软件解决 git因网络问题报错的

上链接: https://github.com/docmirror/dev-sidecar/releases 下载你系统对应的版本 安装后根据教程设置即可 解决了git提交、拉取时报以下错误: Failed to connect to github.com port 443 after 21051 ms: Couldnt connect to server Recv failur…

2023年下半年西安/广州/深圳软考(中/高级)开班啦!!!

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成项…

智慧校园用电安全解决方案

随着科技的不断发展,智慧校园建设逐渐成为了教育行业的一大趋势。在这个过程中,电力系统作为校园基础设施的重要组成部分,其安全、稳定、高效的运行显得尤为重要。下面小编来为大家介绍下智慧校园用电安全解决方案吧! 一、智慧校园电力系统现…

前端知识总汇

前端知识总汇 HTML 超文本标记语言 注释 <!--单行注释--> <!-- 多行注释 --> 由于 HTML 代码杂乱无章&#xff0c;我们习惯性的用注释来划定区域方便后续的查找HTML 的文档结构 <!DOCTYPE html> <html lang"en"><!-- 定义配置给浏览…

抖店无货源和工厂直发有什么区别?聊下无货源的概念和做店思路

我是王路飞。 最近收到了几条私信&#xff0c;都是关于做抖店的&#xff0c;其中有一条吸引了我的兴趣。 他问的是&#xff1a;抖店的无货源和工厂直发有什么区别吗&#xff1f; 说实话&#xff0c;这个问题&#xff0c;我一开始是不打算回复的&#xff0c;因为没有意义。 …

C# task多线程创建,暂停,继续,结束使用

1、多线程任务创建 private void button1_Click(object sender, EventArgs e) //创建线程{CancellationToken cancellationToken tokensource.Token;Task.Run(() > //模拟耗时任务{for (int i 0; i < 100; i){if (cancellationToken.IsCancellationRequested){return;…

[C++ 网络协议] 多进程服务器端

具有代表性的并发服务器端实现模型和方法&#xff1a; 多进程服务器&#xff1a;通过创建多个进程提供服务。✔ 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务。 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务。 目录 1. 进程的概念及应用 1.…

24 - form表单验证 - bootstrap结合使用

一. flask中bootstrap的使用 16- flask-bootstrap模板的使用_一个微不足道的bug的博客-CSDN博客 二. form结合bootstrap使用 (1). form.py 进行表单验证 from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileRequired, FileAllowed from wtforms impo…

统计学补充概念-16-支持向量机 (SVM)

概念 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种用于分类和回归的机器学习算法。SVM的主要目标是找到一个最优的超平面&#xff0c;可以将不同类别的数据样本分开&#xff0c;同时使得支持向量&#xff08;离超平面最近的样本点&#xf…

CTFhub-文件上传-前端验证

burp 抓包 --> 重发--> 查看源代码 用 GodZilla 生成木马 文件名为 1.php.jsp 上传-->抓包-->改包 (删掉 .jpg) --> 点击 放行 木马文件位置为&#xff1a;http://challenge-f0531d0c27641130.sandbox.ctfhub.com:10800/upload/1.php 用 蚁剑连接 ctfhub{4743b…

数组中的第K个最大元素

题目链接 数组中的第K个最大元素 题目描述 注意点 需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素 解答思路 本题可以使用快速排序、堆排序或优先队列解决&#xff0c;快排可以比较快速找到某个元素在数组中排序后的位置&#xff0c;所以找…

Linux内核数据结构 散列表

1、散列表数据结构 在Linux内核中&#xff0c;散列表&#xff08;哈希表&#xff09;使用非常广泛。本文将对其数据结构和核心函数进行分析。和散列表相关的数据结构有两个&#xff1a;hlist_head 和 hlist_node //hash桶的头结点 struct hlist_head {struct hlist_node *first…

最简单vue获取当前地区天气--高德开放平台实现

目录 前言 一、注册成为高德平台开发者 二、注册天气key 1.点击首页右上角打开控制台 2.创建新应用 三、vue项目使用 1.打开vue项目找到public下的index.html&#xff0c;如果是vue3的话直接在主目录打开index.html文件就行&#xff0c;主要就是打开出口文件 ​编辑 2.根据高德…