首页 > 其他分享 >K8S上生产环境后,90%都会遇到这个故障

K8S上生产环境后,90%都会遇到这个故障

时间:2024-04-28 13:11:24浏览次数:26  
标签:kubernetes etc 证书 故障 集群 90% kubeadm K8S

K8S上生产环境后,90%都会遇到这个故障

原创 didiplus 攻城狮成长日记 2024-03-26 21:30 广东 听全文

Kubernetes/K8s上生产环境中,90%的人都会遇到的一个故障,K8s集群突然有一天执行kubectl命令时,报错提示509证书过期。返回如下报错信息:

Unable to connect to the server: x509: certificate has expired or is not yet valid

这是什么导致的呢?该怎么进行解决呢?

我们了解到kubectl,它实在上是读取kube/config这个文件,向API Server发起请求。也就是kubectl的任何操作,都是携带这个文件向API Server获取数据后显示到你当前的终端。

图片

那这个提示就意味kube/config这个文件中的证书与API Server它的证书过期了。如果你使用kubeadm搭建的集群,它所有的证书默认存储在/etc/kubernetes/pki。这里面主要是k8s的证书和etcd使用的证书。这些证书默认有效期是1年。一旦过期,k8s集群就无法提供服务。

图片

那为什么只有一年呢?

这是因为K8S官方,他希望你每年更新一次K8S的版本,来保持最新版本。同时它的证书实际也会给你延期。

那这种每年更新一次版本,来去更新证书,在生产环境中显然不太合适的。这种操作会增加集群不稳定或者出现其他问题的风险。

当然kubeadm也提供了一个命令方式,可以自动的给你续签这些所有的证书。

我们可以通过kubeadm certs check-expiration来去查看当前集群证书的一个有效期,因为本身这证书就是kubeadm在搭建集群中自动生成的,所以,它管理证书也是通过kubeadm这个命令进行管理它的一个续期。

图片

通过这个命令可以查看当前所有证书它的一个有效期,可以看到证书的有效期剩余342天。下面是它的根证书,默认是10年,也就是「根证书它是非常重要的」

客户端证书过期了,可以通过根证书可以生成。而这根证书一旦发生变化,它的影响范围就比较大了,所以,kubeadm它的根证书默认是10年,是完全足够用的。主要升级的也是客户端证书。

它提供一个命令,也是可以直接对这些客户端证书进行升级,不过在升级之前,我们先将一些数据给备份一下,以免在升级的过程中,产生一些额外的问题,好方便进行去恢复。

  1. 首先把/etc/kubernetes/pki这个目录进行备份。
cp /etc/kubernetes/pki /etc/kubernetes/pki.bk -r
  1. 然后再将etcd的数据目录备份一下。
cp /var/lib/etcd /var/lib/etcd.bk -r

使用kubeadm certs renew all将所有的证书升级,续期一年。图片

执行完之后,根据提示重启相关组件,由于该K8S集群使用kubeadm部署,只需要执行如下命令即可实现重启K8S相关组件。

