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

【笔记】Kubernetes 中手动及自动化证书更换步骤及注意事项

如果 Kubernetes API 服务器的 TLS 证书过期,会导致客户端(如 kubectl)无法通过安全连接访问集群,需要及时更换证书。以下是 手动更换证书 的通用步骤(适用于非自动证书管理的集群,如 kubeadm 部署的集群)。

一、准备工作

  1. 备份现有证书证书默认存储在 /etc/kubernetes/pki/ 目录下,先备份旧证书以防万一:
cp -r /etc/kubernetes/pki/ /etc/kubernetes/pki_backup_$(date +%Y%m%d) 
  1. 生成新证书所需的私钥和 CSR(证书签名请求)使用 OpenSSL 生成新的私钥和 CSR(以 API 服务器证书为例):
# 生成私钥 
openssl genrsa -out /etc/kubernetes/pki/apiserver.key 2048 
# 生成 CSR(需替换以下参数): 
# - `commonName (CN)`:通常为 API 服务器的主机名或 IP(如 `kube-apiserver`) 
# - `subjectAltName (SAN)`:包含 API 服务器的 IP、主机名、集群内部 DNS 等 
openssl req -new \ -key /etc/kubernetes/pki/apiserver.key \ -out /etc/kubernetes/pki/apiserver.csr \ -subj "/CN=kube-apiserver" \ -reqexts SAN \ -config <(cat /etc/ssl/openssl.cnf <(echo "[SAN]")) \ -extensions SAN \ -addext "subjectAltName = DNS:kube-apiserver,DNS:kube-apiserver.kube-system.svc,IP:10.0.0.10,IP:192.168.1.100"  # 替换为实际的 SAN 值 

注意:subjectAltName 需包含 API 服务器的所有访问地址(如集群内部 IP、负载均衡 IP、DNS 名称等)。

二、生成新证书(两种方式)

方式 1:使用现有 CA 证书签名(推荐)
如果集群原有 CA 证书未过期,可直接用其签名新证书:

# 使用集群 CA 证书签名 API 服务器证书 
openssl x509 -req \ -in /etc/kubernetes/pki/apiserver.csr \ -CA /etc/kubernetes/pki/ca.crt \ -CAkey /etc/kubernetes/pki/ca.key \ -CAcreateserial \ -out /etc/kubernetes/pki/apiserver.crt \ -days 3650  # 证书有效期(天),建议设置较长时间 

方式 2:重新生成全新 CA 证书(适用于 CA 证书也过期的情况)
如果 CA 证书已过期,需重新生成 CA 及所有组件证书(风险较高,需谨慎操作):

# 生成新 CA 私钥和证书 
openssl genrsa -out /etc/kubernetes/pki/ca.key 2048 
openssl req -x509 \ -key /etc/kubernetes/pki/ca.key \ -out /etc/kubernetes/pki/ca.crt \ -subj "/CN=Kubernetes-CA" \ -days 3650 
# 使用新 CA 签名其他组件证书(如 apiserver、controller-manager、scheduler 等) 
# 参考方式 1 的步骤,替换 CA 为新生成的 ca.crt 和 ca.key 

三、替换证书并重启服务

  1. 替换 API 服务器证书将新生成的 apiserver.crt 和 apiserver.key 替换到对应目录:
mv /etc/kubernetes/pki/apiserver.crt{.old,}  # 备份旧证书 
mv /etc/kubernetes/pki/apiserver.key{.old,} 
cp /path/to/new/apiserver.crt /etc/kubernetes/pki/ 
cp /path/to/new/apiserver.key /etc/kubernetes/pki/ 
  1. 重启 kube-apiserver 服务在控制平面节点上执行:
systemctl restart kube-apiserver 
systemctl status kube-apiserver  # 检查服务状态是否正常 
  1. 更新其他组件的证书(如有需要)如果其他组件(如 kube-controller-manager、kube-scheduler、kubelet、kubeproxy 等)的证书也依赖旧 CA,需同步更新它们的证书,步骤类似 API 服务器。

四、验证证书更新

  1. 检查证书有效期
openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt 

确保 notAfter 时间为未来日期。

  1. 测试客户端连接使用 kubectl 命令验证是否能正常连接集群:
kubectl get nodes 
# 若提示权限问题,可能需要更新 kubeconfig 中的 CA 证书(替换为新 ca.crt 的内容)
  1. 更新 kubeconfig 中的 CA 证书(如果 CA 已更换)如果重新生成了 CA 证书,需将新 ca.crt 内容更新到 kubeconfig(默认路径:~/.kube/config):
kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true \ --server=https://<API_SERVER_IP>:6443 

五、自动化证书管理(推荐方案)

为避免手动维护证书的复杂性,建议使用 证书自动轮换工具:

  1. Kubernetes 自带的证书轮换,对于 kubeadm 部署的集群,可启用自动证书更新:
kubeadm alpha certs renew all  # 手动触发更新(1.20+ 版本支持自动轮换) 
  1. 使用 cert-manager通过 cert-manager 管理 Kubernetes 内的证书,支持 Let’s Encrypt、自签名等多种类型,实现证书自动申请、更新和续签。

注意事项:

  1. 生产环境谨慎操作:证书更换可能导致集群短暂中断,建议在维护窗口进行,并提前备份数据。
  2. 同步多控制平面节点:如果是多 master 集群,需在所有控制节点上执行证书替换和服务重启。
  3. 监控证书有效期:定期检查证书状态,可通过脚本或工具(如 kubectl cert)设置告警。
http://www.xdnf.cn/news/13450.html

相关文章:

  • 如何开启自己计算机远程桌面连接功能? 给别人或异地访问
  • 8.Vue的watch监视
  • 从sdp开始到webrtc的通信过程
  • 第二十六课:手搓梯度增强
  • 深入浅出:C++深拷贝与浅拷贝
  • Jadx(开源AVA反编译工具) v1.5.0
  • 编译线程安全的HDF5库
  • Python环境搭建竞赛技术
  • 代码训练LeetCode(29)最后一个单词的长度
  • Github月度新锐热门工具 - 202506
  • PyTorch:让深度学习像搭积木一样简单!!!
  • 邮件限流器
  • 《Redis》持久化
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice实现word 文档中的table插入新行并赋值
  • 论文略读:RegMix: Data Mixture as Regression for Language Model Pre-training
  • CATIA高效工作指南——常规配置篇(四)
  • deepbayes: VI回顾和GMM近似推断
  • 分布式事务的炼狱:Spring Cloud 微服务架构下的数据一致性保障战
  • 时序数据库Influxdb3 core安装
  • 中兴B860AV1.1_晨星MSO9280芯片_4G和8G闪存_TTL-BIN包刷机固件包
  • Android 实现可拖动的ImageView
  • RTX4060安装cuda12.3 cudnn8.9
  • Neo4j批量数据导入完全指南:高效处理大规模数据
  • MyBatis-Plus 混合使用 XML 和注解
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | FAQ Collapse(问题解答折叠面板)
  • Oracle ADG 日常巡检指南
  • 由编译osgEarth源码引发的一系列问题(三)利用vcpkg安装osg与OSGEarth
  • JavaScript跨域全面指南:从原理到最佳实践
  • RV1126+OPENCV在视频中添加LOGO图像
  • JVM面试基础篇