【正规买球app】OpenShift集群Etcd证书过期故障处理 |
一、现象描述 1. 生产环境规模架构 4.8.18版本OCP集群,集群中3个Master节点(且每个Master节点都运行一个Etcd数据库)、29个Node节点(Infra+Worker) 2. 故障现象 OpenShift 生产集群的Etcd数据库证书过期,导致与集群连接认证失效,进而无法执行新增、更新、删除集群中所有资源的操作,严重影响集群的维护和管理。 二. 故障分析 OpenShift 4.6、4.7 和 4.8 中的 ETCD 证书不会自动更新有效时间,证书默认将在 3 年后过期。 三. 解决方案和建议 1. 检查环境 适用本解决方案的集群版本:• 4.5.x• 4.6.x• 4.7.x• 4.8.x 需满足以下先决条件: (1)可通过SSH连通各主节点 (2)具备主节点ROOT权限 (3)未启用ETCD加密功能 (4)主节点配备OpenSSL工具以生成证书 (5)主节点是RedHat8版操作系统,或其他主机是RedHat8版本操作系统,以运行生成证书脚本。 (6)堡垒机与主节点之间能进行文件传输,或者主节点间能够互传文件。 2. 解决思路 当 Etcd 证书过期时,需要手动创建证书。在此过程中,etcd-signer、etcd-metric-signer证书和密钥需要在Etcd API 运行时从 API 获取,或者直接从 Etcd 数据库获取;通过etcd-signer、etcd-metric-signer证书和密钥后生成新的Etcd证书后,替换旧证书,具体步骤请参阅后续内容。 3. 解决步骤 (1)获取Etcd证书 从Etcd数据文件中获取Etcd证书,获取etcd-signer和etcd-metric-signer两部分证书认证信息。过滤获取etcd-signer 获取内容如下: 过滤出etcd-signer证书内容,手动编辑并分别将“CERTIFICATE”中内容保存到etcd-signer.crt和将“RSA PRIVATE KEY”中内容保存到etcd-signer.key: 过滤获取etcd-metric-signer证书内容,将过滤的内容手动编辑保存到etcd-metric-signer.crt和etcd-metric-signer.key中。 补充:证书信息会出现两次,只复制一份到证书文件中即可。 (2)停止Master节点控制平面 恢复Etcd之前必须停止每个Master节点的控制组件。通过移动控制组件的yaml配置文件,集群会自动关停控制组件的容器。 通过上个命令检查容器是否停止运行,如果没有停止,运行如下命令手动停止: (3)备份Etcd密钥和证书 在所有主节点本地备份Etcd密钥和证书 验证备份文件和源文件一致性 (4)创建新的Etcd证书和密钥 复制etcd-signer.{crt,key}和etcd-metric-signer.{crt,key}到etcd目录。
创建并执行脚本,脚本会生成需要的证书,这里只需要在master1节点执行,然后打包传入到其他master节点。 执行完脚本后,会在执行目录生成“new_certificates”目录存放新的证书和密钥,进入目录验证证书文件有效性。 master1节点操作,打包证书文件并复制到其他master节点。 (5)替换Etcd证书 将创建的密钥和证书文件覆盖到每个主节点 ● 列出目录,如果缺少任何目录,就进行创建 ● 删除所有旧证书 ● 解压新证书 ● 将证书移动到相应目录中 ● 验证证书有效性 (6)启动Etcd数据库 将Etcd的yaml文件移动回原目录,集群会自动运行Etcd容器。 动态观察Etcd是否启动,一般等5分钟左右所有master节点的Etcd都会完成启动;该命令一直占用命令行,启动成功后快捷键Ctrl+c终止该命令。 所有master节点的Etcd启动后,使用如下命令检查Etcd集群健康状态: (7)启动Kube Apiserver、Kube Controller 和 Kube Scheduler Etcd集群启动并状态正常后,启动其他控制组件,全部启动成功后集群恢复正常。 建议 a) 建议升级至4.9或以上版本,4.8版本Etcd证书过期后不会自动更新,4.9版本开始,实现了证书的自动轮换更新。 b) 升级集群版本需要考虑的因素较多,如果不方便升级版本,建议在监控中增加Etcd、apiServer、Controller Manager、Scheduler、kubelet核心组件证书过期时间,过期阈值为过期前1-6个月,最好提前延长证书过期时间,规避风险。 c) 建议在Worker节点监控kubelet证书过期时间。 四. Etcd在OpenShift集群中作用 Etcd数据库负责储存OpenShift所有元数据及资源对象,Master节点的apiServer将集群数据写入存储至Etcd数据库,同时也从Etcd读取信息;在集群运行期间,所有操作均依赖于对Etcd的读写操作实现,若Etcd数据库出现故障,虽然不会影响正在运行的Pod,但会导致整个集群无法正常运作。 在OpenShift部署过程中,仅允许将Master及Etcd置于同一节点,即Etcd数据储存在Master节点的本地磁盘,默认为/var/lib/etcd/目录下,此目录需至少达到20GB的存储空间,且底层存储应选用读写高效的存储设备。 |