k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式

news2025/1/23 15:10:21

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式

大纲

  • 基础概念
  • 证书替换测试
  • 使用kubeadm alpha certs renew all 更新证书
  • 重启所有组件和kubelet.service
  • 生成kubelet-client-current.pem证书
  • 测试替换后集群是否正常工作

基础概念

本次测试使用的k8s集群使用 kubeadm创建单master节点 并且 版本为17 操作系统ubuntu18

在这里插入图片描述

k8s集群之间的访问会使用到证书,如果使用kubeadm搭建的集群,默认CA证书的有效期为10年,其他组件访问证书的有效期为1年。如果过期后没有更新证书可能会引起k8s集群的不可用

例如使用 kubeadm certs check-expiration命令可以查看当前集群证书情况

注意k8s-17 certs命令还是实验性功能 需要 指定alpha 
kubeadm alpha certs check-expiration

在这里插入图片描述

证书替换的整体流程如下

  • 1 使用 kubeadm alpha certs renew all 更新证书
  • 2 使用 重启k8s组件
  • 3 更新节点kubelet-client-current.pem证书
  • 4 重启kubelet.service

注意测试前最好先备份相关证书和配置

  • 1 master节点 /etc/kubernetes文件夹中的 admin.conf ,controller-manager.conf, kubelet.conf ,scheduler.conf 和 pki文件夹中所有证书

  • 2 node节点 /etc/kubernetes文件夹的 kubelet.conf 和 pki文件夹中所有证书

证书替换测试

使用 kubeadm alpha certs check-expiration 查看当前证书情况

kubeadm alpha certs check-expiration

在这里插入图片描述

手动修改系统时间让证书过期注意需要先关闭ntp (所有节点都执行此命令包括master节点)

timedatectl set-ntp false  关闭ntp  (timedatectl set-ntp true 开启ntp)
date -s 04/27/2024         修改系统时间 2024年4月27日

在这里插入图片描述

执行kubectl 命令可以看到提示证书过期

在这里插入图片描述

step1 使用kubeadm alpha certs renew all 更新证书

使用 kubeadm alpha certs renew all 可以更新所有组件证书

kubeadm alpha certs renew all 

在这里插入图片描述

执行kubectl get nodes 访问成功

在这里插入图片描述

所以 kubeadm alpha certs renew all执行完成后 已经替换了 /root/.kube/config 文件中的证书 进入查看 确实已经自动更新了 (如果没有更新需要手动将admin.conf 替换 config

cat /root/.kube/config

在这里插入图片描述

echo LS0tLS1CRUdJ省略   | base64 -d > c.crt
cfssl certinfo -cert c.crt

证书时间确实更新了1年

在这里插入图片描述

关于cfssl的使用可以参考 《使用cfssl为程序添加https证书》

此时执行部署一个nginx pods 发现无法部署

在这里插入图片描述

step2 重启组件

上一步中可以看到kubectl 命令(查询操作)可以使用了,但是部署一个pod确失败了(没有任何响应)!

原因如下:
kubeadm alpha certs renew all命令更新了客户端证书即/root/.kube/config中的证书
访问k8s-apiserver(查询操作)可以通过验证(因为根证书没有变,客户端证书可以通过验证)
但是k8s组件还未重启,内部调用使用的证书还是老证书,所以需要重启k8s组件

关于 /root/.kube/config可以参考 《快速上手k8s权限管理 立即掌握User Role RoleBinding kubeconfig 实战教程》

进入master节点的 /etc/kubernetes/manifests/ 文件夹 稍微修改一下所有组件的配置文件,(配置文件修改后会自动重启组件

在这里插入图片描述

例如修改下timeoutSeconds

在这里插入图片描述

然后再重启所有节点的 kubelet.service

systemctl restart kubelet.service
journalctl -fu kubelet

重启后发现kubelet 客户端证书过期

1518 bootstrap.go:265] part of the existing bootstrap client certificate is expired: 2024-02-23 08:13:25 +0000 UTC
1518 server.go:273] failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory

在这里插入图片描述

查看api-server日志也可以看到TLS 握手失败

在这里插入图片描述

