Z.S.K.'s Records

Kubernetes学习(kubeadm源码修改证书有效期)

相信很多同学在搭建kubernetes时都会选择使用工具进行安装, 现在开源的工具真是层出不穷,本人也体验过多种部署工具, 如rke、kubespray、kubeadm、minikube甚至手工安装等, kubeadm是本人第一个尝试的工具, 因此也使用的最多, kubeadm默认的证书是1年到期, client能够到期后自动进行续签,但是server端却不能, 如果在到期时没有及时进行证书的延期, 则会造成整个集群异常,今天主要记录下kubeadm通过修改源码来改变集群证书的相关操作

修改kubeadm源码

切换分支

1
2
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes

修改kubeadm源码

1
2
3
4
5
6
7
8
9
10
// kubernetes/cmd/kubeadm/app/constants/constants.go
// 修改以下常量
CertificateValidity = time.Hour * 24 * 365
// 变成10年
// CertificateValidity = time.Hour * 24 * 3650

// CertificateValidity常量在kubernetes/cmd/kubeadm/app/util/pkiutil/pki_helpers.go中引用
// 当然, 在这里修改也是可以的
NotAfter: time.Now().Add(kubeadmconstants.CertificateValidity).UTC(),
// NotAfter: time.Now().Add(kubeadmconstants.CertificateValidity * 100.UTC(),

这两个地方都可以修改, 只要最后这两个值能跟期望值对应上即可,修改完之后对kubeadm进行编译

二进制编译

1
KUBE_BUILD_PLATFORMS=linux/amd64 make all WHAT=cmd/kubeadm GOFLAGS=-v GOGCFLAGS="-N -l"

最终会在kubernetes/_output生成kubeadm, 如果大家不想麻烦的话, 这里有个现成的版本对应v1.15, 证书有效期100年.

1
wget http://rj-bai.oss-cn-beijing.aliyuncs.com/kubeadm -O /usr/bin/kubeadm && chmod +x /usr/bin/kubeadm

或者进入cmd/kubeadm
执行go build -v命令,如果没出错,会生成可执行文件kubeadm

1
go build -v

生成的可执行文件在当前文件夹下面

1
ls cmd/kubeadm/

容器编译

1
2
3
4
5
6
# 使用官方的kube-cross镜像进行编译.
docker pull us.gcr.io/k8s-artifacts-prod/build-image/kube-cross:v1.12.17-1
build/run.sh make kubeadm
# 经过几分钟后,最终会在以下目录生成kubeadm
_output/dockerized/bin/linux/amd64
# 可以查看下kubeadm版本

搭建新集群

如果是新集群的话就比较容器了, 直接使用新的kubeadm进行部署, 那么部署出来的集群证书就是100年.p

kubeadm如何进行集群部署, 这里不再详细记录了.这里只写主要步骤

1
2
3
4
5
6
7
apt install -y kubelet=1.15.1-00 kubectl=1.15.1-00 kubeadm=1.15.1-00 --allow-change-held-packages

kubeadm init --config=kubeadm-config.yaml --upload-certs

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

kubeadm init --config=kubeadm-config.yaml --upload-certs

将新版的kubeadm替换默认安装的kubeadm

1
2
3
mv /usr/bin/kubeadm /usr/bin/kubeadm_bak
cp _output/dockerized/bin/linux/amd64/kubeadm /usr/bin/kubeadm
chmod +x /usr/bin/kubeadm

kubeadm执行完了按照提示执行命令

最终部署起来的集群证书有效期为100年

对现有集群进行证书更新

那如果是对存在的集群进行证书重签,如何操作呢?

首先, 查看当前集群的证书有效期,这里使用的kubeadm是未修改源码的kubeadm

1
kubeadm alpha certs check-expiration

在没有使用kubeadm搭建的情况下,可以使用以下命令查看证书过期时间

1
openssl x509 -in front-proxy-client.crt   -noout -text  |grep Not

然后使用证书100年的kubeadm执行以下操作即可

1
2
3
4
# 使用100年的kubeadm更新证书
./kubeadm alpha certs renew all
# 再次查看证书有效期, 对比前后会发现证书已经从1年变成了100年了.
./kubeadm alpha certs check-expiration

至此, 不管是搭建集群之前操作证书有效期还是对存在的集群延长证书有效期进行操作都不怕了,完美.

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)

 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?