mv /etc/kubernetes/manifests/*.yaml /home
sleep 20
mv /home/*.yaml /etc/kubernetes/manifests/

等待k8s集群启动成功后,再次查看证书时间,如下:

图片

通过上述结果可以看到证书的有效期变成了一年。

 

云原生30 云原生 · 目录 上一篇避免业务中断,K8s节点故障排查攻略,速来围观!下一篇提升K8S故障排除效率:详解Pod内抓包的高效策略! 素材来源官方媒体/网络新闻 阅读 3770 ​ 喜欢此内容的人还喜欢   轻松搞定!Python脚本实现华为设备配置自动备份     攻城狮成长日记 不看的原因   一行代码,优化 import.meta.env 使用体验     所谓前端 不看的原因   充分利用console.log()     涅槃快乐 不看的原因   2条留言 写留言
  •   Summer wind   广东3月30日 回复   怎么才是364天,不是在342天的基础上加上一年吗,那这样岂不是要一年一年的去重新生成证书。会中断业务吗 置顶     攻城狮成长日记   (作者)3月30日 回复   客户端证书有效期是一年的。可以通过修改源码调整这个证书的有效期的  
已无更多数据       攻城狮成长日记            

人划线

 

标签:kubernetes,etc,证书,故障,集群,90%,kubeadm,K8S
From: https://www.cnblogs.com/cheyunhua/p/18163539

相关文章

  • DockerDestop启动k8s失败
    在DockerDestop中找到Kubernetes--->EnableKubernetesKubernetes大概率会一直starting......最后创建失败解决方法请查看下面链接:https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/v1.29.1总结:因为Kubernetes的镜像拉不下来,我们可以在Git......
  • 风机故障诊断方法短述
    风机故障诊断方法短述问题描述风机故障诊断主要包括状态监测、风机故障预测两类任务。风机状态监测将风机运行参数(如SCADA数据、振动信号等)作为输入,输出当前风机是否存在故障,例如风机叶片覆冰检测,能够通过风机的运行参数判断当前叶片是否存在覆冰。风机故障预测将风机运行参数......
  • 服务器维护、存储故障处理、网络综合布线、存储故障处理、POWER 小型机故障处理(全国各
    ......
  • Linux 系统故障排查,一文详解
    导读有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如......
  • 什么是K8s架构?一文让你全面了解K8s(Kubernetes)
    K8S架构定义K8S是一个开源的容器部署和管理平台。它提供容器编排、容器运行时、以容器为中心的基础设施编排、负载平衡、自我修复机制和服务发现。K8S体系结构,有时也称为K8S应用程序部署体系结构或K8S客户端-服务器体系结构,用于跨主机集群组成、扩展、部署和管理应用程序容器......
  • Docker基础——50台容器异常占用宿主机90%内存问题
    一、问题描述一台裸金属服务存有50台业务容器,通过Docker进程起服务,由system-runtime守护容器的生命周期。free-h查看裸金属服务器内存没有正常释放,cat/proc/meminfo查看内存分配无异常,怀疑裸金属服务器的Java进程存在Glibc内存泄漏,或Docker容器没有正常关闭进程释放内存有关;......
  • k8s 入门
    k8s是什么?k8s介于应用和服务器之间,能够通过配置协调多个应用服务。使用者通过配置yaml文件来将多个服务自动部署应用到各个服务器上,实现服务的自动扩缩容,并且具有高可用性(某台机器上服务宕机后,自动在另外的服务器上部署应用)。k8s架构原理k8s整体分为控制平面和运行节点,控......
  • k8s网络配置
    1基础概念1.1containerPort、port、nodePort、targetPort的区别与联系containerPort:Container容器暴露的端口。containerPort是在pod控制器中定义的、pod中的容器需要暴露的端口。port:service暴露在集群中的端口,仅限集群内部访问。port是暴露在cluster(集群网络)上的端口,提......
  • 一次故障演练,十分钟自动搞定?
    本文分享自华为云社区《应用平台AppStage运维中心实践vol.4一次故障演练,十分钟自动搞定?》,作者:yangyang得意。某业务部涉及200+服务,部署架构复杂,各服务间依赖关系盘根错节,每次故障演练都需要耗费大量时间,还容易出现遗漏问题风险……有没有高效可靠的方法,可以在短时间内支撑......
  • K8S集群问题:案例一:Java调用Glibc2.28-69内存分配器无法限制虚拟内存VIRT问题
    一、问题描述1、背景:租户反馈,Apr711:22容器出现夯死现象,容器部署的单个java进程;宿主机上,top显示的容器进程virt内存持续增长32G,目前messages日志没有看到oom的记录,基本是。租户其他bc7、8系统上有添加参数MALLOC_ARENA_MAX进行限制,基本维持在16G左右,目前bcoe21.10系统配置......