I0427 00:51:31.877435       1 log.go:172] http: TLS handshake error from 192.168.0.124:56108: EOF
I0427 00:52:22.075177       1 log.go:172] http: TLS handshake error from 192.168.0.124:42214: EOF
I0427 00:53:45.493054       1 log.go:172] http: TLS handshake error from 192.168.0.160:35706: EOF

在这里插入图片描述

进入各个节点的 /var/lib/kubelet/pki文件夹 查看kubelet的证书 发现还是老证书 由此可以证明 kubeadm alpha certs renew all命令不会更新kubelet证书

在这里插入图片描述

所以此时k8s集群还是不可用状态

这里可以使用admin.conf中的证书信息替换 所有节点的中kubelet.conf 证书信息

即admin.conf中的client-certificate-data 与 client-key-data  
替换kubelet.conf  client-certificate 与 client-key

在这里插入图片描述

kubelet.conf 原始配置

在这里插入图片描述

kubelet.conf 替换后

在这里插入图片描述

所有节点替换完成后 可以看到 /var/lib/kubelet/pki 文件夹下生成了新的kubelet-client证书

在这里插入图片描述

此时再恢复kubelet.conf 中的原始配置即可 (不恢复也可以正常使用)

step3 测试使用k8s集群

注意由于改了本地时间所以 使用docker pull 镜像时会出现证书过期 (这个证书和k8s证书无关)

Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid

在这里插入图片描述

所以要测试k8s集群是否正常使用只有使用节点本地存在的镜像

在这里插入图片描述

创建一个dp.yaml 部署文件 内容如下

在这里插入图片描述

注意:imagePullPolicy: Never 镜像拉取策略使用Never 不拉取镜像使用本地镜像

测试部署Pod 访问接口成功

在这里插入图片描述

创建service

在这里插入图片描述

外网访问Pod 成功

在这里插入图片描述

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

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

相关文章

【代码随想录】刷题Day9 --- 我有自信讲清楚KMP的next原理

字符串 --- 找子串匹配算法_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130197908?spm1001.2014.3001.5501 首先具体KMP算法理论在上面的博客中,不过该博客我当初写的时候并没有了解next数组实现的过程是那样的,所以只…

【react全家桶学习】react中组件的props属性(详)

学过了vue的props属性,那react中的props属性如何使用呢? props的基本使用 我们先定义一个person组件 我们想要这三个参数动态传递进来,如何实现? 答:跟vue一样,直接在引用组件的地方进行传递即可。 在re…

Java——两个链表的第一个公共节点

题目链接 牛客网在线oj题——两个链表的第一个公共节点 题目描述 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的&#xff0…

润本“带伤”冲刺IPO,再闯“驱蚊第一股”

夏日来临,润本再度冲刺“驱蚊第一股”! 今年3月,润本生物技术股份有限公司(下称“润本”)再次更新招股书,拟在上交所主板上市。 润本是一家多品牌家庭护理产品公司, 专注于驱蚊类、个人护理类…

米哈游新游正式公测!还没上线就已经“爆了”!

米哈游制作的3D冒险主题回合制策略游戏《崩坏:星穹铁道》,在2023年4月26日正式开启全平台公测。 该游戏在2021年10月27日曾开启过“始发测试”,后继续沉淀了两年才正式开启公测。 B站的ACG内容生态丰富,其中游戏相关内容当数米哈…

C++“this”指针的使用

1.this指针的引出 先看一段代码&#xff1a; class Date { public:Date(int year0,int month0,int day0){_year year;_month month;_day day;}void Print(){cout << _year << " "<< _month << " "<< _day << end…

无需公网IP 使用SSH远程连接Linux CentOS服务器【内网穿透】

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置…

SDK_examples问题汇总

CompParameter 看起来可以用 拖动中间的dialog框 调整下面的参数 GraphicsViewDropEvent 点击“模型库”或者“用户模型”会弹出如下&#xff0c;点击“中止”后退出页面 MassSpringDamperApp 成功过&#xff0c;现在点击“开始仿真”会显示仿真失败 MwBatchSimPlu…

Coremail RSAC大会观察:在邮件安全领域AI既是矛也是盾

