【K8s】专题十一:Kubernetes 集群证书过期处理方法

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

Linux 专栏 | Docker 专栏 | Kubernetes 专栏


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)


目录

一、背景介绍

二、相关概念

三、处理过程

1、备份证书

2、检测证书

3、更新证书

4、更新 Kubeconfig

5、重启服务

6、验证效果


一、背景介绍

使用 kubeadm 安装的 Kubernetes 集群,运行一段时间后执行 kubectl 命令突然出现以下报错:

Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2023-09-22T15:05:09+08:00 is after 2023-09-20T04:04:02Z

报错原因是 Kubernetes 集群证书已经过期(默认有效期 365 天),处理方法是对 Kubernetes 集群证书进行更新以重置有效期,本文将介绍单节点集群环境的具体处理过程。


二、相关概念

Kubernetes 集群证书是用于在 Kubernetes 集群中实现安全通信的关键组件,主要用于在集群的各个组件之间建立信任和进行身份验证。

Kubernetes 集群证书包括:

  • CA(证书颁发机构)证书:用于签名其他证书,是信任链的根
  • API Server 证书:用于 API Server 的 TLS 认证
  • kubelet 证书:用于 kubelet 与 API Server 之间的通信
  • kube-proxy 证书:用于 kube-proxy 与 API Server 之间的通信
  • etcd 证书:用于 etcd 集群内部节点之间的通信
  • 服务账户证书:用于服务账户与 API Server 之间的通信

kubeadm 是 Kubernetes 集群的启动和初始化工具,它在创建集群时生成 Kubernetes 集群证书,并默认设置有效期为一年。


三、处理过程
1、备份证书
cd /etc/kubernetes && mkdir bak && cp -r pki *.conf bak

2、检测证书
  • 检测 Master 节点组件证书
# kubeadm 20 之前的版本使用本命令
kubeadm alpha certs check-expiration

# kubeadm 20 之后的版本使用本命令
kubeadm certs check-expiration

  • 检测 Node 节点 kubelet 证书
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

3、更新证书
  • 更新 Master 节点组件证书
# kubeadm 20 之前的版本使用本命令
kubeadm alpha certs renew all

# kubeadm 20 之后的版本使用本命令
kubeadm certs renew all

🔔 有效期将被重置为 365 天

  • 更新 Node 节点 kubelet 证书
# 生成新的私钥和 CSR
openssl genrsa -out /var/lib/kubelet/pki/kubelet-client.key 2048
openssl req -new \
-key /var/lib/kubelet/pki/kubelet-client.key \
-out /var/lib/kubelet/pki/kubelet-client.csr \
-subj "/CN=system:node:<node-name>/O=system:nodes"

# 使用 CA 签发新证书
openssl x509 -req \
-in /var/lib/kubelet/pki/kubelet-client.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial \
-out /var/lib/kubelet/pki/kubelet-client-$(date +%F).pem \
-days 36500

# 更新证书
ln -sf /var/lib/kubelet/pki/kubelet-client-$(date +%F).pem /var/lib/kubelet/pki/kubelet-client-current.pem

4、更新 Kubeconfig
cd ~/.kube && mv config config-bak
yes | cp /etc/kubernetes/admin.conf config

🔔 若不更新 Kubeconfig,执行 kubectl 命令会出现报错:error: You must be logged in to the server (Unauthorized)

5、重启服务
# 重启 kubelet 服务
systemctl restart kubelet

# 重启 kube-apiserver、kube-controller-manage、kube-scheduler 容器
docker ps | grep kube-apiserver | grep -v pause | awk '{print $1}' | xargs -i docker restart {}
docker ps | grep kube-controller-manage | grep -v pause | awk '{print $1}' | xargs -i docker restart {}
docker ps | grep kube-scheduler | grep -v pause | awk '{print $1}' | xargs -i docker restart {}

🔔 使用 kubeadm 安装的集群,Master 节点的核心组件都是以静态 Pod 的方式运行的,因此重启服务可以采用重启对应容器的方式

6、验证效果

通过执行 kubectl  命令或检测证书,验证集群证书是否更新成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者Sun1989

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值