当前位置: 首页 > article >正文

Kubernetes 环境下 Elasticsearch 证书过期导致 Kibana 无法登录的排查与修复

前言在 Kubernetes 日志平台中Kibana 无法登录是一个比较常见但又容易误判的问题。很多时候表面现象看起来像是账号密码错误实际上问题可能出在 Kibana 与 Elasticsearch 之间的 HTTPS 证书链上。这次故障的核心问题就是Elasticsearch 证书过期导致 Kibana 无法完成 TLS 校验最终表现为平台登录失败。本文记录一次完整的排查与修复过程供后续类似问题参考。一、环境说明本次环境部署在 Kuberneteslogging命名空间主要组件包括ElasticsearchKibanaFilebeat资源类型如下StatefulSet/elasticsearch-masterDeployment/kibana-kibanaDaemonSet/filebeat-filebeat这说明当前环境属于自建 / Helm StatefulSet 部署模式而不是 ECK Operator 托管模式。这一区别非常重要因为自建模式下证书不会自动轮换需要手工维护。二、问题现象现场故障表现如下Kibana 页面可以打开但输入账号密码后无法正常登录Elasticsearch、Kibana、Filebeat 的 Pod 基本都在运行Kibana 日志中持续出现以下报错certificate has expired unable to verify the first certificate从现象上看很容易误以为是用户名密码错误Elasticsearch 认证异常Kibana 自身故障但实际上这类报错已经明确指向了TLS 证书校验失败。三、问题分析1. 为什么 Kibana 无法登录Kibana 的登录认证并不是完全独立完成的。用户在页面输入账号密码后Kibana 需要调用 Elasticsearch 进行认证。如果 Kibana 与 Elasticsearch 之间的 HTTPS 连接存在问题比如证书过期CA 不受信任证书链不完整那么认证请求在真正校验账号密码之前就已经失败了。也就是说这次“无法登录”并不是典型的账号问题而是Kibana 无法通过 HTTPS 正常连接 Elasticsearch。2. 证书是否真的过期为了确认是不是证书问题首先查看 Elasticsearch 当前实际加载的证书curl -k -u elastic:你的密码 https://10.233.52.179:9200/_ssl/certificates?pretty返回结果显示当前加载的以下证书都已过期/usr/share/elasticsearch/config/certs/ca.crt/usr/share/elasticsearch/config/certs/tls.crt这一步基本可以直接定性Elasticsearch 当前挂载的 CA 证书和服务端证书都已过期。3. 证书来自哪里继续查看 Elasticsearch 的 StatefulSet 配置kubectl -n logging get sts elasticsearch-master -o yaml | egrep -A5 -B2 secretName:|mountPath:|xpack.security|ssl可以确认证书挂载目录为/usr/share/elasticsearch/config/certs使用的 Secret 为elasticsearch-master-certsHTTP 和 Transport 层都使用该 Secret 中的ca.crttls.crttls.key这说明问题已经非常明确本次故障的根因就是elasticsearch-master-certs这套证书已过期。四、解决思路由于本次不只是服务端证书tls.crt过期连签发它的ca.crt也已经过期因此不再适合继续沿用旧 CA。正确的处理方式是重新生成新的 CA使用新的 CA 重新签发 Elasticsearch 证书更新 Kubernetes Secret重启 Elasticsearch重启 Kibana使其重新加载新的 CA 信任链五、解决过程1. 确认资源状态先确认环境中的组件状态kubectl get all -n logging确认当前环境为自建 StatefulSet/Deployment 模式而非 ECK。2. 确认 Elasticsearch 当前证书已过期curl -k -u elastic:你的密码 https://10.233.52.179:9200/_ssl/certificates?pretty确认ca.crt已过期tls.crt已过期3. 确认证书 Secret 来源kubectl -n logging get sts elasticsearch-master -o yaml | egrep -A5 -B2 secretName:|mountPath:|xpack.security|ssl确认 Elasticsearch 使用的证书 Secret 为elasticsearch-master-certs4. 在 Elasticsearch Pod 中生成新证书进入 Elasticsearch Podkubectl -n logging exec -it elasticsearch-master-0 -- bash创建工作目录mkdir -p /tmp/es-cert-renew cd /tmp/es-cert-renew创建实例配置文件cat instances.yml EOF instances: - name: elasticsearch-master dns: - elasticsearch-master - elasticsearch-master.logging - elasticsearch-master.logging.svc - elasticsearch-master.logging.svc.cluster.local - elasticsearch-master-0 - elasticsearch-master-0.elasticsearch-master-headless - elasticsearch-master-0.elasticsearch-master-headless.logging - elasticsearch-master-0.elasticsearch-master-headless.logging.svc - elasticsearch-master-0.elasticsearch-master-headless.logging.svc.cluster.local ip: - 10.233.52.179 EOF生成新的 CA/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --days 1095 --out /tmp/es-cert-renew/ca.zip unzip -o /tmp/es-cert-renew/ca.zip -d /tmp/es-cert-renew/ca使用新 CA 生成 Elasticsearch 证书/usr/share/elasticsearch/bin/elasticsearch-certutil cert --pem \ --ca-cert /tmp/es-cert-renew/ca/ca/ca.crt \ --ca-key /tmp/es-cert-renew/ca/ca/ca.key \ --days 1095 \ --in /tmp/es-cert-renew/instances.yml \ --out /tmp/es-cert-renew/es.zip unzip -o /tmp/es-cert-renew/es.zip -d /tmp/es-cert-renew/es find /tmp/es-cert-renew -type f | sort5. 导出新证书到宿主机mkdir -p /root/es-cert-renew-20260415 cd /root/es-cert-renew-20260415 kubectl -n logging exec elasticsearch-master-0 -- cat /tmp/es-cert-renew/ca/ca/ca.crt ca.crt kubectl -n logging exec elasticsearch-master-0 -- cat /tmp/es-cert-renew/es/elasticsearch-master/elasticsearch-master.crt tls.crt kubectl -n logging exec elasticsearch-master-0 -- cat /tmp/es-cert-renew/es/elasticsearch-master/elasticsearch-master.key tls.key检查新证书openssl x509 -in ca.crt -noout -dates -subject -issuer openssl x509 -in tls.crt -noout -dates -subject -issuer6. 备份并更新 Elasticsearch Secret先备份原有 Secretkubectl -n logging get secret elasticsearch-master-certs -o yaml /root/elasticsearch-master-certs.bak.yaml然后更新 Secretkubectl -n logging create secret generic elasticsearch-master-certs \ --from-fileca.crtca.crt \ --from-filetls.crttls.crt \ --from-filetls.keytls.key \ --dry-runclient -o yaml | kubectl apply -f -7. 重启 Elasticsearchkubectl -n logging rollout restart statefulset/elasticsearch-master kubectl -n logging rollout status statefulset/elasticsearch-master kubectl -n logging get pod -n logging -w重启后Elasticsearch 一度出现Running 0/1但继续查看日志后发现节点已正常启动已完成主节点选举9200/9300 已正常监听索引已恢复Elasticsearch 已进入started状态说明证书更新已经成功只是 readiness probe 在等待集群状态恢复。8. 再次验证 Elasticsearch 新证书是否生效curl -k -u elastic:你的密码 https://10.233.52.179:9200/_ssl/certificates?pretty确认新证书的有效期已经更新。9. 检查 Kibana 的 CA 配置查看 Kibana Deploymentkubectl -n logging get deploy kibana-kibana -o yaml | egrep -A8 -B3 elasticsearch.ssl|ELASTICSEARCH|certificateAuthorities|verificationMode|secretName|mountPath确认 Kibana 已配置ELASTICSEARCH_HOSTShttps://elasticsearch-master:9200ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES/usr/share/kibana/config/certs/ca.crt并且挂载的 Secret 也是elasticsearch-master-certs说明 Kibana 的证书信任路径本身没有问题。10. 重启 Kibana虽然 Secret 已经更新但 Kibana 进程仍可能继续持有旧的 TLS 信任状态因此需要重启 Kibanakubectl -n logging rollout restart deployment/kibana-kibana kubectl -n logging rollout status deployment/kibana-kibana kubectl -n logging get pod -n logging -w11. 验证 Kibana 日志和登录情况查看 Kibana 最新日志kubectl -n logging logs deploy/kibana-kibana --tail200 | egrep certificate|x509|security_exception|unable to verify|No living connections|expired|SSL|tls确认以下错误已消失certificate has expired unable to verify the first certificate随后再次访问 Kibana 页面确认已恢复正常登录。六、处理结果最终结果如下Elasticsearch 新证书已成功生效Kibana 已重新加载新的 CA 证书Kibana 不再报证书校验错误平台恢复正常登录七、经验总结这次问题有几个典型经验1. 自建 Elasticsearch 证书不会自动续期只要不是 ECK就必须自己维护证书生命周期。2. Kibana 登录失败不一定是账号问题出现certificate、x509、unable to verify时应优先排查 TLS 证书链。3. 更新 ES 证书后Kibana 也需要同步处理即使 Kibana 配置没问题也需要重启以重新加载新的 CA。4. 建议建立证书到期告警至少应对以下证书设置提前预警Elasticsearch HTTP 证书Elasticsearch CA 证书Kibana 对外证书Ingress / 代理层证书结语这次故障的本质并不复杂但排查过程中很容易被“登录失败”这个表象误导。真正的问题并不是账号本身而是Kibana 与 Elasticsearch 之间的 HTTPS 信任链失效。遇到类似问题时建议优先确认三件事Elasticsearch 当前实际加载的证书是否过期Kibana 是否信任当前 CA证书更新后相关组件是否已重启并重新加载配置把这三步走清楚问题基本都能快速收敛。

