Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书
文章目录
- 前言
- 一、资源准备
- 1. 下载对应源码
- 2.安装编译工具
- 3.安装并设置golang
- 二、修改证书有效期
- 1.修改证书有效期
- 2.修改 CA 证书有效期
- 三、编译kubeadm
- 四、使用新kubeadm方式
- 1.当部署新集群时,使用该kubeadm进行初始化
- 2.替换现有集群kubeadm操作
前言
kubeadm 默认证书为一年,一年过期后会导致 api service 不可用,使用过程中会出现:x509: certificate has expired or is not yet valid.错误。为了防止过期后未及时替换证书的情况出现,建议在部署k8s集群前就编译好100年的kubeadm组件,避免后续重复替换证书步骤
已经测试适用于1.28版本,编译机器是麒麟V10 SP2 x86_64架构
一、资源准备
1. 下载对应源码
[root@ops ~]# git clone https://github.com/kubernetes/kubernetes.git
[root@ops ~]# cd kubernetes
[root@ops ~]# git checkout -b remotes/origin/release-1.28 v1.28.2
2.安装编译工具
[root@ops ~]# yum install -y gcc make rsync jq
3.安装并设置golang
[root@ops ~]# wget https://dl.google.com/go/go1.20.8.linux-amd64.tar.gz
## 解压并放置在一个目录中
[root@ops ~]# tar zxvf go1.20.8.linux-amd64.tar.gz -C /usr/local## 编辑 /etc/profile 文件,添加 Go 环境配置内容
[root@ops ~]# vi /etc/profile
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin## 使配置生效
[root@ops ~]# source /etc/profile## 测试 Go 命令是否配置成功,成功则显示如下
[root@ops ~]# go version
go version go1.20.2 linux/amd64
二、修改证书有效期
主要是以下两个地方进行修改即可
1.修改证书有效期
代码如下(示例):
[root@ops ~]# vim cmd/kubeadm/app/constants/constants.go
const (// KubernetesDir is the directory Kubernetes owns for storing various configuration filesKubernetesDir = "/etc/kubernetes"// ManifestsSubDirName defines directory name to store manifestsManifestsSubDirName = "manifests"// TempDirForKubeadm defines temporary directory for kubeadm// should be joined with KubernetesDir.TempDirForKubeadm = "tmp"// CertificateValidity defines the validity for all the signed certificates generated by kubeadm// CertificateValidity = time.Hour * 24 * 365 #默认为1年CertificateValidity = time.Hour * 24 * 365 * 100 #设置此处 // CACertAndKeyBaseName defines certificate authority base nameCACertAndKeyBaseName = "ca"// CACertName defines certificate nameCACertName = "ca.crt"// CAKeyName defines certificate nameCAKeyName = "ca.key"...)
2.修改 CA 证书有效期
代码如下(示例):
[root@ops ~]# vim staging/src/k8s.io/client-go/util/cert/cert.go
func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, error) {now := time.Now()tmpl := x509.Certificate{SerialNumber: new(big.Int).SetInt64(0),Subject: pkix.Name{CommonName: cfg.CommonName,Organization: cfg.Organization,},DNSNames: []string{cfg.CommonName},NotBefore: now.UTC(),NotAfter: now.Add(duration365d * 100).UTC(), ##### 这里改成 100 年KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,BasicConstraintsValid: true,IsCA: true,}certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &tmpl, &tmpl, key.Public(), key)if err != nil {return nil, err}return x509.ParseCertificate(certDERBytes)
}
三、编译kubeadm
耐心等待
[root@ops kubernetes]# make WHAT=cmd/kubeadm GOFLAGS=-v
编译成功后的 kubeadm 会放到当前目录中的 ./_output/local/bin/linux/amd64/ 目录中
## 进入[root@ops kubernetes]# cd ./_output/local/bin/linux/amd64/## 查看文件列表[root@ops amd64]# ls -l
....
-rwxr-xr-x 10:04 kubeadm ---->新编译好的二进制文件
....
四、使用新kubeadm方式
1.当部署新集群时,使用该kubeadm进行初始化
## 备份已有的 kubeadm 工具
[root@ops ~]# mv /usr/bin/kubeadm /usr/bin/kubeadm_backup## 使用自己编译的 kubeadm 替换现有的 kubeadm 工具
[root@ops ~]# cp ./_output/local/bin/linux/amd64/kubeadm /usr/bin/kubeadm## 修改文件的执行权限
[root@ops ~]# chmod +x /usr/bin/kubeadm## 执行初始化命令、添加节点到集群中的命令等
当部署完成后,查看集群证书时间

2.替换现有集群kubeadm操作
当集群已存在且证书有效期是1年时,更新集群证书有效期
## 备份已有的 kubeadm 工具
[root@ops ~]# mv /usr/bin/kubeadm /usr/bin/kubeadm_backup## 使用自己编译的 kubeadm 替换现有的 kubeadm 工具
[root@ops ~]# cp ./_output/local/bin/linux/amd64/kubeadm /usr/bin/kubeadm## 修改文件的执行权限
[root@ops ~]# chmod +x /usr/bin/kubeadm## 更新证书
[root@ops ~]# kubeadm alpha certs renew all## 更新节点kubectl配置文件
[root@ops ~]# cp /etc/kubernetes/admin.conf /root/.kube/config## 备份apiserver、controller manager、schedule配置文件
[root@ops ~]# cp -r /etc/kubernetes/manifests/ /etc/kubernetes/manifests-bak## 重启apiserver、controller manager、schedule
[root@ops ~]# cd /etc/kubernetes/manifests
[root@ops manifests]# mv kube-* ../## 查看apiserver、controller manager、schedule pod,等待当前节点相关pod删除后,还原配置文件
[root@ops manifests]# cp ../kube*.yaml .## 检查当前节点apiserver、controller manager、schedule无异常后,操作下一节点。
[root@ops ~]# kubectl get pods -n kube-system -o wide |grep kube-apiserver
[root@ops ~]# kubectl get pods -n kube-system -o wide |grep kube-controller-manager
[root@ops ~]# kubectl get pods -n kube-system -o wide |grep kube-scheduler## 再次查看证书状态
[root@ops ~]# kubeadm certs check-expiration

至此,就是编译好kubeadm后的两种使用方式
相关文章:
Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书
文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...
C++----STL(string)
引言:STL简介 什么是STL STL(standard template libaray-标准模板库): 是 C标准库的重要组成部分(注意:STL只是C标准库里的一部分,cin和cout也是属于C标准库的),不仅是一个可复用的组件库&…...
利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情
在当今数字化时代,数据是商业决策的关键。对于从事国际贸易的商家来说,精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台,拥有海量的商品数据。通过 Java 爬虫技术,我们可以高效地从 yiwugo 根据商品 ID 获取详细…...
vue2修改表单只提交被修改的数据的字段传给后端接口
效果: 步骤一、 vue2修改表单提交的时候,只将修改的数据的字段传给后端接口,没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性,用于存储初始表单数据的副本,与当前表单数据进行比较,找出哪些…...
Flink类加载机制详解
1. 总览 在运行Flink应用时,它会加载各种类,另外我们用户代码也会引入依赖,由于他们依赖版本以及加载顺序等不同,就可能会导致冲突,所以很要必要了解Flink是如何加载类的。 根据加载的来源的不同,我们可以将类分为三种: Java Classpath:Java类路径下,这是Java通用的…...
ClickHouse大数据准实时更新
一、问题背景 最近有一个项目需求,需要对日活跃的3万辆车的定位数据进行分析,并支持查询和统计分析结果。每辆车每天产生1条分析结果数据,要求能够查询过去一年内的所有分析结果。因此,每月需要处理约90万条记录,一年大…...
计算机网络之---端口与套接字
总括 端口:是计算机上用于标识网络服务的数字标识符,用于区分不同的服务或应用程序。套接字:是操作系统提供的用于进程间网络通信的编程接口,允许程序通过它来进行数据的发送、接收和连接管理。关系:端口号用于标识服…...
UE5中制作地形材质
在创作大场景内容时,地形的设计和优化是至关重要的一步。利用UE中的地形系统,开发者能够高效地创建复杂的地形形态,同时保持游戏的性能和视觉效果。 1.在创建地形之前,先新建一个地形使用的混合材质球,添加节点Landsc…...
【Docker】docker compose 安装 Redis Stack
注:整理不易,请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是? 简单来说,Redis Stack 是增强版的 Redis ,它在传统的 Redis 数据库基础上增加了一些高级功能和模块,以支持更多的使用场景和需求。Redis…...
pytest 常用插件
pytest 提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest 插件介绍,并结合 pytest.main() 进行使用的示例。 1. pytest-xdist pytest-xdist 插件用于并行化测试的执行,可以将测试分配到多个 CPU 核心并行运行,从…...
浅谈云计算05 | 云存储等级及其接口工作原理
一、云存储设备 在当今数字化飞速发展的时代,数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频,到企业运营里的关键业务文档、客户资料,数据量呈爆炸式增长。面对海量的数据,如何安全、高效且便捷地存…...
linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包,文本处理sed,awk
关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less,grep 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 文本处理 awk 创建文件 格式: touch 文件名 删除文件 复制文…...
CentOS 8 如何安装java与mysql
在CentOS 8上安装Java和MySQL的步骤如下: 1. 安装 Java 1.1 安装 OpenJDK(推荐) CentOS 8 默认的软件仓库提供了 OpenJDK 包,您可以直接使用 dnf 命令安装。 # 更新系统 sudo dnf update -y# 安装 OpenJDK 11(Cent…...
Go语言之路————go基本语法、数据类型、变量、常量、输出
Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触G…...
音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息
音视频入门基础:MPEG2-PS专题系列文章: 音视频入门基础:MPEG2-PS专题(1)——MPEG2-PS官方文档下载 音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件 音视频入门基础…...
Docker安装和卸载(centos)
Docker安装和卸载 一,已安装Docker,卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 如果出现以下提示就证明没卸载…...
YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…...
Winforms开发基础之非主线程操作UI控件的误区
前言 想象一下,你正在开发一个桌面应用程序,用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿,你决定使用后台线程来处理任务。然而,当你在后台线程中尝试更新UI控件时,程序突然崩溃了。这是为什么呢࿱…...
Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
背景: 在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释: 之所以会产生冲突,是因为Get.snackbar在关…...
springcloudalibaba集成fegin报错ClassNotFoundException解决方案
集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...
远程服务器Jupyter Notebook安全配置全攻略
1. 为什么需要远程Jupyter Notebook? 很多数据分析师和开发者都遇到过这样的困扰:本地的电脑性能有限,跑个大型数据集就卡成PPT;出差时想调取公司服务器的代码,却发现环境配置复杂到怀疑人生。这时候,远程J…...
终极指南:3步永久解密科学文库PDF文档,告别7天访问限制
终极指南:3步永久解密科学文库PDF文档,告别7天访问限制 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档,支持破解科学文库、标准全文数据库下载的文档。无损破解,保留文字和目录,解除有效期限制。 …...
PP-DocLayoutV3实战教程:解决OCR漏检/错序问题的布局预处理方案
PP-DocLayoutV3实战教程:解决OCR漏检/错序问题的布局预处理方案 1. 引言:为什么需要专业的文档布局分析? 你有没有遇到过这样的情况:用OCR工具识别扫描文档时,文字顺序乱七八糟,标题被误认为正文…...
LLM 怎么生成回答?揭秘“思考“过程
系列:大语言模型原理科普(5 篇) 本篇:第 3 篇 难度:⭐⭐ 零基础 浅显技术 字数:约 9500 字 阅读时间:20 分钟📖 开篇:你输入问题后,发生了什么? …...
统计数据时,sql执行超时,如何处理
在工作中,除了开发,有时还需要做一些数据统计。 统计数据时,sql执行超时。 可以通过以下手段处理。 一、优化sql 首先,通过 EXPLAIN 查看执行计划,看有没有走索引,能加索引的加索引,没有走索引…...
从 CLI 调用到 SDK 集成:GitHub Copilot 在 .NET 项目中的最佳实践
从 CLI 调用到 SDK 集成:GitHub Copilot 在 .NET 项目中的最佳实践 从命令行调用到官方 SDK 集成的升级之路,说起来也算是一段经历,今天就分享我们在 HagiCode 项目中踩过的坑和学到的东西。 背景 GitHub Copilot SDK 在 2025 年正式发布后&…...
2025最权威的十大降重复率方案解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要把AIGC(人工智能生成内容)被查出来的可能性给降下去,得…...
seo网络优化如何提高网站的转化率
SEO网络优化如何提高网站的转化率 在当前的互联网时代,网站的流量和转化率是衡量企业在网络上竞争力的重要指标。而搜索引擎优化(SEO)网络优化作为提高网站流量和转化率的有效手段,其重要性不言而喻。SEO网络优化究竟能如何有效提…...
直播推流技术:突破平台限制的开发者解决方案
直播推流技术:突破平台限制的开发者解决方案 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码,以便可以绕开哔哩哔哩直播姬,直接在如OBS等软件中进行直播,软件同时提供定义直播分区和标题功能 项目…...
量化交易回测工具革新:backtrader-pyqt-ui让策略开发效率提升10倍的实践指南
量化交易回测工具革新:backtrader-pyqt-ui让策略开发效率提升10倍的实践指南 【免费下载链接】backtrader-pyqt-ui 项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui backtrader-pyqt-ui是一款将Backtrader量化回测引擎与PyQt图形界面完美…...
