kubernetes 证书续签

kubernetes 证书续签

K8s证书一般分为两套:

K8s组件(apiserver)和 Etcd

按角色来分:

管理节点 和 工作节点

管理节点:

如果使用kubeadm 部署则自动生成 。

如果是二进制部署一般由cfss或者 openssl生成。

工作节点:

主要是指kubelet 连接apiserver 所需要的客户端证书,这个证书由controller-manager 组件自动颁发,默认是一年,如果到期,kubelet将无法使用过期的证书连接apiserver,从而导致无法正常工作,日志会给出证书过期错误(x509: certificate has expired or is not yet valid)

kubernetes 证书续签

下面按照两种部署方式来阐述 证书的续签

kubeadm 部署方式续签:

#先看 下kubeadm 客户端证书过期时间:

kubeadm alpha certs check-expiration

kubernetes 证书续签

– 管理节点:[ – kube-apiserver (127.0.0.1:8080 , IP:6443)

– kube-controller-manager

– kube-scheduler]

kubeadm管理节点续签:

kubeadm alpha renew all 或者 升级k8s 版本 kubeadm upgrade 官方推荐,一年之内升级一次集群版本,还有个民间方法:修改源代码,再编译生成kubeadm

– 工作节点: [ – kubelet

– kube-proxy]

kubeadm工作节点续签:

  • 1、配置kube-controller-manager 组件,从新为kubelet客户端证书颁发(如果已配置请忽略)
  • 2、开启kubelet 证书轮转(如果已配置请忽略)
  • 3、修改node节点时间,重启kubelet

(1)、配置kube-controller-manager 组件

[root@master-1 /]vim /etc/kubernetes/manifests/kube-controller-manager.yaml

...

rotateCertificates: true

添加上述两个参数:

• experimental-cluster-signing-duration=87600h0m0s #为kubelet客户端证书颁发有效期10年

• feature-gates=RotateKubeletServerCertificate=true #启用server证书颁发

配置完成后,重建pod使之生效:

[root@master-1 /] kubectl delete pod kube-controller-manager-k8s-master -n kube-system

(2)、开启kubelet 证书轮转

默认kubelet证书轮转已启用:

[root@node-1 /]vim /var/lib/kubelet/config.yaml

...

rotateCertificates: true

(3)、修改node节点时间,重启kubelet

找一台node 节点测试,先查看现有客户端证书有效期:

[root@node-1 /]cd /var/lib/kubelet/pki

#需要有openssl 命令,没有安装openssl 即可

[root@node-1 pki ]# openssl x509 -in kubelet-client-current.pem -noout -dates

notBefore=May 25 09:01:24 2020 GMT

notAfter=May 25 09:01:24 2021 GMT

#提示2021年5月25号到期

为了方便测试我们,修改服务器时间,模拟证书即将到期:

[root@node-1 pki ]# date -s “2021-5-20” #切记不要设置到期日

#重启kubelet 组件,他会验证当前证书有效期,并自动从kube-controller-manager 上 进行续签

[root@node-1 pki ]# systemctl restart kubelet

再查看证书有效期,可以看到已经是十年:

[root@node-1 pki ]# openssl x509 -in kubelet-client-current.pem -noout -dates

notBefore=Aug 8 15:44:55 2020 GMT

notAfter=May 23 09:05:30 2030 GMT

二进制部署方式续签:

– 管理节点:[ – kube-apiserver (127.0.0.1:8080 , IP:6443)

– kube-controller-manager

– kube-scheduler]

二进制部署管理节点续签:

证书自管理,前期部署集群时先制定好过期时间

– 工作节点: [ – kubelet

– kube-proxy]

二进制部署工作节点续签:

证书自管理,前期部署集群时先制定好过期时间

#查看下当前node节点的到期时间

[root@master-1 ssl]# openssl x509 -in kubelet-client-current.pem -noout -dates

notBefore=Dec 27 12:19:57 2020 GMT

notAfter=Dec 26 12:13:00 2025 GMT

[root@master-1 cfg]# cat kube-controller-manager.conf

KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false 
--v=2 
--log-dir=/opt/kubernetes/logs 
--leader-elect=true 
--master=127.0.0.1:8080 
--bind-address=127.0.0.1 
--allocate-node-cidrs=true 
--cluster-cidr=10.244.0.0/16 
--service-cluster-ip-range=10.0.0.0/24 
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem 
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem 
--root-ca-file=/opt/kubernetes/ssl/ca.pem 
--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem 
--experimental-cluster-signing-duration=87600h0m0s"

#看到配置文件里定义的也是10年,但是只有五年,当我们在使用cfssl 自建CA 机构时,设置的过期时间为10年,但是cfssl 工具有限制,最多只能签发5年证书,如果想要使用5年及以上,可以使用openssl 自签发证书,签发个100 年也没问题。

但是看了下 kube-apiserver , etcd 的证书有效期是10年 ,但是 kubelet 许可的证书只有5 年 。而且都是用的cfssl 工具去签发的,有待考证

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/7010

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年2月3日 下午7:43
下一篇 2023年2月3日 下午7:43

相关推荐

  • Centos7开机进入救援模式的解决方法

    问题描述 Centos启动时提示如下错误信息: 解决办法 1、查询挂载 若提示如下信息: 则使用一下命令

    2022年11月26日
    20200
  • Centos7.6下SSH服务默认端口修改

    一般服务端的ssh端口默认是22,我们可以通过修改服务端的ssh配置文件,来修改ssh访问服务端的端口号 1、连接linux服务器 2、用编辑器(Vim,Emacs,Nano…)打开服务器上的/etc/ssh/sshd_config文件 vi /etc/ssh/sshd_config 2、修改对应位置的端口为你想要端口,修改完成后先按ESC键,再按shift…

    2022年6月8日
    29700
  • MySQL5.7主从同步、读写分离

    MySQL5.7主从同步、读写分离 安装MySQL5.7 下载rpm包 安装 启动mysql查看密码 登录mysql 主从同步 关闭每台服务器的防火墙和selinux 主从服务器时间同步 主服务器使用本地时钟源 修改配置文件 开启ntpd 从服务器同步主服务器时间 安装ntp工具 启动ntp和主服务器进行时间同步 主服务器mysql配置 修改配置文件 重启m…

    2022年7月31日
    20900
  • Git:合并多个commit 的高级技巧

    前言 在我们的日常项目开发中,git commit -m 无疑是使用最频繁的指令,这也造成了大量的commit 在我们的分支上。这样常常会带来分支过长、版本过多的问题。 正文 想要解决这个问题,我们通常会对commit 进行合并。 当我们发现两个commit 或多个commit 存在很强的关联性、并且几个commit 加起来也可以成为一个完整的描述的时候,就…

    2023年3月15日
    2600
  • Docker常用命令

    列出所有容器ID 查看所有运行或者不运行容器 停止所有的container(容器),这样才能够删除其中的images: 如果想要删除所有container(容器)的话再加一个指令: 查看当前有些什么images 删除images(镜像),通过image的id来指定删除谁 想要删除untagged images,也就是那些id为的image的话可以用 要删除全…

    2022年11月19日
    9300

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信