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

K8s证书过期别慌!保姆级kubeadm续签教程(含1.23.0版本实操)

K8s证书过期应急指南:从故障诊断到全集群证书续签实战

凌晨三点,刺耳的手机警报声将你从睡梦中惊醒——监控系统显示生产环境Kubernetes集群所有节点状态未知。当你匆忙打开终端输入kubectl get nodes时,屏幕上赫然显示着Unable to connect to the server: x509: certificate has expired or is not yet valid的错误信息。这种场景对于使用kubeadm部署的Kubernetes集群来说并不罕见,因为默认安装的各类证书有效期仅为1年。本文将带你完整走通从故障诊断到全集群证书续签的实战流程,涵盖Master节点核心组件证书、kubelet客户端证书以及Worker节点证书的更新策略。

1. 证书过期故障诊断与应急准备

1.1 快速确认证书过期状态

当集群突然失联时,首先需要确认是否确实由证书过期引起。通过以下命令检查集群证书状态:

# 检查控制平面证书过期时间 kubeadm certs check-expiration # 检查kubelet客户端证书(所有节点执行) openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

典型证书过期故障会呈现以下特征:

  • kubeadm certs check-expiration显示EXPIRES列为过去时间
  • kubelet-client-current.pemnotAfter值早于当前时间
  • API Server日志中出现x509: certificate has expired错误

1.2 关键文件备份策略

在开始修复前,必须对关键配置进行完整备份:

# 备份证书目录 sudo cp -r /etc/kubernetes/pki /opt/k8s-backup/pki-$(date +%Y%m%d) # 备份kubelet配置 sudo cp -r /var/lib/kubelet /opt/k8s-backup/kubelet-$(date +%Y%m%d) # 备份kubeconfig文件 sudo cp /etc/kubernetes/admin.conf /opt/k8s-backup/admin.conf-$(date +%Y%m%d)

重要提示:备份时应保留原目录结构,避免使用压缩包导致权限信息丢失

2. Master节点证书更新全流程

2.1 核心组件证书批量更新

使用kubeadm工具可以一次性更新所有控制平面证书:

# 续签所有控制平面证书 sudo kubeadm certs renew all # 验证新证书有效期 sudo kubeadm certs check-expiration | grep -v 'never'

证书更新后需要特别注意:

  • 新证书会生成在/etc/kubernetes/pki目录
  • 旧证书会被自动备份为.old文件
  • 此时各组件仍在使用旧配置,需要后续步骤更新

2.2 kubeconfig文件重建

证书更新后,需要重新生成各组件的kubeconfig文件:

# 删除旧配置文件 sudo rm -f /etc/kubernetes/*.conf # 重新生成所有kubeconfig(注意保持版本一致) sudo kubeadm init phase kubeconfig all --kubernetes-version=v1.23.0 # 更新管理员配置 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.3 控制平面组件重启顺序

组件重启需要遵循特定顺序以避免服务中断:

  1. API Server:集群核心,最先重启

    sudo docker ps | grep kube-apiserver | awk '{print $1}' | xargs sudo docker restart
  2. Controller Manager & Scheduler

    sudo docker ps | grep -E 'kube-controller|kube-scheduler' | awk '{print $1}' | xargs sudo docker restart
  3. 验证组件状态

    kubectl get componentstatuses

3. Kubelet客户端证书更新策略

3.1 Master节点kubelet证书处理

kubelet证书需要特殊处理,因为其更新机制与其他组件不同:

# 重启kubelet触发证书轮换 sudo systemctl restart kubelet # 检查新证书 ls -l /var/lib/kubelet/pki/kubelet-client-current.pem # 批准CSR请求 kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve

3.2 Worker节点证书更新流程

对于Worker节点,需要单独处理每个节点的kubelet证书:

  1. 生成节点专属kubeconfig

    # 在Master节点执行(替换实际节点名) kubeadm init phase kubeconfig kubelet \ --node-name worker-node1 \ --kubeconfig-dir /tmp/kubelet-confs/
  2. 分发到对应Worker节点

    scp /tmp/kubelet-confs/kubelet.conf worker-node1:/etc/kubernetes/
  3. 重启节点kubelet服务

    ssh worker-node1 "sudo systemctl restart kubelet"
  4. 批准CSR请求

    kubectl get csr | grep worker-node1 | awk '{print $1}' | xargs kubectl certificate approve

4. 集群状态验证与后续加固

4.1 全功能测试方案

证书更新完成后,需要全面验证集群功能:

# 基础状态检查 kubectl get nodes kubectl get pods -A # 创建测试资源 cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 EOF # 验证服务发现 kubectl create service clusterip nginx --tcp=80:80 kubectl run curl-test --image=curlimages/curl --command -- sleep 3600 kubectl exec curl-test -- curl -v http://nginx.default.svc.cluster.local

4.2 证书管理长效方案

为避免再次出现证书过期问题,建议实施以下预防措施:

  • 证书监控告警

    # 定期检查证书过期情况的监控脚本示例 kubeadm certs check-expiration | awk -F' ' '/[0-9]{4}-[0-9]{2}-[0-9]{2}/{ if($2<"'$(date -d'+30 days' +%Y-%m-%d)'") print "WARN: "$1" expires soon: "$2 }'
  • 自动化更新方案

    • 使用Ansible等工具编排证书更新流程
    • 配置CI/CD流水线定期执行证书检查
    • 考虑使用cert-manager等专业证书管理工具
  • 调整默认有效期(需重新初始化集群):

    kubeadm init --apiserver-cert-extra-sans=... \ --cert-duration=87600h \ # 10年有效期 --cert-renewal=true

在实际生产环境中,我们曾遇到过一个典型案例:某金融系统在凌晨证书过期导致支付服务中断。由于提前配置了证书监控,团队在证书到期前30天就收到了预警,但误以为是测试环境告警而未处理。这个教训告诉我们,证书管理不仅要技术到位,还需要配套的告警分级和处理流程。

http://www.jsqmd.com/news/831046/

相关文章:

  • OPC一人公司完全指南:定义、工具与创业实践
  • ElevenLabs维吾尔文语音不是“开箱即用”——20年语音工程老兵拆解5层合规风险:从《少数民族语言文字工作条例》到GDPR跨境语音数据链路审计
  • 2026年东莞老房翻新公司推荐TOP10:专业品牌实力评测 - 优家闲谈
  • 国内GEO优化公司排行 邵阳企业获客适配服务商盘点 - 奔跑123
  • 思科路由器远程管理保姆级教程:从telnet到SSH,一次搞定登录、用户会话和密码设置
  • 2025最权威的十大降重复率助手实测分析
  • 如何在Linux系统上快速搭建微信开发者工具:终极完整指南
  • MT7621+MT7915/MT7905+MT7975 AX1800 SDK编译:从源码到固件的避坑实践
  • 国内GEO优化公司排行:岳阳企业适配选型参考 - 奔跑123
  • 【实战】基于博图与虚拟工厂的1200PLC三层电梯仿真系统设计
  • 广州家教平台避坑指南:认准这种学生自营、试讲不收费、每周跟踪反馈的老牌网站 - 教育资讯板
  • 从一次真实的攻防演练看UEditor漏洞:运维如何快速自查与修复.NET任意文件上传
  • Graphviz 除了画流程图,还能怎么玩?用 Python + Graphviz 自动生成系统架构图实战
  • Linux文件搜索工具FSearch:告别大海捞针,体验毫秒级搜索快感
  • MySQL双轨制版本模型解析:LTS与创新版如何选型与升级
  • Bittide机制:FPGA实现的分布式时钟同步技术
  • Midjourney立体主义风格生成成功率骤降?这5个隐藏变量正在 silently corrupt 你的构图——资深提示工程师紧急诊断报告
  • 血管分割新突破:详解DSCNet中的蛇形卷积如何解决管状结构难题
  • 国内主流GEO优化公司排行 常德企业选型指南 - 奔跑123
  • Conan常用命令总结
  • 2006广州家教平台推荐排行榜:不赚家长差价、试讲免费的华工中大家教网登顶 - 教育资讯板
  • 泰卢固文语音项目上线倒计时!ElevenLabs最新v2.3.1 API强制启用phoneme-aware tokenization——不升级将在2024年Q3失效
  • 长沙写真推荐2026:本地人像摄影工作室真实测评与选择指南 - 麦克杰
  • 【图像处理】基于导数交替方向优化方法的全变分图像恢复附matlab代码
  • 3.ansible触发器与流程控制
  • 分组查询
  • 英雄联盟智能助手Seraphine:免费开源的战绩查询与BP辅助神器
  • 东莞全屋翻新品牌排行榜2026:TOP8口碑品牌深度评测 - 优家闲谈
  • 【开源实践】从零构建Voronoi泡沫结构:多胞材料建模的简易路径
  • 嵌入式Tickless低功耗机制:从原理到FreeRTOS与裸机实践