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 files
        KubernetesDir = "/etc/kubernetes"
        // ManifestsSubDirName defines directory name to store manifests
        ManifestsSubDirName = "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 name
        CACertAndKeyBaseName = "ca"
        // CACertName defines certificate name
        CACertName = "ca.crt"
        // CAKeyName defines certificate name
        CAKeyName = "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后的两种使用方式


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (三、影视搜索页功能实现)

在HarmonyOS NEXT开发环境中,我们可以使用nutpi/axios库来简化网络请求的操作。本文将展示如何使用HarmonyOS NEXT框架和nutpi/axios库,从零开始实现一个简单的影视APP,主要关注影视搜索页的功能实现。 为什么选择nutpi/axios? n…

高级运维:shell练习2

1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 vim check.sh #!/bin/bash# 定义网络前缀 network_prefix"192.168.1"# 循环遍历1-254的IP for i in {1..254}; do# 构造完整的IP地址ip"$network_…

好用的php商城源码有哪些?

选择一个优秀的商城工具,能更好地帮助大家建立一个好用的商城系统。目前比较流行的都是开源PHP商城系统,那么现实中都有哪些好用的PHP商城源码值得推荐呢?下面就带大家一起来了解一下。 1.TigShop 【推荐指数】:★★★★★☆ 【推…

Docker Desktop 构建java8基础镜像jdk安装配置失效解决

Docker Desktop 构建java8基础镜像jdk安装配置失效解决 文章目录 1.问题2.解决方法3.总结 1.问题 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像,前几天我使用Docker Desktop环境重新构建了一个…

Open FPV VTX开源之嵌入式OSD配置

Open FPV VTX开源之嵌入式OSD配置 1. 源由2. 安装3. 配置步骤一:备份/etc/telemetry.conf步骤二:修改/etc/telemetry.conf步骤三:配置时区步骤四:重启摄像头 4. 实测5. 参考资料 1. 源由 穿越机模拟图传延迟通常在10ms左右。 最…

数据平台浅理解

定义 数据平台架构是指用于收集、存储、处理和分析数据的一系列组件、技术和流程的整体架构设计。它就像是一个复杂的数据生态系统的蓝图,旨在高效地管理数据从产生源头到产生价值的整个生命周期。 主要层次 数据源层 这是数据的起点,包含各种类型的数据…

CSS3的aria-hidden学习

前言 aria-hidden 属性可用于隐藏非交互内容,使其在无障碍 API 中不可见。即当aria-hidden"true" 添加到一个元素会将该元素及其所有子元素从无障碍树中移除,这可以通过隐藏来改善辅助技术用户的体验: 纯装饰性内容,如…

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵:用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) :某类中正确分类的像元数除以参考数据中该类的像元数(列方向),又称…

认识机器学习中的结构风险最小化准则

上一篇文章我们学习了关于经验风险最小化准则,其核心思想是通过最小化训练数据上的损失函数来优化模型参数,从而提高模型在训练集上的表现。但是这也会导致一个问题,经验风险最小化原则很容易导致模型在训练集上错误率很低,但在未…

设计模式-工厂模式/抽象工厂模式

工厂模式 定义 定义一个创建对象的接口,让子类决定实列化哪一个类,工厂模式使一个类的实例化延迟到其子类; 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中,核心工厂类不在负责产品的创建,而是将具体的创建工作…

Chatper 4: Implementing a GPT model from Scratch To Generate Text

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture4.2 Normalizing activations with layer normalization4.3 Implementing a feed forward network with GELU activations4.4 Adding shortcut connections4.5 Connecting at…

Unity ShaderGraph中Lit转换成URP的LitShader

ShaderGraph中的LitShader如下: 在顶点和片元着色器暴露出了上图中的几个参数,要转换成URPLitShaderLab,首先要找到这几个参数,打开LitShader,找到第一个Pass,可以看到下图中的顶点和片元的定义函数,还有引…

uni-app的学习

uni-app 有着跨平台支持、丰富的插件和生态系统、高性能、集成开发工具HBuilderX的配合使用。允许使用者仅通过一套代码发布到多平台使用。 uni-app官网 uni-app 是一个适合开发跨平台移动应用和小程序的框架,能够大幅提高开发效率。 一、了解 1.1 工具准备 从Git…

USRP X310 Windows 烧录镜像

说明 USRP-X 系列设备包含两个用于两个以太网通道的 SFP 端口。由于 SFP 端口支持 1 千兆 (SFP) 和 10 千兆 (SFP) 收发器,因此 UHD 附带了多个 FPGA 图像,以确定上述接口的行为。 注意:Aurora 图像需要从 FPGA 源代码手动构建。 FPGA 图像…

Sprint Boot教程之五十八:动态启动/停止 Kafka 监听器

Spring Boot – 动态启动/停止 Kafka 监听器 当 Spring Boot 应用程序启动时,Kafka Listener 的默认行为是开始监听某个主题。但是,有些情况下我们不想在应用程序启动后立即启动它。 要动态启动或停止 Kafka Listener,我们需要三种主要方法…

Docker save load 镜像 tag 为 <none>

一、场景分析 我从 docker hub 上拉了这么一个镜像。 docker pull tomcat:8.5-jre8-alpine 我用 docker save 命令想把它导出成 tar 文件以便拷贝到内网机器上使用。 docker save -o tomcat-8.5-jre8-alpine.tar.gz 镜像ID 当我把这个镜像传到别的机器,并用 dock…

计算机网络(三)——局域网和广域网

一、局域网 特点:覆盖较小的地理范围;具有较低的时延和误码率;使用双绞线、同轴电缆、光纤传输,传输效率高;局域网内各节点之间采用以帧为单位的数据传输;支持单播、广播和多播(单播指点对点通信…

浅谈云计算01 | 云计算服务的特点

在当今数字化时代,云计算作为一种强大的技术解决方案,正逐渐改变着企业和个人对信息技术的使用方式。本文将详细探讨云计算的五个主要特点,包括按需自助服务、广泛的网络接入、资源池化、快速弹性伸缩以及可计量服务。 一、按需自助服务 云…

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…

DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议

文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴(Event Storming)事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…