K8s 证书认知(K8s Certificate Awareness)
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(line
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'
W0117 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 MANAGED
admin.conf Dec 25, 2025 05:12 UTC 341d no
apiserver Dec 25, 2025 05:12 UTC 341d ca no
apiserver-kubelet-client Dec 25, 2025 05:12 UTC 341d ca no
controller-manager.conf Dec 25, 2025 05:12 UTC 341d no
front-proxy-client Dec 25, 2025 05:12 UTC 341d front-proxy-ca no
scheduler.conf Dec 25, 2025 05:12 UTC 341d no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Dec 23, 2034 05:12 UTC 9y no
front-proxy-ca Dec 23, 2034 05:12 UTC 9y no
openssl方法:到证书目录下,要看那个组件选择对应的crt或者pem文件, openssl x509 -in *.crt -noout -text | grep 'Not':
ounter(lineounter(lineounter(lineounter(line
cd /etc/kubernetes/pki
openssl x509 -in apiserver-kubelet-client.crt -noout -text | grep 'Not'
Not Before: Dec 25 05:12:35 2024 GMT
Not After : Dec 25 05:12:36 2025 GMT
3、证书更新(参考,可不看)
目前大概有三种方法,一种升级、命令更新和编译Kubeadm源码修改。主要分四大类,一个是etcd,一个是kube-apiserver服务端,一个是kubelet客户端,一个是K8s其他组件证书
-
etcd修复,参考之前写过一篇etcd证书过期解决方法。
3,1、kube-apiserver相关证书
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
1、在k8s-master节点执行renew all
kubeadm certs renew all --config=/root/kubeadm-config.yaml
2、查看更新日期,kubeadm certs check-expiration
3、更新kubeconfig文件
rm -fr /etc/kubernetes/*.conf
kubeadm init phase kubeconfig all --config /root/kubeadm-config.yaml
4、重启相关pod,包括kube-apiserver、kube-controller-manager和kube-scheduler
5、拷贝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. 生成新token
kubeadm token create
# 3. 记录token值
替换node节点 /etc/kubernetes/bootstrap-kubelet.conf 中 token
# 4. 替换node节点 /etc/kubernetes/bootstrap-kubelet.conf 中 user.token 字段
# 5. 删除 /etc/kubernetes/kubelet.conf
rm -rf /etc/kubernetes/kubelet.conf
# 6. 重启kubelet
systemctl restart kubelet
# 7. 查看节点状态
kubectl get node
3.2.1、配置kubelet证书自动更新
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
1、为 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-command
4、 利用 kubeadm 重新 bootstrap kubelet(每个node操作)
# 移除 /etc/kubernetes/kubelet.conf
mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.bak
# 注意: 1. 复制自己生成的命令; 2. kubeadm join 后添加 phase kubelet-start
kubeadm 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年,会自动更新,没有配置自动需要配置自动更新。
相关文章:
K8s 证书认知(K8s Certificate Awareness)
K8s 证书认知 在谈起 Kubernetes 证书时,总感觉其涵盖的内容繁多,仿佛千头万绪,让人不知该从何处着手阐述。为了更好地理清思路,本文将对相关内容进行系统的梳理和记录。 1、证书及链路关系 Kubeadm部署的集群,K8s …...

前x-ai首席科学家karpathy的从零构建ChatGPT视频学习笔记--8000字长图文笔记预警(手打纯干货,通俗易懂)
2025.2.17晚上21:57看完了整个视频,作为一个ai专业的学生虽然每天都在用ai,但是对于其背后的原理却不是那么清楚,而卡帕西的这支视频却让我醍醐灌顶,而且全程听起来很舒服,没有知识强行进入脑子的痛感,在他…...

【智慧校园】分体空调节能监管:打造高效节能的学习环境
随着科技的飞速发展和生活品质的不断提升,人们对于家居和办公环境的舒适度与智能化要求也越来越高。分体空调集中控制系统作为一种先进的空调管理方式,正逐渐成为现代家庭和办公场所的标配,为用户带来更加便捷、高效和节能的空调使用体验。随…...

深度学习-1.简介
Deep Learning - Lecture 1 Introduction to Deep Learning 学习深度学习的动机什么是深度学习什么导致了深度学习的出现模型与理论的发展(软件部分)通用图形处理单元GPU的发展(硬件部分)CPU与GPU计算对比 GPU与CPU的理论FLOPS对…...

【Rust中级教程】1.10. 引用及内部可变性(简单回顾):引用、内部可变性、`Cell`类型及相关操作
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 这篇文章只对所有权进行简单回顾,想要看完整的所有权系统阐述见【Rust自学】专栏…...

Docker 安装和配置 Nginx 详细图文教程
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...

基于Java+Swing+Mysql实现旅游管理信息系统
基于JavaSwingMysql实现旅游管理信息系统 一、系统介绍二、功能展示1.登陆2.注册3.旅游信息查询4.查看游行团信息5.报名6、报名信息管理 三、数据库四、其它1.其他系统实现五.获取源码 一、系统介绍 用户:登陆、注册、旅游信息查询、查看游行团信息、报名 管理员&a…...
使用 Openpyxl 操作 Excel 文件详解
文章目录 安装安装Python3安装 openpyxl 基础操作1. 引入2. 创建工作簿和工作表3. 写入数据4. 保存工作簿5. 加载已存在的Excel6. 读取单元格的值7. 选择工作表 样式和格式化1. 引入2. 设置字体3. 设置边框4. 填充5. 设置数字格式6. 数据验证7. 公式操作 性能优化1. read_only/…...
统信服务器操作系统V20 1070A 安装docker新版本26.1.4
应用场景: 硬件/整机信息:x86平台、深信服超融合平台 OS版本信息:统信V20 1070a 1.获取docker二进制包 链接: https://pan.baidu.com/s/1SukBlra0mQxvslTfFakzGw?pwd5s5y 提取码: 5s5y tar xvf docker-26.1.4.tgz groupadd docker ch…...

【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站…...
python爬虫系列课程1:初识爬虫
python爬虫系列课程1:初识爬虫 一、爬虫的概念二、通用爬虫和自定义爬虫的区别三、开发语言四、爬虫流程一、爬虫的概念 网络爬虫(又被称为网页蜘蛛、网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动抓取互联网信息的程序。原则上,只要是…...

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?
简介:在人工智能飞速发展的今天,大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作,还是科研辅助、代码生成,大模型的身影无处不在。然而,面对市场上琳琅满目的工具,如何挑选最适合自己的那…...
什么是语料清洗、预训练、指令微调、强化学习、内容安全; 什么是megatron,deepspeed,vllm推理加速框架
什么是语料清洗、预训练、指令微调、强化学习、内容安全 目录 什么是语料清洗、预训练、指令微调、强化学习、内容安全语料清洗预训练指令微调强化学习内容安全什么是megatron,deepspeed,vllm推理加速框架语料清洗 语料清洗是对原始文本数据进行处理的过程,旨在去除数据中的…...

HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?
一、前言 作为现代互联网通信的基石,HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后,都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据;响应则承…...
【深度学习】预训练和微调概述
预训练和微调概述 1. 预训练和微调的介绍1.1 预训练(Pretraining)1.2 微调(Fine-Tuning) 2. 预训练和微调的区别 预训练和微调是现代深度学习模型训练中的两个关键步骤,它们通常是一个 预训练-微调 (Pretrain-Finetune…...

自动化测试框架搭建-单次接口执行-三部曲
目的 判断接口返回值和提前设置的预期是否一致,从而判断本次测试是否通过 代码步骤设计 第一步:前端调用后端已经写好的POST接口,并传递参数 第二步:后端接收到参数,组装并请求指定接口,保存返回 第三…...
【阮一峰】2.数组
数组 简介 所有成员的类型必须相同,但是成员数量是不确定的。 由于成员数量可以动态变化,所以 TypeScript 不会对数组边界进行检查,越界访问数组并不会报错。 第一种写法: let arr: (number | string)[];第二种写法ÿ…...

DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)
前言 在当今数字化时代,AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选。今天,就让我们一起探索如何将DeepSeek接入PyCharm,实现高效、智…...

【Java Card】Applet 使用Shareable进行数据分享以及部分问题处理
文章目录 前言一、定义接口二、server端实现三、client端实现四、遇到的问题 前言 在进行开发时,可能会将业务放到不同的applet中,这时常常会需要进行数据的分享。 比如在一个applet中存储了密钥,而在另一个业务applet中需要进行签名时&…...
国产FPGA开发板选择
FPGA开发板是学习和开发FPGA的重要工具,选择合适的开发板对学习效果和开发效率至关重要。随着国产FPGA的发展,淘宝上的许多FPGA开发板店铺也开始进行国产FPGA的设计和销售,本文将对国产FPGA和相关店铺做个简单梳理,帮助有需要使用…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...