相关文章:

Kubernetes 环境下 Elasticsearch 证书过期导致 Kibana 无法登录的排查与修复

前言在 Kubernetes 日志平台中,Kibana 无法登录是一个比较常见但又容易误判的问题。 很多时候,表面现象看起来像是账号密码错误,实际上问题可能出在 Kibana 与 Elasticsearch 之间的 HTTPS 证书链上。这次故障的核心问题,就是 Ela…...

如何用慕课助手快速完成在线课程?终极完整指南

如何用慕课助手快速完成在线课程?终极完整指南 【免费下载链接】mooc-assistant 慕课助手 浏览器插件(Chrome/Firefox/Opera) 项目地址: https://gitcode.com/gh_mirrors/mo/mooc-assistant 慕课助手是一款专为在线学习设计的智能浏览器插件,它能…...

一键恢复:为Windows 11 LTSC 24H2安装微软商店的终极指南

一键恢复:为Windows 11 LTSC 24H2安装微软商店的终极指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否正在使用Windows 11 LTSC版…...

3个关键场景:为什么你需要JPEXS Free Flash Decompiler来拯救遗留Flash资产

3个关键场景:为什么你需要JPEXS Free Flash Decompiler来拯救遗留Flash资产 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 在数字遗产保护和技术考古领域,Flash…...

