我最近升级了kubeadm,希望可以轮换使用所有证书,并且在很好的情况下,我还运行了kubeadm init phase certs all
,但是我不确定需要什么步骤来验证所有证书正确地就位,并且不会过期。
我还看到另外需要SO answer reference kubeadm init phase kubeconfig all
,但是在kubernetes kubeadm documentation中找不到告诉我它需要与阶段证书一起使用。
我该怎么做才能确保群集不会遇到过期的证书?
我尝试通过连接到安全的本地端口echo -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
进行验证,这将使我下个月到期。
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
和openssl x509 -in /etc/kubernetes/pki/apiserver-kubelet-client.crt -noout -text
提前一年产生日期。
这些矛盾的日子肯定让我担心,我会发现自己和其他许多拥有过期证书的人一样。我该如何处理?
谢谢您的指导。
答案 0 :(得分:2)
实质上,kubeadm init phase certs all
会重新生成包括ca.crt
(证书颁发机构)在内的所有证书,并且Kubernetes组件使用基于证书的身份验证来连接到kube-apiserver(kubelet,kube-scheduler,kube-控制器管理员),因此您还必须通过运行kubeadm init phase kubeconfig all
请记住,您将必须在所有节点上重新生成kubelet.conf
,因为还需要更新它以使用新的ca.crt
连接到kube-apiserver。另外,请确保您add all your hostnames/IP addresses可以将kube-apiserver应用于kubeadm init phase certs all
命令(--apiserver-cert-extra-sans
)
通过openssl
连接时,很可能看不到更新的证书,这是因为尚未重新启动Kubernetes组件,尤其是kube-apiserver。因此,您将必须启动kube-apiserver,kube-scheduler,kube-controller-manager等(如果正在运行多主控制平面,则必须启动kube-apiserver,kube-scheduler等),还必须重新启动您所有节点上的kubelet。
答案 1 :(得分:0)
一个月后,我学到了更多知识,并想为跟随我的人更新这个问题。
我在Kubernetes上提交了issue,要求提供有关kubeadm升级过程如何自动更新证书的更多信息。 Kubernetes上的文档说:
注意:上面的列表中未包含kubelet.conf,因为kubeadm将kubelet配置为自动更新证书。
升级后,我没有看到kubelet的自动证书续订。然后我得知:
何时旋转证书的决定是不确定的,可能会发生证书总寿命的70-90%,以防止节点证书旋转重叠。
他们还提供了以下过程,解决了我上次未完成的证书轮换:
sudo mv /var/lib/kubelet/pki /var/lib/kubelet/pki-backup
sudo systemctl restart kubelet
# the pki folder should be re-created.