Kubelet 证书如何自动续期

摘要:
Kubernetes集群证书集群分为两种证书:一、用于集群Master、Etcd等通信的证书。

一、问题现象和原因

Kubernetes 日志错误

当 Kubernetes 集群日志中出现certificate has expired or is not yet valid错误信息时,表明证书过期

证书过期原因

  • 服务器时间不对,导致证书过期
  • 确实证书过期了

证书过期,很多同学会很疑惑,我证书明明签署10年有效期或者更久,怎么刚1年就过期了,下面就来解惑。

Kubernetes 集群证书

集群分为两种证书:一、用于集群Master、Etcd等通信的证书。 二、用于集群Kubelet组件证书

Kubernetes 集群中 Kubelet 组件坑

我们在搭建 Kubernetes 集群时,一般只声明用于集群Master、Etcd等通信的证书 为10年或者更久,但未声明集群Kubelet 组件证书Kubelet 组件证书默认有效期为1年。集群运行1年以后就会导致报certificate has expired or is not yet valid错误,导致集群 Node不能于集群 Master正常通信。

二、 解决方法

添加参数

  • 修改kubelet 组件配置,具体添加下面参数

    1 --feature-gates=RotateKubeletServerCertificate=true
    2 --feature-gates=RotateKubeletClientCertificate=true
    3 # 1.8版本以上包含1.8都支持证书更换自动重载,以下版本只能手动重启服务
    4 --rotate-certificates
  • 修改controller-manager 组件配置,具体添加下面参数

  • 1 # 证书有效期为10年
    2 
    3 --experimental-cluster-signing-duration=87600h0m0s
    4 
    5 --feature-gates=RotateKubeletServerCertificate=true

创建自动批准相关 CSR 请求的 ClusterRole

vim tls-instructs-csr.yaml && kubectl apply -f tls-instructs-csr.yaml

  • 1 kind: ClusterRole
    2 apiVersion: rbac.authorization.k8s.io/v1
    3 metadata:
    4 name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
    5 rules:
    6 - apiGroups: ["certificates.k8s.io"]
    7   resources: ["certificatesigningrequests/selfnodeserver"]
    8   verbs: ["create"]
#自动批准 kubelet-bootstrap 用户 TLS bootstrapping 首次申请证书的 CSR 请求
kubectl create clusterrolebinding node-client-auto-approve-csr --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap
#自动批准 system:nodes 组用户更新 kubelet 自身与 apiserver 通讯证书的 CSR 请求
kubectl create clusterrolebinding node-client-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes
#自动批准 system:nodes 组用户更新 kubelet 10250 api 端口证书的 CSR 请求
kubectl create clusterrolebinding node-server-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver --group=system:nodes

重启kube-controller-manager 和 kubelet 服务

1 $ systemctl daemon-reload
2
$ systemctl restart kube-controller-manager.service 3 # 进入到ssl配置目录,删除 kubelet 证书 4 $ rm -f kubelet-client-current.pem kubelet-client-*.pem kubelet.key kubelet.crt 5 6 # 重启启动,启动正常后会颁发有效期10年的ssl证书 7 $ systemctl restart kubelet 8 9 10 # 进入到ssl配置目录,查看证书有效期 11 $ openssl x509 -in kubelet-client-current.pem -noout -text | grep "Not" 12 Not Before: Nov 22 08:46:00 2019 GMT
13 Not After : Nov 19 08:46:00 2029 GMT

免责声明:文章转载自《Kubelet 证书如何自动续期》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发常用的10个Xcode插件降采样,过采样,欠采样,子采样,下采样,上采样下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用 ASP.NET 一般处理程序或 WebService 返回 JSON

今天, 将为大家说明如何在 ASP.NET 中使用一般处理程序或者 WebService 向 javascript 返回 JSON. 本文更新: 2011-12-9: 增加 -:data 的说明. 由于精力有限, 不能在多个博客中保证文章的同步, 可在如下地址查看最新内容, 请谅解: http://code.google.com/p/zsharedcode...

zabbix-agent安装

http://repo.zabbix.com/zabbix/3.2/ #官网下载 ftp://47.104.78.123/zabbix/zabbix-agent/linux/  #提供下载 安装zabbix-agent客户端  首先下载对应系统的版本包 [root@zbx source]# rpm -ivh zabbix-agent-3.2.0-1.el7...

查看k8s中etcd数据

1.查看ETCD集群中运行的ETCD pod [root@master1 ~]# kubectl get pod -n kube-system | grep etcd etcd-master1 1/1 Running 0 61m etcd-master2...

RabbitMQ 集群模式

1、主备模式: 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单。主备模式也称之为Warren模式 主备模式架构图 HaProxy配置 备注: rabbitmq集群节点配置 inter 每隔5秒对mq集群做健康检查, 2次正确证明服务器可用, 2次失败证明服务器不可用,并且配置主备机制 2、远程模式(早期使用较...

.Net Core System.IO.Compression.ZipFile实现Zip格式压缩和Zip格式解压缩

一、安装Nuget包 System.IO.Compression.ZipFile Install-package System.IO.Compression.ZipFile 二、ZipFile 类使用 简单操作方法: ZipFile.CreateFromDirectory()---压缩 ZipFile.ExtractToDirectory()---解压缩...

Dapr可观测性

前言: 前篇-Actor构建块文章对Dapr的Actor构建块进行了解,本篇继续对可观测性 进行了解学习。 一、可观测性 用于获取可观察性的系统信息称为遥测。 它可以分为四大类: 分布式跟踪提供有关分布式业务事务中所涉及服务之间的流量的见解。 度量值可让你深入了解服务的性能及其资源消耗情况。 日志记录可提供代码的执行方式和错误发生的见解。 运行状...