kubeadm 默认证书为一年,一年过期后,会导致 api service 不可用,使用过程中会出现:x509: certificate has expired or is not yet valid.
可以在初始化群集之前重新编译 kubeadm,证书有效期自动为 100 年;也可如下重新编译修改证书
目录
一、获取源码
二、修改证书有效期
三、编译kubeadm
1 软件包准备
2 GoLang 环境
3 安装 Go 环境:
4 验证:
5 编译:
6 查看编译后的版本信息:
7 保存备用:
四、执行命令更新证书
1 检查证书到期时间:
2 续订全部证书:
3 再次查看证书有效期,全部都 100 年了:
一、获取源码
访问:Releases · kubernetes/kubernetes · GitHub,下载特定版本源码
1 2 3 4 |
#wget https://github.com/kubernetes/kubernetes/archive/v1.25.0.tar.gz #tar -zxvf kubernetes-1.25.0.tar.gz #mv kubernetes-1.25.0 kubernetes #cd kubernetes |
或者使用 git 获取
1 2 3 4 5 |
# yum install git # sudo apt install git #git clone https://github.com/kubernetes/kubernetes.git #cd kubernetes #git checkout -b remotes/origin/release-1.25 v1.25.0 |
二、修改证书有效期
主要修改两个地方
vim ./staging/src/k8s.io/client-go/util/cert/cert.go在这个文件里找到
NotAfter: now.Add(duration365d * 10).UTC()
输入 /NotAfter 查找,回车定位,默认是10年,修改为100年
vim ./cmd/kubeadm/app/constants/constants.go在这个文件里找到
CertificateValidity = time.Hour * 24 * 365
输入 /CertificateValidity 查找,回车定位,后面加上*100,改为100年
验证一下已经正确修改:
1 2 |
#cat ./staging/src/k8s.io/client-go/util/cert/cert.go | grep NotAfter #cat ./cmd/kubeadm/app/constants/constants.go | grep CertificateValidity |
三、编译kubeadm
1 软件包准备
CentOS:
1 2 |
#yum groupinstall "Development Tools" -y #yum install rsync jq -y |
Ubuntu:
1 2 |
#sudo apt install build-essential #(Following command will install essential #commands like gcc, make etc.) #sudo apt install rsync jq -y |
2 GoLang 环境
查看 kube-cross 的 TAG 版本号
1 2 3 |
# cat ./build/build-image/cross/VERSION |
3 安装 Go 环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
wget https://dl.google.com/go/go1.17.5.linux-amd64.tar.gz ## 或者 # wget https://golang.google.cn/dl/go1.17.5.linux-amd64.tar.gz tar zxvf go1.17.5.linux-amd64.tar.gz -C /usr/local # 编辑 / etc/profile 文件添加如下: ##go setting (sysin) #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 |
4 验证:
1 2 3 |
go version # 输出如下 go version go1.17.5 linux/amd64 |
5 编译:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 编译 kubeadm, 这里主要编译 kubeadm 即可 make all WHAT=cmd/kubeadm GOFLAGS=-v # 编译 kubelet # make all WHAT=cmd/kubelet GOFLAGS=-v # 编译 kubectl # make all WHAT=cmd/kubectl GOFLAGS=-v #编译完产物在 _output/bin/kubeadm 目录下, #其中 bin 是使用了软连接 (sysin) #真实路径是_output/local/bin/linux/amd64/kubeadm mv /usr/bin/kubeadm /usr/bin/kubeadm_backup cp _output/local/bin/linux/amd64/kubeadm /usr/bin/kubeadm chmod +x /usr/bin/kubeadm |
6 查看编译后的版本信息:
1 2 3 |
kubeadm version # 输出如下 kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"archive", BuildDate:"2024-01-04T01:22:09Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"} |
7 保存备用:
1 2 3 4 5 6 |
# 压缩保存到用户主目录下 tar zcvf ~/kubeadm-1.23.1.tgz -C /usr/bin/kubeadm # 在其他节点上替换原有版本 mv /usr/bin/kubeadm /usr/bin/kubeadm_bak tar zxvf ./kubeadm-1.23.1.tgz -C /usr/bin/ |
四、执行命令更新证书
如果是使用原版 kubeadm 安装之后,可以手动执行命令更新证书有效期到 100 年。
可以先备份证书,证书在 /etc/kubernetes/pki文章来源:https://www.toymoban.com/news/detail-783208.html
1 检查证书到期时间:
1 2 3 |
kubeadm certs check-expiration # 早期版本 (1.19 及之前版本) 命令如下 #kubeadm alpha certs check-expiration |
kubeadm alpha 命令 1.21 开始彻底废弃。文章来源地址https://www.toymoban.com/news/detail-783208.html
2 续订全部证书:
1 |
kubeadm certs renew all |
3 再次查看证书有效期,全部都 100 年了:
1 |
kubeadm certs check-expiration |
到了这里,关于k8s证书100年到期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!