EN 联系我们加入我们
典型案例
您现在的位置:首页 > 典型案例
【案例分享】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目录。

图片


移动到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的存储空间,且底层存储应选用读写高效的存储设备。



版权所有 安图特(北京)科技有限公司 备案号:京ICP备17074963号-1
技术支持:创世网络