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

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后的两种使用方式



http://www.kler.cn/a/504257.html

相关文章:

  • 6.1 MySQL数字函数和条件函数
  • 国内源快速在线安装qt5.15以上版本。(10min安装好)(图文教程)
  • 【I/O编程】UNIX文件基础
  • 浅谈ArcGIS的地理处理(GP)服务之历史、现状和未来
  • WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞
  • C#类型转换
  • 什么叫慢查询 ?什么情况下出现?怎么解决,怎么优化 在微服务中
  • 《Java核心技术II》用Java连接到服务器
  • QT跨平台应用程序开发框架(2)—— 初识QT
  • 充电平台架构图demo
  • STM32 FreeRTOS 基础知识
  • Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)
  • JAVA实战开源项目:课程智能组卷系统(Vue+SpringBoot) 附源码
  • 概率函数,累计分布函数
  • 【向量数据库 Milvus】Milvus 2.5版本CPU 安装单机版
  • FLASK 上传文件
  • 单独编译QT子模块
  • HTB:Driver[WriteUP]
  • JavaScript系列(21)-- Iterator详解
  • vscode使用Marscode编程助手
  • Bevy 移动端开发指南
  • Python在CMD中的参数说明
  • ubuntu20.04中vscode配置django
  • qt vs ios开发应用环境搭建和上架商店的记录
  • Bash语言的多线程编程
  • pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)