看帖子的动态,不少老哥收藏了帖子,@DAPTX4869 还期待后续,经过我的实验以后,@feedcode 的方案是可行,我简单说下步骤:
1. 用 ca.crt 生成 csr 再生成新的 ca, 这一步 openssl 需要制定证书生成 v3 证书,v1 的证书 kubeadm 会认为不是 ca
2. openssl 生成 csr 不包含扩展内容,需要加上选项 -x509toreq -copy_extensions copy all ,这个似乎需要 openssl v3 ,运维同事打包好的 debian 是 openssl 1.1.1n ,前面选项不可用。
3. 在主 master 生成 ca,并且用 kubeadm renew 所有二级证书,然后将 ca 复制到其他 master 节点,重启 master 节点的 kubelet ,确保 kubelet 的状态是 running 以后 再进行其他操作。
4. 重启集群的关键组件,etcd,apiserver,kube-scheduler,controller-manager ,更新 admin.conf ,此时确认下 这些组件的状态都是 ok
5. 更新 worker 节点的 kubelet.conf,这里需要在 master 为 worker 节点生成一份 kubelet.conf ,我不太清楚 worker 节点的 kbuelet 是否会自动拉取最新 ca ,至少从我实验来看是不会的。这部分参考[文档](
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/#kubelet-client-cert)。**注意**,生成的 kubelet.conf 确保它的 apisever 地址是正确的
6. 更新 calico ,coredns,kube-proxy ,最后确认下所有组件的状态。整个过程中,业务影响较小,我用 nginx 模拟的,证书业务没测试,替换 ca 前后 nginx 都可以正常工作。
**Note**: 只是大概描述下,如果大家有需要我后续写一篇 blog 贴出来