如何在 Openshift Origin 集群中替换 etcd 过期的 CA 证书

how to replace etcd expired CA cert in Openshift Origin cluster

我们是 运行 OpenShift Origin 1.4 (OSE 3.4) 并且 etcd 的 CA 证书在周末到期。该集群似乎仍在运行。但是,我猜这是一颗定时炸弹。这引出了我的问题。有谁知道更新证书的安全方法吗?

我看过下面的 link,但它似乎是针对即将过期的有效证书。我有一种感觉,一旦任何服务重新启动,它就会失败,因为证书已过期。

https://docs.openshift.org/latest/install_config/redeploying_certificates.html

您可以尝试获取即将过期的证书的报告

https://docs.openshift.org/latest/install_config/redeploying_certificates.html#install-config-cert-expiry

我已经多次使用这个 playbook,它可以很好地处理证书。

https://docs.openshift.org/latest/install_config/redeploying_certificates.html#redeploying-all-certificates-current-ca

你可以在你运行这个剧本之前为你的环境创建一个备份,以便能够回到当前状态,以防出现问题。

我昨天早上解决了这个问题。这是对情况的完整描述以及我为解决此问题所做的工作,以防遇到相同问题的任何人看到。

我们正在 运行安装 OpenShift origin 1.4 集群,该集群最初安装为 1.1,并且在过去一年中升级了所有版本。上周六,我们用于 etcd 的 CA、服务器和对等证书已过期。这导致在我们的服务器日志中抛出许多错误,但 etcd 和 openshift 集群继续 运行ning。然而,当我在我们的开发环境中造成同样的情况并重新启动服务时,etcd 节点拒绝相互连接并且 openshift 集群无法启动。

如果您遇到同样的情况,请不要重启 etcd 或您的主服务,除非您有解决问题的计划并准备好这样做。

用于重新部署证书的 OpenShift 文档声明使用 redeploy-certificates.yaml 剧本不会重新生成任何 CA 证书。我在我们的开发环境中对此进行了测试,并确认它不会重新生成 etcd CA 证书。 redeploy-etcd-certificates.yaml 剧本也没有。这意味着您必须 运行 redeploy-openshift-ca.yml 剧本,然后是 redeploy-certificates.yml 剧本才能解决问题。最后,您将拥有集群中所有内容的所有新证书。当 redeploy-openshift-ca 尝试重新启动 etcd 并看到过期的服务器和对等证书时,我很确定这会花费大量时间并可能导致中断。

为了解决这个问题,我发现 redeploy-openshift-ca.yaml 剧本中使用的命令可以手动生成 etcd CA 证书和 运行。之后,我 运行 redeploy-etcd-certificates.yaml 剧本。

cd /etc/etcd/ca/ 
export SAN=etcd-signer
openssl req -config openssl.cnf -newkey rsa:4096 -keyout ca.key \
    -new -out ca.crt -x509 -extensions etcd_v3_ca_self -batch \
    -nodes -days 1825 -subj /CN=etcd-signer@`date +%s`
ansible-playbook -i hosts_file -vv \ 
    /usr/share/ansible/openshift-ansible/playbooks/byo/openshift-cluster/redeploy-etcd-certificates.yml

redeploy-etcd-certificates 剧本在尝试重启第一个 etcd 节点时失败,因为其他两个节点仍然是 运行 过期的证书。为了解决这个问题,我手动重启了所有三个 etcd 节点的服务,一切正常。然后,我重新 运行 redeploy-etcd-certificates 剧本以备不时之需。第二次正常完成,我们的环境再次愉快。

@aleks 感谢您的帮助。