容器化实战培训,联系微信号xilongmao,个人github地址https://github.com/ziyilongwang/k8s-salt

张龙-运维架构师

君子务本,本立而道生

kubernetes kubelet证书到期解决办法

背景

Kubelet 使用证书进行 Kubernetes API 的认证。 默认情况下,这些证书的签发期限为一年,所以不需要太频繁地进行更新。
kubernetes 1.8版本中包含beta特性kubelet证书轮换, 在当前证书即将过期时,将自动生成新的秘钥,并从 Kubernetes API 申请新的证书。 一旦新的证书可用,它将被用于与 Kubernetes API 间的连接认证。

问题说明

kubelet证书默认有效期是一年,这样一年之后我们的node节点就会处于not ready的状态,为了避免这个问题就需要想一个解决方案。

curl -s -L -o /bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod a+x /bin/cfssl-certinfo
 cfssl-certinfo -cert /etc/kubernetes/ssl/kubelet.crt

解决方案一

证书替换

使用admin证书替换kubelet证书。

备份 mkdir  ~/sslback && mv /etc/kubernetes/kubelet.kubeconfig  ~/sslback/
使用admin证书文件替换
cp ~/.kube/config /etc/kubernetes/kubelet.kubeconfig 
systemctl  restart kubelet && systemctl  status  kubelet

重新请求证书

手动签发,在 kubelet 首次启动后,如果用户 Token 没问题,并且 RBAC 也做了相应的设置,那么此时在集群内应该能看到 kubelet 发起的 CSR 请求 ,必须通过后kubernetes 系统才会将该 Node 加入到集群。

在证书过期node删除kubelet相关证书文件
rm -rf /etc/kubernetes/kubelet.kubeconfig
rm -rf /etc/kubernetes/ssl/kubelet.*
systemctl  restart kubelet && systemctl  status  kubelet
自动生成了kubelet kubeconfig 文件和公私钥
查看未授权的CSR请求
kubectl get csr
通过CSR 请求:
kubectl certificate approve csr
查看重新生成的证书文件
ll /etc/kubernetes/ssl/kubelet.*
kubectl  get nodes --show-labels

# 预防方案
kubelet 进程接收 --rotate-certificates 参数,该参数决定 kubelet 在当前使用的 证书即将到期时,是否会自动申请新的证书
kube-controller-manager 进程接收 --cluster-signing-duration 参数 (在 1.19 版本之前为 --experimental-cluster-signing-duration),用来 控制签发证书的有效期限。
# 理解证书轮换配置
当 kubelet 启动时,如被配置为自举(使用--bootstrap-kubeconfig 参数),kubelet 会使用其初始证书连接到 Kubernetes API ,并发送证书签名的请求。 可以通过以下方式查看证书签名请求的状态:
kubectl get csr
最初,来自节点上 kubelet 的证书签名请求处于 Pending 状态。 如果证书签名请求满足特定条件, 控制器管理器会自动批准,此时请求会处于 Approved 状态。 接下来,控制器管理器会签署证书, 证书的有效期限由 --cluster-signing-duration 参数指定,签署的证书会被附加到证书签名请求中。

Kubelet 会从 Kubernetes API 取回签署的证书,并将其写入磁盘,存储位置通过 --cert-dir 参数指定。 然后 kubelet 会使用新的证书连接到 Kubernetes API。

当签署的证书即将到期时,kubelet 会使用 Kubernetes API,发起新的证书签名请求。 同样地,控制器管理器会自动批准证书请求,并将签署的证书附加到证书签名请求中。 Kubelet 会从 Kubernetes API 取回签署的证书,并将其写入磁盘。 然后它会更新与 Kubernetes API 的连接,使用新的证书重新连接到 Kubernetes API。
posted @ 2020-02-23 22:14  紫翼龙王-夜  阅读(1550)  评论(0编辑  收藏  举报
levels of contents