前言

kubeadm 生成的客户端证书在 1 年后到期。过期后,会导致服务不可用,使用过程中会出现:x509: certificate has expired or is not yet valid.

默认情况下,kubeadm 会生成运行一个集群所需的全部证书。但要使用自定义的证书,需要生成各个组件的证书,所以直接修改 kubeadm 源码,将证书的时间延长为100年。

获取源码

下载特定版本源码:https://github.com/kubernetes/kubernetes/releases

或者 git 获取,切换到指定版本

# 查看当前分支
git branch
# 查看所有分支
git tag -l #切换至1.14.1分支
git checkout v1.14.1
#切换到1.20.8分支
git checkout v1.20.8
git clone https://github.com/kubernetes/kubernetes.git

git checkout -b remotes/origin/release-1.23 v1.23.17

修改源码

修改 CA 有效期为 100 年

vim ./staging/src/k8s.io/client-go/util/cert/cert.go
// 这个方法里面 NotAfter:              now.Add(duration365d * 10).UTC()
// 默认有效期就是 10 年,改成 100 年 (sysin)
// 输入 /NotAfter 查找,回车定位
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,
},
NotBefore: now.UTC(),
// NotAfter: now.Add(duration365d * 10).UTC(),
NotAfter: now.Add(duration365d * 100).UTC(),
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)
}

修改证书有效期为 100 年

vim ./cmd/kubeadm/app/constants/constants.go
// 就是这个常量定义 CertificateValidity,改成 * 100 年 (sysin)
// 输入 /CertificateValidity 查找,回车定位
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
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"

本地编译kubeadm

更新linux编译环境

CentOS:

yum groupinstall "Development Tools" -y #gcc, make etc.
yum install rsync jq -y

Ubuntu:

sudo apt install build-essential #(Following command will install essential commands like gcc, make etc.)
sudo apt install rsync jq -y

安装go环境

或者从这里下载go源码包:https://studygolang.com/dl

wget https://dl.google.com/go/go1.22.linux-amd64.tar.gz
## 或者
# wget https://golang.google.cn/dl/go1.22.linux-amd64.tar.gz
tar zxvf go1.22.linux-amd64.tar.gz -C /usr/local # 编辑 / etc/profile 文件添加如下:
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin #使环境变量生效
#source /etc/profile # 这里一次性编译,直接执行如下命令即可
export PATH=$PATH:/usr/local/go/bin

验证:

go version
# 输出如下
go version go1.22 linux/amd64

编译

编译kubeadm

make WHAT=cmd/kubeadm GOFLAGS=-v

编译kubelet

make all WHAT=cmd/kubelet GOFLAGS=-v

编译kubectl

make all WHAT=cmd/kubectl GOFLAGS=-v

编译生成的二进制文件在 _output/bin/ 目录下

查看编译后的版本信息

kubeadm version

替换kubeadm,更新证书

# 将kubeadm 文件拷贝替换系统中原有kubeadm
cp /usr/bin/kubeadm /usr/bin/kubeadm_bak
cp _output/bin/kubeadm /usr/bin/kubeadm # 备份kube-master节点证书
cp -r /etc/kubernetes/pki /etc/kubernetes/pki_bak

检查证书到期时间

kubeadm certs check-expiration

# 早期版本 (1.19 及之前版本) 命令如下,kubeadm alpha certs 命令 1.20 开始废弃,kubeadm alpha 命令 1.21 开始彻底废弃
kubeadm alpha certs check-expiration

续订全部证书

kubeadm certs renew all

再次查看证书有效期,全部都 100 年了

kubeadm certs check-expiration

k8s v1.19版本之后,自签证书过期x509: certificate has expired or is not yet valid

k8s v1.16.3,Unable to connect to the server: x509: certificate has expired or is not yet valid

