Kubernetes 编译 kubeadm 修改证书有效期到 100 年
前言
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 年的更多相关文章
- Kubernetes v1.22 编译 kubeadm 修改证书有效期到 100 年
此方法支持以下 kubeadm版本 v1.22到v1.25 kubeadm 默认证书为一年,一年过期后,会导致 api service 不可用,使用过程中会出现:x509: certificate h ...
- K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年
1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...
- 编译kubeadm使生成证书有效期为100年
目录 问题 编译 检查结果 问题 当我使用kubeadm部署成功k8s集群时在想默认生成的证书有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 ...
- kubernetes 1.17.2 kubeadm部署 证书修改为100年
[root@hs-k8s-master01 ~]# cd /data/ [root@hs-k8s-master01 data]# ls docker [root@hs-k8s-master01 dat ...
- 重新编译kubeadm,修改默认证书时间
参考 kubeadm alpha certs renew Kubeadm1.14 证书调整 kubeadm 部署的 kubernetes 集群,默认的证书有效时间是1年,需要每年手工更新. 1. 重新 ...
- Kubernetes中的Helm和修改证书有效时间(八)
一.Helm的介绍 1,概念 Helm 把 k8s 资源(比如 deployments.services 或 ingress 等)打包到一个 chart 中,而 chart 被保存到 chart 仓库 ...
- 源码编译Kubeadm二进制文件
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验k ...
- kubernetes使用kubeadm升级集群
升级前准本 官网: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/查看可升级的组件 [root@h ...
- kubernetes之Kubeadm快速安装v1.12.0版
通过Kubeadm只需几条命令即起一个单机版kubernetes集群系统,而后快速上手k8s.在kubeadm中,需手动安装Docker和kubeket服务,Docker运行容器引擎,kubelet是 ...
- kubeSphere+kubernetes 集群更新证书
模拟问题点 使用kubernetes时错误提示 yang@master:~$ kubectl get nodes Unable to connect to the server: x509: cert ...
随机推荐
- Qt音视频开发30-qmedia内核qt4方案phonon播放(支持视频流)
一.前言 在Qt4中如果需要播放视频,一般用phonon多媒体框架,这应该就是Qt5/Qt6中多媒体框架的前身(查阅qmultimedia模块的相关代码可以发现架构几乎雷同,除了部分命名变了以外),p ...
- JS-正则表达式(基本语法、test、exec、\d\D\w\W\s\S .)
二,正则表达式 1,什么是正则表达式 是一种规范,对字符串格式进行验证的规范 不用自己写,常用的正则表达式,网上都有,只要会使用就可以 2,定义方法 字面量 var reg = /正则表达式/ 常用方 ...
- spark (四) RDD概念
目录 1. RDD基本概念 1.1 弹性 1.2 分布式 1.3 数据集 1.4 数据抽象 1.5 不可变 1.6 可分区.并行计算 2. WordCount为例,看RDD特性 3. RDD的五大属性 ...
- Note -「A. Algebra 24 Aut.」“还有一束日光正在为你送达”
欢迎勘误吖! 喵, 你可以 Ctrl-F 搜 "lww" 获取少量 lww 笑话. (雾 ↓下面这个是我目前用的 LaTeX 宏, 如果需要可以 "Show ...
- 夜莺监控支持 ES 日志告警了
夜莺项目( https://github.com/ccfos/nightingale )发布了 v8.0.0-beta.3 版本,这个版本主要是支持了 ES 日志告警,下面给大家介绍一下. 新版本下载 ...
- 单点认证(SSO)方案调研总结
SSO方案 SSO介绍 单点登录(SSO)是一种身份验证解决方案,可让用户通过一次性用户身份验证登录多个应用程序和网站.这意味着用户只需输入一次用户名和密码,即可访问所有相互信任的系统,而无需在每个系 ...
- 轮播图,swiper使用
背景: 最近接到一个需求,重写首页,需要用到轮播图. 但是轮播图只用两张图,此为前提. 本想直接用ElementUI的走马灯,但是只用两张图的情况下,走马灯不能循环播放,只能来回播放,公司的UI小姐姐 ...
- 平滑升级mariadb
问题 Centos7自带的MariaDB版本是5.5 ,版本过于老旧,现想升级到最新版本,且数据不丢失 措施 备份原来的数据 mysqldump -u root -p --all-databases ...
- Kotlin:【初始化】延时初始化、惰性初始化、初始化的三个陷阱
- SQL Server与ORACLE数据库存储过程编写的几个不同之处
一直在使用SQL Server数库的存储过程进行业务数据处理,现在ORACLE上进行存储过程应用,感觉没有MSSQL的方便灵活,总结了以下几点区别: 1.入参数据类型不要书写长度.比如:userNam ...