告别卡顿!用nvprof/nvvp揪出你CUDA程序里的‘性能小偷’(附Python脚本实战)

深度剖析CUDA性能瓶颈:用nvprof/nvvp精准定位GPU程序中的"性能小偷" 当你兴奋地运行自己编写的CUDA程序时,是否遇到过这样的情况:明明算法设计精妙,GPU硬件配置高端,但程序运行速度却远低于预期?…...

M2LOrder模型在AE视频片段智能剪辑与特效合成中的应用

M2LOrder模型在AE视频片段智能剪辑与特效合成中的应用 对于视频创作者和后期制作人员来说,After Effects(简称AE)既是实现创意的强大工具,也是一座需要耗费大量时间攀登的技术高峰。你是否也经历过这样的场景:脑海中有…...

AI-Shoujo HF Patch终极指南:专业级游戏增强解决方案

AI-Shoujo HF Patch终极指南:专业级游戏增强解决方案 【免费下载链接】AI-HF_Patch Automatically translate, uncensor and update AI-Shoujo! 项目地址: https://gitcode.com/gh_mirrors/ai/AI-HF_Patch AI-Shoujo HF Patch是一个专为AI-Shoujo游戏设计的综…...

10分钟掌握哔哩哔哩Linux客户端的核心应用

10分钟掌握哔哩哔哩Linux客户端的核心应用 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 在Linux系统上享受完整哔哩哔哩体验不再是梦想。这款基于官方客户端移植的Lin…...

