前言
k8s默认的CA证书有效期是10年。默认签发的服务证书有效期是1年。
k8s支持自动轮换证书。
k8s支持轮换时候的证书有效期。不过最长是10年。(我这边设置为100年,没效果)
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
检查当前控制面节点里证书
kubeadm alpha certs check-expiration
你可以通过此命令查看各类证书的有效期
触发自动轮换证书的行为
当你通过kubeadm upgrade node命令进行升级或者通过control plane进行升级的时候,k8s会自动轮换证书。
通过命令手动触发证书轮换
kubeadm alpha certs renew all
你可以通过此命令进行所有证书轮换
⭐️请注意,如果你运行了高可用集群,则需要在所有的control-plane节点上运行此命令,也就是说主节点上运行。
为kubelet配置证书自动轮转
https://kubernetes.io/docs/tasks/tls/certificate-rotation/
⭐️1.18和1.19有差异。1.18是已经默认开启的,不过默认的轮转的证书有效期是1年
使用自动轮转,需要开启两个服务的配置:
-
开启kubelet启动标记:
--rotate-certificates=true
⭐️开启确认命令:
kubectl describe cm/kubelet-config-1.18 -n kube-system | grep 'rotateCertificates'
⭐️动态的修改kubelet https://kubernetes.io/docs/tasks/administer-cluster/reconfigure-kubelet/#reconfiguring-the-kubelet-on-a-running-node-in-your-cluster
# 请先安装 jq 命令. 他是 epel 里的 # 开启代理监听 kubectl proxy --port=8001 # 导出kubelet配置 NODE_NAME="节点名"; curl -sSL "http://localhost:8001/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig|.kind="KubeletConfiguration"|.apiVersion="kubelet.config.k8s.io/v1beta1"' > kubelet_configz_${NODE_NAME} # 编辑完配置,重新导入,并确认新配置对象名 kubectl -n kube-system create configmap node-config-new --from-file=kubelet=kubelet_configz_${NODE_NAME} --append-hash -o yaml # 调整每一个node对象,添加新的配置对象 kubectl edit node ${NODE_NAME} === configSource: configMap: name: CONFIG_MAP_NAME # 将这个名字替换成新的配置对象名 namespace: kube-system kubeletConfigKey: kubelet # 检查配置生效 kubectl get node ${NODE_NAME} -o json | jq '.status.config'
-
调整默认证书有效期
开启
kube-controller-manager
启动标记:--cluster-signing-duration
,这个标记默认是1年,你可以改成10年87600h0m0s
修改位置:
/etc/kubernetes/manifests/kube-controller-manager.yaml
修改生效:kube-controller-manager pod 将自动重建
⚠️如果是1.18,则启动标记是
--experimental-cluster-signing-duration