重新编译kubeadm以解决证书一年过期的问题
本文介绍如何重新构建kubeadm(k8s-v1.23.3)二进制文件,以解决证书只有一年有效期的问题。
环境准备
本文准备了一台虚拟机,配置如下:
- 硬件配置:2C4G150G
- 系统内核:CentOS-7.6 + Kernel-4.19.12
- 用户:root
1、安装docker及buildx插件
根据K8S官方文档的指引,主机需要安装Docker及Docker插件buildx。
根据buildx的文档介绍,buildx插件要求Docker的版本在19.03+。同时,在Linux环境中,如果使用DEB或RPM包安装Docker的话,已经自带了buildx插件。
所以,本文我们使用yum来安装docker,安装的docker版本为20.10,版本信息如下:
$ docker -v
Docker version 20.10.12, build e91ed57
可以使用如下的命令验证buildx插件已经安装成功:
$ docker buildx version
github.com/docker/buildx v0.7.1-docker 05846896d149da05f3d6fd1e7770da187b52a247
2、安装rsync
另外,还需要安装rsync,构建脚本用它来同步容器里面的构建好的kubeadm二进制文件到主机上:
$ yum -y install rsync
下载源码及修改
本文我们将要构建的版本为kubernetes-v1.23.3,所以我们下载这个版本的k8s源码包,github的下载地址为https://github.com/kubernetes...。
下载完成后,得到一个tar包v1.23.3.tar.gz。我们把它放在主机的
/root
目录下,然后进行解压:$ tar xzvf v1.23.3.tar.gz
解压得到一个文件夹
kubernetes-1.23.3
,我们把它重命名为kubernetes,并进入到源码根目录下$ mv kubernetes-1.23.3 kubernetes
$ cd kubernetes/
修改文件
cmd/kubeadm/app/constants/constants.go
,找到如下一段,把time.Hour * 24 * 365
改成time.Hour * 24 * 365 * 100
,那么证书就是百年有效期:const (
...// CertificateValidity defines the validity for all the signed certificates generated by kubeadm
CertificateValidity = time.Hour * 24 * 365 * 100
构建kubeadm
指引文档的 Key Scripts 章节 对脚本的使用做了介绍
我们可以使用上面红色框内的命令来构建kubeadm,执行以下命令构建kubeadm:
$ build/run.sh make kubeadm KUBE_BUILD_PLATFORMS=linux/amd64
注意:上面的脚本在执行过程中会去下载一个build/run.sh命令执行成功后,在k8s.gcr.io/build-image/kube-cross
镜像,镜像版本号为文件build/build-image/cross/VERSION
的内容,我们可以先提前下载好这个镜像再执行上面的命令:
$ docker pull k8s.gcr.io/build-image/kube-cross:v1.23.0-go1.17.6-bullseye.0
这个镜像在国内可能下载不下来,我已经把它上传到阿里云,可以先从阿里云下载,然后再重命名:
$ docker pull registry.cn-beijing.aliyuncs.com/pshizh/kube-cross:v1.23.0-go1.17.6-bullseye.0
$ docker tag registry.cn-beijing.aliyuncs.com/pshizh/kube-cross:v1.23.0-go1.17.6-bullseye.0 k8s.gcr.io/build-image/kube-cross:v1.23.0-go1.17.6-bullseye.0
/root/kubernetes
目录下会有一个_output
文件夹,kubeadm二进制文件就在_output/dockerized/bin/linux/amd64/
目录下,执行命令查看它的版本及构建日期:$ _output/dockerized/bin/linux/amd64/kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"archive", BuildDate:"2022-03-01T08:10:46Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"linux/amd64"}
验证
【重新编译kubeadm以解决证书一年过期的问题】我们使用上面的kubeadm来安装一个K8S集群,在Master节点上的
/etc/kubernetes/pki
目录下,我们查看apiserver.crt证书的有效期,如下,为一百年:$ openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt
notBefore=Mar1 08:49:42 2022 GMT
notAfter=Feb5 08:49:42 2122 GMT
参考
- https://github.com/kubernetes...
- https://github.com/docker/bui...
推荐阅读
- 交叉编译openssl|交叉编译openssl for arm-linux-androideabi-gcc工具链
- vscode|vscode 采用C++17版本进行编译的实现
- spark|spark学习笔记四(spark集群搭建)
- VS2010编译生成lib库Release版本比Debug版本大的原因
- 开挂人生
- java项目代码上线
- 用kubeadm安装Kubernetes1.15.0
- 通往财富自由之路的必要前奏
- 重新发现质量管理体系之二(管理体系的客观存在性)
- 重新审视与父母的关系,如何缔结亲密关系()