《Coremail RSAC大会观察&#xff1a;在邮件安全领域AI既是矛也是盾》 全球网络安全界的盛会——2023年RSAC大会于当地时间4月24日-27日在美国旧金山召开&#xff0c;大会以“Stronger Together&#xff08;一起变得更强大&#xff09;”为主题&#xff0c;议程主要包含安全研…

想入门网络安全?先来看看网络安全行业人才需求!

如果你是一个想要入门网络安全行业的小白、如果你是网络安全专业在读的大学生、如果你是正在找工作的新手&#xff0c;那么这篇文章你一定要仔细看。毕竟知己知彼百战百胜&#xff0c;知道行业的人才需求才能更好得发挥自己的优势。 当你打开BOSS直聘、拉钩等招聘网站&#xf…

【CTF WriteUp】2023数字中国创新大赛网络数据安全赛道决赛WP(1)

2023数字中国创新大赛网络数据安全赛道决赛WP(1) 比赛感想 不多说了&#xff0c;还是菜&#xff0c;各种不会&#xff0c;还得学 数据安全题目 Crypto-ddddmm import os from Crypto.Util.number import * from secret import flagdef genkey(bits):p getPrime(bits)q g…

网络模型与 IO 多路复用

一、基础概念1. socket2. FD&#xff1a;file descriptor**3. 内核态和用户态 二、 IO 多路复用1. 常见的IO模型2. 同步和异步3. 阻塞和非阻塞 三、 阻塞IO四、非阻塞 IO1、针对 read 函数造成的阻塞2、针对 accept函数造成的阻塞3、 select 模型4、poll模型5、epoll模型 一、基…

点成分享丨液滴生成解决方案

电源及电线为了满足用户的液滴生成需求&#xff0c;点成生物联合cellix推出了点成生物液滴生成解决方案&#xff0c;该套装可以一站式轻松满足用户液滴生成实验的需求。 Part.01 点成小科普 液滴生成&#xff0c;是一种在具备某种几何形状的微流控芯片中使用微流控泵精确控制…

Drools 规则引擎(包括动态加载数据库中规则引擎)

Drools 规则引擎 文章目录 Drools 规则引擎前言一、规则引擎是什么&#xff1f;二、Drools 简介1.引入规则引擎前后程序架构&#xff1a;2.Drools API 开发步骤&#xff1a;在这里插入图片描述 三、Drools 快速入门1.使用项目文件作为规则引擎2.使用数据库存储规则引擎 四、Dro…

【shell脚本】条件语句

一、条件测试操作 1.1test命令与 [ ] 符号 测试表达试是否成立&#xff0c;若成立返回0&#xff0c;否则返回其它数值 1.1.1文件测试常用的测试操作符 符号作用-d测试是否为目录-e测试是否为目录或文件-f测试是否为文件-r测试当前用户是否有读取权限-w测试当前用户是否有写…

2023-4-27-深入理解C++指针类型间强制转换

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

【致敬未来的攻城狮计划】— 连续打卡第十四天:FSP固件库开发延时函数(时钟详解)

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

数据结构_线性表、顺序表、单链表

目录 1. 线性表的定义和基本操作 1.1 线性表的定义 1.2 线性表的特点 1.3 线性表的基本操作 2. 线性表的顺序表示 2.1 顺序表的定义 2.2 顺序表上基本操作的实现 2.2.1 插入操作 2.2.2 删除操作 2.2.3 按值查找 2.3 相关练习巩固 3. 线性表的链式表示 3.1 单链表的…

Zynq-7000、FMQL45T900的GPIO控制(五)---linux应用层配置GPIO输出控制

上文中详细阐述了对应原理图MIO/EMIO的编号&#xff0c;怎么计算获取linux下gpio的编号 本文涉及C代码上传&#xff0c;下载地址 Zynq-7000、FMQL45T900的GPIO控制c语言代码资源-CSDN文库 本文详细记录一下针对获取到gpio的编号&#xff0c;进行配置输出模式&#xff0c;并进…

RobotFramework——创建项目

创建项目 实际上在Robot Framework中创建测试项目和创建单元测试项目是一致的。 robotunittest(python)Test ProjectTest ProjectTest SuitTest SuitTest CaseTest Case 1、创建测试项目 选择菜单栏 file —> New Project Name输入"TestRobot01"&#xff1b;…