k8s证书过期更换

本文介绍了一个用于更新Kubernetes集群证书的脚本,包括如何更新所有证书、仅更新etcd证书或仅更新master证书的方法。此外还提供了证书更新失败后的回滚方案及不同Kubernetes版本的证书管理命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看证书过期时间:
(1)查看具体证书:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

(2)查看所有证书:

for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`;do openssl x509 -in $item -text -noout| grep Not;echo ======================$item===================;done

脚本下载地址:
https://github.com/lsy0920/update-kube-cert.git
https://github.com/yuyicai/update-kube-cert.git

注意

该脚本用于处理已过期或者即将过期的kubernetes集群证书

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

该脚本只处理master节点上的证书:kubeadm默认配置了kubelet证书自动更新,node节点kubelet.conf所指向的证书会自动更新

小于v1.17版本的master初始化节点(执行kubeadm init的节点) kubelet.conf里的证书并不会自动更新,这算是一个bug,该脚本会一并处理更新master节点的kubelet.conf所包含的证书

1. 使用说明

小于等于v1.9版本,etcd默认是不使用TLS连接,没有etcd相关证书,只需要更新master证书即可

大于等于v1.10版本,etcd默认开启TLS,需要更新etcd证书和master证书

该脚本适用于所有k8s版本集群证书更新,但大于等于v1.15版本建议使用kubeadm命令更新

该脚本仅需要在master和etcd节点执行,无需在node节点执行

1.1. 拉取脚本

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

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

1.2. 同时更新etcd证书和master证书

如果master和etcd在同一个节点,执行以下命令更新证书全部etcd证书和master证书

如果有多个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

1.3. 只更新etcd证书

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

./update-kubeadm-cert.sh etcd

将更新以下etcd证书

/etc/kubernetes
 └── pki
  ├── apiserver-etcd-client.crt
  └── etcd
      ├── healthcheck-client.crt
      ├── peer.crt
      └── server.crt

1.4. 只更新master证书

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

./update-kubeadm-cert.sh master

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

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

2. 证书更新失败回滚

脚本会自动备份/etc/kubernetes目录到/etc/kubernetes.old-$(date +%Y%m%d)目录(备份目录名录示例:kubernetes.old-20200325)

若更新证书失败需要回滚,手动将份/etc/kubernetes.old-$(date +%Y%m%d)目录覆盖/etc/kubernetes目录

3. kubeadm 证书相关命令发展

  • v1.8版开始提供了证书生成命令kubeadm alpha phase certs <cert_name>
  • v1.13版开始证书生成命令改为kubeadm init phase certs <cert_name>
  • v1.15版增加了证书更新命令kubeadm alpha certs renew <cert_name>(这个命令与上面两个区别是:上面两个是生成证书,这个是更新证书),v1.15版之后建议使用kubeadm alpha certs renew <cert_name>来更新证书

4. 关于大于等于v1.15版本

大于等于v1.15的版本建议直接使用kubeadm alpha certs renew <cert_name>来更新证书有效期,更新后延长一年

小坑:

kubeadm alpha certs renew 并不会更新kubelet证书(kubelet.conf文件里面写的客户端证书),因为kubelet证书是默认开启自动更新的

但是在执行kubeadm init的master节点的kubelet.conf文件里面的证书是以base64编码写死在conf文件的(和controller-manager.conf一样),在用kubeadm命令更新master证书时需要手动将kubelet.conf文件的 client-certificate-dataclient-key-data 该为:

client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

这个问题在v1.17版得到了解决https://github.com/kubernetes/kubeadm/issues/1753

5. 执行过程

脚本下载地址:
https://github.com/lsy0920/update-kube-cert.git
https://github.com/yuyicai/update-kube-cert.git

#master节点
#下载脚本文件
git clone https://github.com/yuyicai/update-kube-cert.git

#脚本文件设置权限
chmod 755 update-kubeadm-cert.sh

#同时更新etcd证书和master证书
./update-kubeadm-cert.sh all

转载自(https://github.com/yuyicai/update-kube-cert

解决k8s证书过期的问题,首先需要确认证书过期时间。可以使用命令"kubeadm alpha certs check-expiration"来查看证书过期时间。如果证书已经过期,可以使用以下方法来延长证书的有效期。 1. 使用"kubeadm alpha phase"中的certs和kubeconfig命令来解决证书过期问题。同时,可以配合kubelet证书的自动轮换机制来解决此问题。具体的操作步骤可以在网上搜索到。 请注意,以下延长证书有效期的方法适用于kubernetes 1.14、1.15、1.16、1.17和1.18版本。以下是操作步骤: 1. 首先,备份当前的证书kubeconfig文件,以防止意外情况发生。 2. 生成新的证书和密钥文件。 3. 使用新的证书和密钥文件替换原始的证书和密钥文件。 4. 更新kubeconfig文件中的证书和密钥路径。 5. 重新启动相关的k8s组件,以使新的证书生效。 请根据你的具体情况和kubernetes版本,参考相应的文档或教程来执行上述操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [K8S 证书过期解决办法](https://blog.youkuaiyun.com/erhaiou2008/article/details/124168680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值