Air系列4G模块AT指令实战:构建稳定MQTT物联网连接的完整指南

1. 从零认识Air系列4G模块与MQTT协议 第一次接触Air系列4G模块时,我完全被AT指令的复杂性吓到了。但实际用下来发现,只要掌握几个关键命令,就能让设备在野外稳定联网。这个模块最大的优势是内置了MQTT协议栈,特别适合智能农业这类…...

Windows苹果设备驱动终极安装指南:一键解决iPhone/iPad连接问题

Windows苹果设备驱动终极安装指南:一键解决iPhone/iPad连接问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.c…...

Steam创意工坊下载终极指南:轻松获取海量游戏模组

Steam创意工坊下载终极指南:轻松获取海量游戏模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为无法访问Steam创意工坊的丰富模组资源而烦恼吗?…...

如何快速掌握League-Toolkit:面向新手的英雄联盟终极自动化助手教程

如何快速掌握League-Toolkit:面向新手的英雄联盟终极自动化助手教程 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟…...

一键部署通义千问1.8B:vllm推理引擎+chainlit界面,新手入门必看

一键部署通义千问1.8B:vllm推理引擎chainlit界面,新手入门必看 1. 通义千问1.8B模型简介 通义千问1.8B是阿里云推出的轻量级大语言模型,基于Transformer架构优化而来。这个版本在保持模型性能的同时,显著降低了硬件需求&#xf…...

Sublime Text 4 在Ubuntu上的3种安装方式对比:APT vs Snap vs 源码编译

Sublime Text 4 在Ubuntu上的3种安装方式对比:APT vs Snap vs 源码编译 在Linux开发环境中,文本编辑器的选择往往直接影响工作效率。Sublime Text以其极致的响应速度、丰富的插件生态和高度可定制性,成为众多中高级开发者的首选工具。本文将深…...

航测小白别慌!手把手教你搞定摄影测量期末计算题(附DEM、航高、基线详解)

摄影测量计算题实战指南:从原理到解题的深度解析 摄影测量学作为测绘工程专业的核心课程,其计算题往往让许多同学在期末考试前夜辗转难眠。那些看似复杂的公式、抽象的概念和繁琐的计算步骤,常常成为通往高分的拦路虎。但事实上,只…...

告别文字扭曲!Qwen-Image精准渲染中文,5步生成高质量图片

告别文字扭曲!Qwen-Image精准渲染中文,5步生成高质量图片 1. 为什么需要专业的中文图像生成工具 在日常工作和内容创作中,我们经常遇到需要将文字内容转化为视觉呈现的场景。无论是制作社交媒体海报、电商产品图还是演示文档,图…...

多智能体系统的“集体智能“:从涌现到可控的设计

多智能体系统的"集体智能":从涌现到可控的设计 关键词:多智能体系统、集体智能、涌现行为、可控性、强化学习、分布式系统、群体智能 摘要:本文将深入探讨多智能体系统中的集体智能现象,从其涌现原理到可控设计的完整过程。我们将用生动的生活实例解释复杂概念,…...

Hexo Admin保姆级配置指南:从零实现带鉴权的本地写作中心

Hexo Admin深度配置指南:构建安全高效的本地写作中心 每次在终端敲入hexo new post时,你是否怀念WordPress那种即开即写的流畅体验?Hexo Admin正是为解决这一痛点而生。作为Hexo生态中最受欢迎的本地管理插件,它不仅能提供可视化编…...

