k8s采坑记 - 证书过期之kubeadm重新生成证书

重新生成证书

检查过期

新版本(1.15+):kubeadm certs check-expiration
或
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
其他同理

证书备份

cp -rp /etc/kubernetes /etc/kubernetes.bak

移除过期证书

rm -f /etc/kubernetes/pki/apiserver*
rm -f /etc/kubernetes/pki/front-proxy-client.*
rm -rf /etc/kubernetes/pki/etcd/healthcheck-client.*
rm -rf /etc/kubernetes/pki/etcd/server.*
rm -rf /etc/kubernetes/pki/etcd/peer.*

备注:可以使用命令openssl x509 -in [证书全路径] -noout -text查看证书详情。

重新生成证书

老版本:kubeadm alpha certs renew all
或
新版本(1.15+):kubeadm certs renew all 使用该命令不用提前删除过期证书

重新生成配置文件

kubeadm 在生成 kubeconfig 文件时,需要关联 Kubernetes 集群的核心镜像(如 apiserver、controller-manager 等),而这些镜像的版本需与集群版本严格匹配。当未明确指定版本时,kubeadm 会尝试从远程仓库(默认是 k8s.gcr.io)获取最新版本,但如果本地 kubeadm 版本过旧,可能无法兼容远程最新版本,因此会自动回退到历史稳定版本。通过 --kubernetes-version 明确指定版本,可强制 kubeadm 使用目标版本,避免自动回退:remote version is much newer: v1.33.4; falling back to: stable-1.22。同时注意:确保 kubeadm、kubelet、kubectl 三者版本一致(主版本必须相同,如均为 v1.28.x),否则可能出现组件兼容性问题。

# 查看集群版本
kubectl get no 
v1.22.1
# 重新生成配置
mv /etc/kubernetes/*.conf /tmp/
老版本:kubeadm alpha phase kubeconfig all
或
新版本(1.15+):kubeadm init phase kubeconfig all --kubernetes-version v1.22.1
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/scheduler.conf"
# 更新kubectl配置
cp -f /etc/kubernetes/admin.conf ~/.kube/config

重启kubelet

systemctl restart kubelet
systemctl status kubelet
systemctl stop kubelet

证书过期时间确认

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
其他同理

集群确认

kubectl get no

# 如果发现集群,能读不能写,则请重启一下组件:
docker ps | grep apiserver 
docker ps  | grep scheduler
docker ps  | grep controller-manager

docker restart 容器标识
posted @ 2019-08-07 13:53  justmine  阅读(10930)  评论(3)    收藏  举报