【笔记】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)设置告警。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值