kubeadm初始化的k8s集群证书续期—— 筑梦之路

脚本自动化方式

这个是一个开源的项目:https://gitee.com/ximy/update-kube-cert

该项目可以自动化更新k8s集群的证书,使用也很简单。

该脚本可将 kubeadm 生成的证书有效期更新为 10 年。

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

如果使用 containerd 作为 CRI 运行时:

  • 使用 update-kubeadm-cert-crictl.sh 代替 update-kubeadm-cert.sh
  • 手动重启控制平面 Pods(必须)

    执行完此命令之后你需要重启控制面 Pods。因为动态证书重载目前还不被所有组件和证书支持,所有这项操作是必须的。 静态 Pods 是被本地 kubelet 而不是 API Server 管理, 所以 kubectl 不能用来删除或重启他们。 要重启静态 Pod 你可以临时将清单文件从 /etc/kubernetes/manifests/ 移除并等待 20 秒 (参考 KubeletConfiguration 结构 中的 fileCheckFrequency 值)。 如果 Pod 不在清单目录里,kubelet 将会终止它。 在另一个 fileCheckFrequency 周期之后你可以将文件移回去,为了组件可以完成 kubelet 将重新创建 Pod 和证书更新。
    https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal

执行时请使用 ./update-kubeadm-cert.sh all 或者 bash update-kubeadm-cert.sh all ,不要使用 sh update-kubeadm-cert.sh all,因为某些 Linux 发行版 sh 并不是链接到 bash,可能会不兼容。

如果有多个 master 节点,在每个 master 节点都执行一次

./update-kubeadm-cert.sh all

将更新以下证书和 kubeconfig 配置文件

/etc/kubernetes
├── admin.conf
├── controller-manager.conf
├── scheduler.conf
├── kubelet.conf
└── pki
    ├── apiserver.crt
    ├── apiserver-etcd-client.crt
    ├── apiserver-kubelet-client.crt
    ├── front-proxy-client.crt
    └── etcd
        ├── healthcheck-client.crt
        ├── peer.crt
        └── server.crt

更多详情请阅读gitee上的内容。

修改kubeadm源码重新编译方式 

1.  搭建编译环境

# wget  https://studygolang.com/dl/golang/go1.15.5.linux-amd64.tar.gz
# tar -zxvf go1.15.5.linux-amd64.tar.gz -C /usr/local
# vi /etc/profile
# export PATH=$PATH:/usr/local/go/bin
# source /etc/profile

2. 下载源码

# cd /data && git clone https://github.com/kubernetes/kubernetes.git
# git checkout -b remotes/origin/release-1.18 v1.18

3. 修改源码

# 1.14 版本之前

# vim staging/src/k8s.io/client-go/util/cert/cert.go # kubeadm 

 # kubeadm 1.14之后

# vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go 

kubeadm初始化的k8s集群证书续期—— 筑梦之路_第1张图片

  • const effectyear = time.Hour * 24 * 365 * 100   有效期100 年 

  • NotAfter:  time.Now().Add(effectyear).UTC()

  • # make WHAT=cmd/kubeadm GOFLAGS=-v  

  • 将更新后的kubeadm拷贝到指定位置 

  • cp -a _output/bin/kubeadm /root/kubeadm-new

 

4. 更新证书

将 kubeadm 进行替换

cp /usr/bin/kubeadm /usr/bin/kubeadm.old

cp /root/kubeadm-new /usr/bin/kubeadm
chmod a+x /usr/bin/kubeadm

5. 更新证书到各个节点

cp -r /etc/kubernetes/pki /etc/kubernetes/pki.old
cd /etc/kubernetes/pki
kubeadm config view > /tmp/cluster.yaml
kubeadm alpha certs renew all --config=/tmp/cluster.yaml

for i in $(ls *.crt); do echo "===== $i ====="; openssl x509 -in $i -text -noout | grep -A3 'Validity' ; done

上面介绍了两种更新kubeadm方式安装k8s集群的证书。

 

 

你可能感兴趣的:(1024程序员节)