問題 當我使用kubeadm部署成功k8s集群時在想預設生成的證書有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 /etc/kubernetes/pki/front-proxy-ca.crt #10年有效期 /etc/kubernetes/p ...
目錄
問題
- 當我使用kubeadm部署成功k8s集群時在想預設生成的證書有效期是多久,如下所示
/etc/kubernetes/pki/apiserver.crt #1年有效期
/etc/kubernetes/pki/front-proxy-ca.crt #10年有效期
/etc/kubernetes/pki/ca.crt #10年有效期
/etc/kubernetes/pki/apiserver-etcd-client.crt #1年有效期
/etc/kubernetes/pki/front-proxy-client.crt #1年有效期
/etc/kubernetes/pki/etcd/server.crt #1年有效期
/etc/kubernetes/pki/etcd/ca.crt #10年有效期
/etc/kubernetes/pki/etcd/peer.crt #1年有效期
/etc/kubernetes/pki/etcd/healthcheck-client.crt #1年有效期
/etc/kubernetes/pki/apiserver-kubelet-client.crt #1年有效期
- 也可以通過
kubeadm certs check-expiration
查看證書和有效期 - 當然可以使用
kubeadm certs renew all
來續訂證書,但是證書更新了那些服務如果要重啟就很麻煩 - 所以我想修改kubeadm源碼讓預設生成的證書有100年有效期
編譯
- 官方文檔:編譯k8s
- 下載源碼:
git clone --depth=1 -b v1.24.2 [email protected]:kubernetes/kubernetes.git
,目前最新的kubeadm版本是v1.24.2
,所以直接克隆這個標簽 - 找到該版本使用的鏡像:
K8S_IMG="k8s.gcr.io/build-image/kube-cross:$(cat ./build/build-image/cross/VERSION)"
- 我已經放到阿裡雲上了,現在只需執行:
docker pull registry.cn-hangzhou.aliyuncs.com/janbar-k8s/kube-cross:v1.24.0-go1.18.3-bullseye.0
到本地就可以了 - 下載到編譯機器,將tag改為官方的格式:
docker tag registry.cn-hangzhou.aliyuncs.com/janbar-k8s/kube-cross:v1.24.0-go1.18.3-bullseye.0 $K8S_IMG
- 修改 NewSelfSignedCACert 方法的 NotAfter 為(100年): now.Add(duration365d * 100).UTC():
vim ./staging/src/k8s.io/client-go/util/cert/cert.go
- 修改 CertificateValidity 為: time.Hour * 24 * 365 * 99:
vim ./cmd/kubeadm/app/constants/constants.go
- 最終修改提交如下圖所示,已經將1年和10年的證書都改成100年
- 編譯kubeadm:
cd build/ && ./run.sh make kubeadm
- 執行命令查看編譯kubeadm的版本:
./_output/dockerized/bin/linux/amd64/kubeadm version
- 這個可執行程式就可以替換你自己用那個就行了
檢查結果
- 執行檢查證書命令:
kubeadm alpha certs check-expiration
- 可以看到所有證書有效期都變為100年了