通过 kubeadm 创建的K8S集群默认ca证书期限为10年,其他证书均为1年,虽然可以通过kubeadm、kubelet设置参数来进行证书轮换,但是始终觉得不是很方便,另外kubelet证书轮换需要重启kubelet才会快速生效;所以想偷下懒——修改kubeadm源码调整证书期限。
下载对应版本的kubernetes源码,以1.18.6为例:
git clone https://github.com/kubernetes/kubernetes.git
git checkout v1.18.6 ##切换到v1.18.6的版本
- CertificateValidity = time.Hour * 24 * 365
+ CertificateValidity = time.Hour * 24 * 365 * 10
- const duration365d = time.Hour * 24 * 365
+ const duration365d = time.Hour * 24 * 365 * 10
if git_status=$("${git[@]}" status --porcelain 2>/dev/null) && [[ -z ${git_status} ]]; then
KUBE_GIT_TREE_STATE="clean"
else
- KUBE_GIT_TREE_STATE="dirty"
+ KUBE_GIT_TREE_STATE="clean"
fi
重新编译
cd kubernetes
make WHAT=kubeadm
按照上述步骤编译完成后,kubeadm初始化集群时,证书期限均会改变,但是,用kubeadm join 节点时,kubelet节点的证书依然会是1年,这就跟kube-controller-manager有关系了;需要在kube-controller-manager启动参数中增加--experimental-cluster-signing-duration参数(默认为8760h0m0s即1年)。
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
...
-controllerManager: {}
+controllerManager:
+ extraArgs:
+ feature-gates: RotateKubeletServerCertificate=true
+ experimental-cluster-signing-duration: 87600h0m0s
dns:
type: CoreDNS
kubeadm init --config kubeadm-config.yaml phase control-plane controller-manager
原文:https://blog.51cto.com/u_12835116/2850446