从PointNet++到SoftGroup:3D点云分割算法演进与实战解析

1. 3D点云分割技术演进全景图 当激光雷达扫描仪发出的光束遇到物体表面时,会形成数百万个离散的三维坐标点,这就是我们常说的点云数据。就像拼图游戏需要将碎片组合成完整图案一样,3D点云分割算法的核心任务是将这些无序的点分类成有意义的物…...

HarmonyOS 华为账号头像与昵称授权:一站式集成与安全实践指南

1. HarmonyOS头像昵称授权的核心价值 每次打开手机应用,看到那些需要手动输入昵称和上传头像的注册页面,我就忍不住想点"跳过"。作为开发者,我们完全可以用更聪明的方式解决这个问题——华为Account Kit提供的头像昵称授权功能&…...

如何构建企业级Spring Boot OAuth2单点登录系统:完整实战指南

如何构建企业级Spring Boot OAuth2单点登录系统:完整实战指南 【免费下载链接】oauth2-server spring boot (springboot 3) oauth2 server sso 单点登录 认证中心 JWT,独立部署,用户管理 客户端管理 项目地址: https://gitcode.com/gh_mirrors/oau/oauth2-server …...

谱域图卷积演进三部曲:从SCNN的实践突破到GCN的广泛应用

1. 谱域图卷积的前世今生 我第一次接触图卷积神经网络是在2016年,当时正在处理一个社交网络推荐系统的项目。传统CNN在图像上的成功让我思考:能不能把这种卷积操作迁移到图结构数据上?这就是谱域图卷积诞生的初衷。 图数据与图像数据最大的区…...

算法训练营|209.长度最小的子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/ 视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE状态:做出来了想法:1.滑动窗口(子数组像滑动的窗口移动,可以改变他的长度&…...

AcWing1402.星空之夜----连通图哈希

题目描述:夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。一个星群不能是一个更大星群的一部分。星群可能是相似的。如果两个星群的形状、包含星星的…...

如何让单人游戏变身多人派对?Nucleus Co-Op终极指南

如何让单人游戏变身多人派对?Nucleus Co-Op终极指南 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾经想过,那些只…...

Noto字体架构解密:如何构建覆盖900+语言的全球化字体系统

Noto字体架构解密:如何构建覆盖900语言的全球化字体系统 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 在数字世界的文字呈现中,我们常常遇到一个令人沮丧的现象&…...

红黑树 B树和哈夫曼树

一 红黑树的概念在平衡二叉树中,为了保持平衡,需要不断地做旋转,往往就会消耗过多的性能。为了防止这种情况又保持相对的平衡,我们可以使用红黑树。红黑树一中利用红黑规则来保持相对平衡的二叉搜索树,是一种2-3-4树&a…...

别再傻傻分不清了!CDH、DDH、BDH...这些密码学‘天书’缩写到底在说啥?

密码学‘天书’缩写解密:CDH、DDH、BDH背后的安全逻辑 第一次看到TLS协议文档里出现"CDH假设"时,我盯着屏幕发了十分钟呆——这玩意儿比量子力学方程还像天书。直到某次密码学会议上,一位前辈用"配方验证"的比喻点醒了我…...

从‘它怎么又挂了’到‘服务稳如狗’:我是如何用Docker给老旧Python项目续命的

从“它怎么又挂了”到“服务稳如狗”:我是如何用Docker给老旧Python项目续命的 三年前接手这个“祖传”Django 1.11项目时,我天真地以为最大的挑战是理解那些写满魔法方法的代码。直到第一次在生产环境部署——pip install 报错、ImportError 连环出现、…...

Cadence Sigrity Model Integrity 工具保姆级上手:从IBIS模型验证到波形查看,信号完整性工程师的桌面利器

Cadence Sigrity Model Integrity 工具深度实战:从模型验证到信号质量分析的完整工作流 作为一名信号完整性工程师,每天面对各种IBIS和DML模型文件时,最头疼的莫过于模型本身的语法错误或参数异常导致的仿真失败。我曾在一个关键项目中因为供…...