Kubernetes 编译 kubeadm 修改证书有效期到 100 年的更多相关文章

  1. Kubernetes v1.22 编译 kubeadm 修改证书有效期到 100 年

    此方法支持以下 kubeadm版本 v1.22到v1.25 kubeadm 默认证书为一年,一年过期后,会导致 api service 不可用,使用过程中会出现:x509: certificate h ...

  2. K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年

    1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...

  3. 编译kubeadm使生成证书有效期为100年

    目录 问题 编译 检查结果 问题 当我使用kubeadm部署成功k8s集群时在想默认生成的证书有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 ...

  4. kubernetes 1.17.2 kubeadm部署 证书修改为100年

    [root@hs-k8s-master01 ~]# cd /data/ [root@hs-k8s-master01 data]# ls docker [root@hs-k8s-master01 dat ...

  5. 重新编译kubeadm,修改默认证书时间

    参考 kubeadm alpha certs renew Kubeadm1.14 证书调整 kubeadm 部署的 kubernetes 集群,默认的证书有效时间是1年,需要每年手工更新. 1. 重新 ...

  6. Kubernetes中的Helm和修改证书有效时间(八)

    一.Helm的介绍 1,概念 Helm 把 k8s 资源(比如 deployments.services 或 ingress 等)打包到一个 chart 中,而 chart 被保存到 chart 仓库 ...

  7. 源码编译Kubeadm二进制文件

    kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验k ...

  8. kubernetes使用kubeadm升级集群

    升级前准本  官网: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/查看可升级的组件 [root@h ...

  9. kubernetes之Kubeadm快速安装v1.12.0版

    通过Kubeadm只需几条命令即起一个单机版kubernetes集群系统,而后快速上手k8s.在kubeadm中,需手动安装Docker和kubeket服务,Docker运行容器引擎,kubelet是 ...

  10. kubeSphere+kubernetes 集群更新证书

    模拟问题点 使用kubernetes时错误提示 yang@master:~$ kubectl get nodes Unable to connect to the server: x509: cert ...

随机推荐

  1. 龙哥量化:缠中说禅(缠论)K线包含处理

    声明:看到研究非常细致深入的文章,转载到我的博客园,以便学习和研究. (转载知乎的DennisWin) 缠中说禅技术理论包括两大部分:缠论形态学和缠论动力学.其中形态学是根本,动力学是辅助.缠论形态学 ...

  2. Qt编写地图综合应用36-覆盖物折线

    一.前言 折线图目前应用最广的也是用来绘制各种轨迹,折线图其实就是后面动态轨迹图.飞机航线图的前身,公用的一个方法addPolyline,折线图可以设置颜色.粗细.透明度等属性,如果开启了悬浮绘图工具 ...

  3. Qt编写安防视频监控系统47-基本设置

    一.前言 一个系统中肯定有不少的配置参数存储在配置文件中,配置文件可以是ini文件,也可以是json文件,还可以是自定义格式的文本文件,本人比较推荐ini文件,读写节点极其方便,支持中文内容,各种Qt ...

  4. 使用C#构建一个论文总结AI Agent

    前言 我觉得将日常生活中一些简单重复的任务交给AI Agent,是学习构建AI Agent应用一个很不错的开始.本次分享我以日常生活中一个总结论文的简单任务出发进行说明,希望对大家了解AI Agent ...

  5. WPF使用Microsoft.Toolkit.Mvvm作为Mvvm框架DryIoc作依赖注入

    背景 MVVMLight已多年未更新,Microsoft.Toolkit.Mvvm作为MVVMLight继任者,需要学习一下. Microsoft.Toolkit.Mvvm跟MVVMLight使用非常 ...

  6. c# WindowsCommunityToolkit--- Shade Animation

    WindowsCommunityToolkit: https://github.com/CommunityToolkit/WindowsCommunityToolkit You can also pr ...

  7. 安全可信 | 首批!天翼云边缘安全加速平台AccessOne通过信通院“软件自研创新能力”专项评估

    近日,中国信息通信研究院(以下简称"中国信通院")公布"软件自研创新能力"专项评估(简称"可信研创")结果,天翼云边缘安全加速平台Acces ...

  8. 安装VMware

    安装VMware 官网下载 首先需要进行账号注册:https://support.broadcom.com/ 注册完成后,进行账号登录:https://login.broadcom.com/signi ...

  9. 硬件设计:逻辑电平--差分信号(PECL、LVDS、CML)电平匹配

    参考资料:逻辑电平设计规范 PECL电平匹配设计指南 CML信号与LVPECL信号的连接 硬件设计:逻辑电平--CML 硬件设计:逻辑电平--ECL/PECL/LVPECL 硬件设计:逻辑电平--LV ...

  10. 推荐一款人人可用的开源 BI 工具,更符合国人使用习惯的数据可视化分析工具,数据大屏开发神器!

    前言 今天大姚给大家推荐一款人人可用的开源.免费的 BI 工具,更符合国人使用习惯的数据可视化分析工具,数据大屏开发神器,Tableau.帆软的开源替代:DataEase. 工具介绍 DataEase ...