当前位置: 首页 > news >正文

k8s 证书更新

如何使用脚本更新Kubernetes集群证书

引言

Kubernetes集群中,由kubeadm初始化的证书有效期默认为一年。当这些证书接近或已经超过有效期时,它们必须被更新以保证集群的正常运作。本文将介绍如何使用特定脚本来更新这些证书,将它们的有效期延长至十年。

准备工作

在开始之前,请确保你的环境满足以下条件:

  • 已经安装了git,以便能够从GitHub克隆脚本。
  • 你的Kubernetes集群是由kubeadm初始化的。
  • 你有足够的权限在master节点上执行操作。

拉取更新证书脚本

打开终端,执行以下命令来拉取脚本:

yum install git

git clone https://github.com/yuyicai/update-kube-cert.git

cd update-kube-cert

chmod 755 update-kubeadm-cert.sh

更新证书

接下来,使用以下命令更新证书。如果集群使用的是containerd作为容器运行时,记得加上--cri containerd参数;否则,使用默认的docker运行时。

./update-kubeadm-cert.sh all --cri docker

请注意,执行命令时应当使用./bash来调用脚本,避免直接使用sh,以防在某些Linux发行版中因sh并非指向bash而引发的不兼容问题。

处理控制面Pods

        执行完更新命令后,需要重启控制面的Pods。这是因为动态证书重载尚未被所有组件支持,所以手动重启是必要的。具体操作是将位于/etc/kubernetes/manifests/目录下的Pod清单文件临时移除,等待约20秒(取决于fileCheckFrequency值),然后将文件放回原处。这样kubelet将会终止和重新创建Pod,完成证书的更新。

输出示例与确认

执行更新后,脚本会输出类似的信息,列出已更新的证书和配置文件及其新的到期日期。例如:

此外,脚本还会记录备份和更新过程的日志,包括重启etcd、apiserver、controller-manager、scheduler等组件的信息,以及kubelet的重启。

总结

通过以上步骤,你可以成功地更新Kubernetes集群的证书,避免由于证书过期导致的集群不可用问题。记得在多master节点环境中,需要在每个master节点上重复执行上述步骤。

最后,确保检查更新后的集群状态,以验证更新过程是否成功,避免任何潜在的问题影响集群的稳定性和可用性。

参考资料
  • Kubernetes官方文档 - kubeadm证书手动更新

kubeadm certs renew all

通过以上指南,你可以有效地管理和维护Kubernetes集群的证书生命周期,确保集群的长期稳定运行。

相关文章:

  • 使用SourceTree切换不同的托管平台
  • [C][数据结构][树]详细讲解
  • 考研系列-数据结构第一章、绪论(基本术语、时间复杂度)
  • CSS Display(显示)
  • 计算机网络的组成
  • 计算机视觉与深度学习实战,Python为工具,基于计算机视觉的自动驾驶应用
  • 【数据结构与算法 经典例题】括号匹配问题
  • 代码随想录算法训练营第三十三天| 1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果
  • 串口通信实战:STM32与多种设备的连接方法
  • JVM常用概念之线程本地分配缓冲区(ThreadLocal Allocation Buffer,TLAB)
  • vivado HW_SERVER
  • C++ STL 中的 priority_queue::push() 和 priority_queue::pop()
  • stm32MP135裸机编程:启动流程分析
  • 假设Python脚本包含引用了大量的第三方库,如何打包成.exe文件,并且可以在没有环境的服务器下正常运行
  • vue-2 组件传值
  • 【个人向】《HTTP图解》阅后小结
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular Elements 及其运作原理
  • If…else
  • linux学习笔记
  • PHP变量
  • Promise面试题,控制异步流程
  • React系列之 Redux 架构模式
  • Redis 中的布隆过滤器
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 大快搜索数据爬虫技术实例安装教学篇
  • 简单数学运算程序(不定期更新)
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 排序(1):冒泡排序
  • 软件开发学习的5大技巧,你知道吗?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Qt) 默认QtWidget应用包含什么?
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)斐波那契Fabonacci函数
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (五)activiti-modeler 编辑器初步优化
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (原創) 未来三学期想要修的课 (日記)
  • (转)IOS中获取各种文件的目录路径的方法
  • ***利用Ms05002溢出找“肉鸡
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .cn根服务器被攻击之后
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net 发送邮件
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net/c# memcached 获取所有缓存键(keys)