快速搞定K8S新老版本的证书续期问题

 更新时间:2026年01月24日 10:32:10   作者:龙飞05  
本文介绍了Kubernetes集群证书续期的步骤,包括更新证书、替换CCNA证书、重启相关组件以及验证新证书的有效性

新版本-1.21以上版本集群证书续期

# 当对k8s集群版本进行了升级之后它的证书会自动更新
# 查看有效期
kubeadm certs check-expiration
# 证书续期
kubeadm certs renew all #可以针对单个集群组件进行升级
# 执行完上条命令之后需要对api controller-manager scheduler进行重启
docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash
# 修改config文件
cp /etc/kubernetes/admin.conf /root/.kube/config
#编译kubeadm的方式延长证书有效期
100年修改golang源码,在kubeadm init之前进行编译,二进制文件
# k8s自动对证书进行续期

老版本k8s的证书续期

  • # master节点
  • # 更新证书
kubeadm alpha certs renew all
kubeadm alpha certs check-expiration
  • # 重新生成证书
kubeadm init phase certs all --config /etc/kubernetes/kubeadm-config.yaml
kubeadm init phase kubeconfig all --config /etc/kubernetes/kubeadm-config.yaml
\# kubeadm init phase kubeconfig admin --kubeconfig-dir=/etc/kubernetes/
\# kubeadm init phase kubeconfig controller-manager --kubeconfig-dir=/etc/kubernetes/
\# kubeadm init phase kubeconfig scheduler --kubeconfig-dir=/etc/kubernetes/
\# kubeadm init phase kubeconfig kubelet --config /etc/kubernetes/kubeadm-config.yaml
  • # 检查新证书的 SAN 列表
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep -A1 "Subject Alternative Name"
openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -noout -text | grep -A1 "Subject Alternative Name"

tar czvf pki.tar.gz pki/*
  • # 启动一个 HTTP 服务器来提供证书文件
python3 -m http.server 8080

sudo -i
cd /etc/kubernetes/
rm -rf /etc/kubernetes/pki
rm -f /etc/kubernetes/{admin.conf,controller-manager.conf,scheduler.conf,kubelet.conf,pki.tar.gz}
wget http://10.116.0.6:8080/{admin.conf,controller-manager.conf,scheduler.conf,kubelet.conf,pki.tar.gz}
tar xf pki.tar.gz

docker restart $(docker ps -q -a -f "name=kube-controller-manager|kube-scheduler")
docker restart $(docker ps -q -a -f "name=kube-apiserver|kube-controller-manager|kube-scheduler|etcd")

cp /etc/kubernetes/admin.conf $HOME/.kube/config

rm -fr /var/lib/kubelet/pki.bak
mv /var/lib/kubelet/pki /var/lib/kubelet/pki.bak
systemctl restart kubelet
systemctl status kubelet

kubectl get csr # 查看未批准的 CSR
kubectl certificate approve <CSR-NAME>
kubectl certificate approve $(kubectl get csr | grep Pending | awk '{print $1}')
  • # 替换 ccalico 证书
POD_CIDR=`grep 'cluster-cidr' /etc/kubernetes/manifests/kube-controller-manager.yaml | awk -F= '{print $2}'`

sed '/CALICO_IPV4POOL_CIDR/{n;s#".*"#"'$POD_CIDR'"#}' calico-etcd.yaml -i

sed -i 's/# \(etcd-.*\)/\1/' calico-etcd.yaml
etcd_key=$(cat /etc/kubernetes/pki/etcd/peer.key | base64 -w 0)
etcd_crt=$(cat /etc/kubernetes/pki/etcd/peer.crt | base64 -w 0)
etcd_ca=$(cat /etc/kubernetes/pki/etcd/ca.crt | base64 -w 0)
sed -i -e 's/\(etcd-key: \).*/\1'$etcd_key'/' \
  -e 's/\(etcd-cert: \).*/\1'$etcd_crt'/' \
  -e 's/\(etcd-ca: \).*/\1'$etcd_ca'/' calico-etcd.yaml

ETCD=$(grep 'advertise-client-urls' /etc/kubernetes/manifests/etcd.yaml | awk -F= '{print $2}')
sed -i -e 's@\(etcd_endpoints: \).*@\1"'$ETCD'"@' \
  -e 's/\(etcd_.*:\).*#/\1/' \
  -e 's/replicas: 1/replicas: 2/' calico-etcd.yaml

