kubeadmin部署的K8s集群证书更新方案

项目场景:

公司原有的几套k8s环境证书即将到期,需要重新更新证书:
k8s版本:1.22.1
docker版本:20.10.7
k8s部署方式:kubeadmin


问题描述

提示:这里描述项目中遇到的问题:

kubeadmin部署的K8s集群,默认证书只有一年有效期,针对已经部署的k8s集群,证书即将到期或者证书已经过期的集群,提出证书更新方案


解决方案:

本文解决方案与现有百度的文章相比更全,建议升级证书,可以直接跳到第十步,如果失败再走1-9手动更新:

1.查询当前证书过期时间

# kubeadm alpha certs check-expiration
or
# Openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt
or
#for i in `find /etc/kubernetes/pki -name "*.crt"`;do openssl x509 -in $i -text -noout| grep Not;echo $i;done
Not Before 初始时间  
Not After  过期时间

主要有如下证书,需要注意:

apiserver.crt                
front-proxy-ca.crt          
ca.crt                      
apiserver-etcd-client.crt
apiserver-kubelet-client.crt    
front-proxy-client.crt      
etcd/server.crt              
etcd/ca.crt                 
etcd/peer.crt                
etcd/healthcheck-client.crt  

2.备份

# cp -r /etc/kubernetes  /etc/kubernetes_back

3.生成集群配置文件

# kubeadm config view > /root/kubeadmin.yaml

4.续期证书

# kubeadm alpha certs renew all --config=/root/kubeadmin.yaml
(拷贝新证书到其他master节点)

5.重新生成配置文件

# cd /etc/kubernetes
# ls *conf
# rm -rf *conf
# kubeadm init phase kubeconfig all --config=/root/kubeadmin.yaml

6.复制新的认证文件(在所有master上执行,使证书生效)

# rm -rf ~/.kube
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

7.重启kubelet、apiserver、controller-manager、scheduler、etcd(在所有master上执行,使证书生效)

# docker ps | egrep "etcd|kube-apiserver|kube-controller-manager|kube-scheduler" | grep -v pause | awk '{print $1}' | xargs -i docker restart {}

8.检查每个master的证书有效期

# for i in `find /etc/kubernetes/pki -name "*.crt"`;do openssl x509 -in $i -text -noout| grep Not;echo $i;done

9.补充若还是不行

# 查看etcd日志 docker logs -f 报类似以下错误的话
k8s-master02 etcd[1424]: rejected connection from "192.168.0.107:38224" (error "remote error: tls: bad certificate", ServerName ""

具体日志忘记了,只记得是host还是ServerName不在证书列表中。这一步当时处理花了很长时间。兄弟们这一步是解决问题的关键!!!
做如下操作:

# vim  /root/kubeadmin.yaml

具体内容如下:

apiServer:
  certSANs:
  - hz-cs1
  - hz-cs2
  - hz-cs3
  - 192.168.2.12
  - 192.168.2.13
  - 192.168.2.14
  - 192.168.2.120
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.21.120:6443
controllerManager: {}
dns: {}
etcd:
  local:
    serverCertSANs:
      - 192.168.2.12
      - 192.168.2.13
      - 192.168.2.14
      - 192.168.2.120
    peerCertSANs:
      - 192.168.2.12
      - 192.168.2.13
      - 192.168.2.14
      - 192.168.2.120
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.22.1
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.1.0.0/16
scheduler: {}

其中最为关键的就是这两步:

apiServer:
  certSANs:
  - hz-cs1
  - hz-cs2
  - hz-cs3
  - 192.168.2.12
  - 192.168.2.13
  - 192.168.2.14
  - 192.168.2.120

以及

etcd:
  local:
    serverCertSANs:
      - 192.168.2.12
      - 192.168.2.13
      - 192.168.2.14
      - 192.168.2.120
    peerCertSANs:
      - 192.168.2.12
      - 192.168.2.13
      - 192.168.2.14
      - 192.168.2.120

新增如下内容包括三台master ip及主机名,及vip 之后再继续做4,5,6,7,8依次进行 到此就可以了

10.以上为手动操作,有备份的操作。以下为1.15版本以上的自动化操作方式。推荐先使用此方法,不行再手动更新。
下载脚本:

# git clone https://github.com/yuyicai/update-kube-cert.git
# cd update-kubeadm-cert
# chmod 755 update-kubeadm-cert.sh

同时更新etcd证书和master证书:

#在每台master上执行以下命令
#./update-kubeadm-cert.sh all
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

day-day-up2

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值