k8s重新编译kubeadm解决证书过期问题,适用于v1.15.1 v1.15.3 v.1.16.4等
作者:互联网
问题说明
kubeadm 是 kubernetes 提供的一个初始化集群的工具,使用起来非常方便。但是它创建的apiserver、controller-manager等证书默认只有一年的有效期,同时kubelet 证书也只有一年有效期,一年之后 kubernetes 将停止服务。
官方推荐一年之内至少用 kubeadm upgrade 更新一次 kubernetes 系统,更新时也会自动更新证书。不过,生产环境或者无法连接外网的环境频繁更新 kubernetes 不太现实。
重新编译kubeadm
这里测试了三个版本的k8s,一个是v1.15.1, v1.15.3, v1.16.3,都适用
下载k8s源码
直接google搜索kubernetes github
去下载即可
修改源码
进到源码目录中,需要修改两处地方
第一个地方:
# vim ./staging/src/k8s.io/client-go/util/cert/cert.go NotAfter: now.Add(duration365d * 10).UTC(), //默认为10年,修改为100年,不能超过1000年,因为我试过不行
第二个地方:
# vim ./cmd/kubeadm/app/constants/constants.go CertificateValidity = time.Hour * 24 * 365 * 100 //改为这里的值
重新编译kubeadm
这里通过docker容器的方式去编译
docker run --rm -it -v /tmp/kubernetes/:/go/src/k8s.io/kubernetes mirrorgooglecontainers/kube-cross:v1.12.10-1 bash #进入容器 cd /go/src/k8s.io/kubernetes make all WHAT=cmd/kubeadm GOFLAGS=-v
替换旧的kubeadm
新生成的kubeadm会在./_output/local/bin/linux/amd64/kubeadm
这个路径下
把旧的做好备份,还有/etc/kubernetes/pki
也备份下
cp ./_output/local/bin/linux/amd64/kubeadm /usr/bin/kubeadm
执行命令更新证书
#更新证书 kubeadm alpha certs renew all #查看证书时间 kubeadm alpha certs check-expiration
欢迎关注我的公众号
标签:kubernetes,证书,v1.15,16.4,v.1,go,kubeadm,k8s 来源: https://www.cnblogs.com/dogfei/p/12545705.html