k8s1.14.1 集群更新证书过期时间

适用场景#

部分组件证书检查只有1年时间(即不止kubelet证书),但当前未过期

部分老包可能会出现一些master组件证书,或者kubelet证书只有1年的时间,如果检查发现若干证书都是1年,需要按如下步骤update为10/100年证书。

重新编译Kubeadm#

Linux安装Go环境#

说明因为kubernetes-1.14.1依赖go-1.12+,本文档采用1.12.1

编译kubeadm#

1
2
# 下载对应的kubernetes源代码,这里采用 "v1.14.1" 版本
wget https://codeload.github.com/kubernetes/kubernetes/tar.gz/v1.14.1

 修改源代码-cert.go#

  • 文件:staging/src/k8s.io/client-go/util/cert/cert.go
  • 说明:1.14.0版本开始,此文件不需要修改
  • NewSelfSignedCACert 方法,签发以下证书,且默认为10年有效期:
    • front-proxy-ca.crt
    • front-proxy-client.crt
    • ca.crt
    • etcd/ca.crt
    • etcd/peer.crt

 

 修改源代码-pki_helpers.go#

  • 文件:cmd/kubeadm/app/util/pkiutil/pki_helpers.go
  • 以下证书由 NewSignedCert 方法签发,但签发的证书默认只有一年有效期:
    • apiserver.crt
    • apiserver-etcd-client.crt
    • etcd/server.crt
    • etcd/healthcheck-client.crt
    • apiserver-kubelet-client.crt

  编译#

  编译报错#

  替换kubeadm#

重新生成证书#

更新 kube-master (任一)节点证书#

 HA集群其余mater节点证书更新#

  • 在已更新证书的master节点运行脚本,将更新的证书同步到其余master节点。
  • 笔者使用的是单Master集群,该步骤未执行。

 验证所有节点kubelet有无开启证书自动轮换#

   在所有节点验证如下配置

1
2
## 执行如下命令,看输出是否有:rotateCertificates: true
cat /var/lib/kubelet/config.yaml |grep rotateCertificates

   如果有,则不需要添加如下配置直接进行第2.4步即可。

   如果没有,需要编辑/etc/kubernetes/kubelet.env增加,

1
2
--feature-gates=RotateKubeletClientCertificate=true \
--rotate-certificates=true \

 选取一个master节点生成永久不失效token#

首先生成一个新的token,记录这个token后面会用,生成之前需要配置token有效期为forever

  • 使用客户端证书轮换必须保证配置中token为有效的。
  • 图中1画圈的为添加部分最终效果如图:
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vim  /etc/kubernetes/kubeadm-config.yaml
##  添加内容
apiVersion: kubeadm.k8s.io/v1beta1
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  ttl: "0"
  usages:
  - signing
  - authentication
  
##  生成token
kubeadm token create --config /root/kubeadm/kubeadm-config.yaml
##  查看TTL失效为 forever 见图2
kubeadm token list

  图1

   图2

 在所有node节点替换token#

1
2
vim /etc/kubernetes/bootstrap-kubelet.conf
## 修改token的值为新生成的

  图1,修改token后面的部分

    重启kubelet

1
2
systemctl daemon-reload
systemctl restart kubelet

 修改controller-manager自动轮换的证书签署时间#

          在所有master节点操作
编辑/etc/kubernetes/manifests/kube-controller-manager.yaml增加签署时间,默认为8760,这里把签署时间改为10年

1
# 没有就新加<br>- --experimental-cluster-signing-duration=87600h0m0s

        重启kubelet和controller-manager
1
2
3
4
5
6
7
systemctl daemon-reload
systemctl restart kubelet
  
  
## 检查controller-manager有无重启,没有则手动delete或者docker操作下触发重启,操作如下:
kubectl get po -n kube-system|grep controller-manager
kubectl delete po {查询到的所有controller-manager pod name} -n kube-system

 备份并让controller-manager重新生成kubelet证书#

         在所有节点操作

1
2
3
cd /var/lib/kubelet/pki && mkdir bak-kubelet-client
mv kubelet-client-* bak-kubelet-client/
systemctl restart kubelet

验证#

  验证k8s集群状态均为Ready#

1
2
3
4
5
[root@k8s-Master kubeadm]# kubectl get  node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   20d   v1.14.1
k8s-node1    Ready    <none>   20d   v1.14.1
k8s-node2    Ready    <none>   20d   v1.14.1

  验证所有证书过期时间#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@k8s-Master kubeadm]# for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do  echo "crt: $i" &&  openssl x509 -in $i -noout -text|grep Not; done
crt: /etc/kubernetes/pki/ca.crt
            Not Before: Nov  1 14:03:05 2022 GMT
            Not After : Oct 29 14:03:05 2032 GMT
crt: /etc/kubernetes/pki/apiserver.crt
            Not Before: Nov  1 14:03:05 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
crt: /etc/kubernetes/pki/apiserver-kubelet-client.crt
            Not Before: Nov  1 14:03:05 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
crt: /etc/kubernetes/pki/front-proxy-ca.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Oct 29 14:03:06 2032 GMT
crt: /etc/kubernetes/pki/front-proxy-client.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
crt: /etc/kubernetes/pki/etcd/ca.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Oct 29 14:03:06 2032 GMT
crt: /etc/kubernetes/pki/etcd/server.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
crt: /etc/kubernetes/pki/etcd/peer.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
crt: /etc/kubernetes/pki/etcd/healthcheck-client.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
crt: /etc/kubernetes/pki/apiserver-etcd-client.crt
            Not Before: Nov  1 14:03:06 2022 GMT
            Not After : Nov 19 07:22:08 2032 GMT
posted @   屌丝逆袭记  阅读(466)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示
主题色彩