kubectl delete -f calico-etcd.yaml --grace-period=0 --force
kubectl apply -f calico-etcd.yaml
  • # node 节点
  • # 更新证书
sudo -i
cd /etc/kubernetes/
rm -fr /etc/kubernetes/{bootstrap-kubelet.conf,kubelet.conf,pki/*}
wget http://10.116.0.7:8080/{bootstrap-kubelet.conf,kubelet.conf}
wget http://10.116.0.7:8080/pki/ca.crt -O pki/ca.crt
  • # 重启 kubelet
rm -fr /var/lib/kubelet/pki.bak
mv /var/lib/kubelet/pki /var/lib/kubelet/pki.bak
systemctl restart kubelet
systemctl status kubelet
  • # 重启 kube-proxy
kubectl delete pod -n kube-system -l k8s-app=kube-proxy

# 重启 docker

sudo -i
cd /etc/kubernetes/
systemctl restart docker
  • # 重启 coredns
  • # 删除现有 Token 的 Secret,Kubernetes 会自动生成新 Token
  • # 查找 CoreDNS ServiceAccount 关联的 Secret
kubectl get secrets -n kube-system | grep coredns-token
  • # 删除旧 Secret(例如 coredns-token-xxxxx)
kubectl delete secret -n kube-system coredns-token-xxxxx
kubectl scale -n kube-system deployment/coredns --replicas=0
  • # 测试新 Token 是否有效
TOKEN=$(kubectl get secret coredns-token-45r8t -n kube-system -o jsonpath='{.data.token}' | base64 -d)
\# curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes.default.svc.cluster.local/api/v1/namespaces
curl -k -H "Authorization: Bearer $TOKEN" https://10.116.0.6:6443/api/v1/namespaces

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IPVS下CoreDNS滚动更新解析失败原理探究

    IPVS下CoreDNS滚动更新解析失败原理探究

    这篇文章主要为大家介绍了IPVS下CoreDNS滚动更新解析失败原理探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Rainbond上部署API Gateway Kong及环境配置教程

    Rainbond上部署API Gateway Kong及环境配置教程

    这篇文章主要为大家介绍了Rainbond上部署API Gateway Kong及环境配置教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • kubernetes k8s 存储动态挂载配置详解

    kubernetes k8s 存储动态挂载配置详解

    这篇文章主要为大家介绍了kubernetes k8s 存储动态挂载配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 使用kubeadm部署多节点集群

    使用kubeadm部署多节点集群

    这篇文章介绍了使用kubeadm部署多节点集群的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Minikube极速搭建单机k8s集群全过程

    Minikube极速搭建单机k8s集群全过程

    本篇教程分享了如何在Ubuntu上安装和配置Minikube,一个用于运行单机Kubernetes集群的工具,文章详细介绍了安装Docker、Kubectl和Minikube的步骤,并指导如何启动集群、验证安装以及部署一个简单的Nginx服务
    2025-12-12
  • k8s多节点master部署过程

    k8s多节点master部署过程

    这篇文章主要介绍了k8s多节点master部署过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 详解k8s NetworkPolicy 网络策略是怎么样的

    详解k8s NetworkPolicy 网络策略是怎么样的

    这篇文章主要为大家介绍了k8s NetworkPolicy 网络策略是怎么样的深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • k8s容器放开锁内存限制问题

    k8s容器放开锁内存限制问题

    nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并重启docker,以解除内存锁定限制
    2025-09-09
  • K8s中Pod处于Pending状态的八种原因分析

    K8s中Pod处于Pending状态的八种原因分析

    文章详细介绍了Pod处于Pending状态的八种常见原因,并提供了相应的排查和解决方法,这些原因包括资源不足、调度约束、存储依赖、镜像问题、配额限制、网络暗礁、系统级异常以及冷门陷阱,每种原因都附带了具体的诊断方法和解决建议,感兴趣的朋友一起看看吧
    2025-02-02
  • k8s编排之StatefulSet知识点详解二

    k8s编排之StatefulSet知识点详解二

    这篇文章主要为大家介绍了k8s编排之StatefulSet知识点的部分详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论