k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式

这篇具有很好参考价值的文章主要介绍了k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式

大纲

  • 基础概念
  • 证书替换测试
  • 使用kubeadm alpha certs renew all 更新证书
  • 重启所有组件和kubelet.service
  • 生成kubelet-client-current.pem证书
  • 测试替换后集群是否正常工作

基础概念

本次测试使用的k8s集群使用 kubeadm创建单master节点 并且 版本为17 操作系统ubuntu18

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

k8s集群之间的访问会使用到证书,如果使用kubeadm搭建的集群,默认CA证书的有效期为10年,其他组件访问证书的有效期为1年。如果过期后没有更新证书可能会引起k8s集群的不可用

例如使用 kubeadm certs check-expiration命令可以查看当前集群证书情况

注意k8s-17 certs命令还是实验性功能 需要 指定alpha 
kubeadm alpha certs check-expiration

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

证书替换的整体流程如下

  • 1 使用 kubeadm alpha certs renew all 更新证书
  • 2 使用 重启k8s组件
  • 3 更新节点kubelet-client-current.pem证书
  • 4 重启kubelet.service

注意测试前最好先备份相关证书和配置

  • 1 master节点 /etc/kubernetes文件夹中的 admin.conf ,controller-manager.conf, kubelet.conf ,scheduler.conf 和 pki文件夹中所有证书

  • 2 node节点 /etc/kubernetes文件夹的 kubelet.conf 和 pki文件夹中所有证书

证书替换测试

使用 kubeadm alpha certs check-expiration 查看当前证书情况

kubeadm alpha certs check-expiration

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

手动修改系统时间让证书过期注意需要先关闭ntp (所有节点都执行此命令包括master节点)

timedatectl set-ntp false  关闭ntp  (timedatectl set-ntp true 开启ntp)
date -s 04/27/2024         修改系统时间 2024年4月27日

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

执行kubectl 命令可以看到提示证书过期

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

step1 使用kubeadm alpha certs renew all 更新证书

使用 kubeadm alpha certs renew all 可以更新所有组件证书

kubeadm alpha certs renew all 

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

执行kubectl get nodes 访问成功

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

所以 kubeadm alpha certs renew all执行完成后 已经替换了 /root/.kube/config 文件中的证书 进入查看 确实已经自动更新了 (如果没有更新需要手动将admin.conf 替换 config

cat /root/.kube/config

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

echo LS0tLS1CRUdJ省略   | base64 -d > c.crt
cfssl certinfo -cert c.crt

证书时间确实更新了1年

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

关于cfssl的使用可以参考 《使用cfssl为程序添加https证书》

此时执行部署一个nginx pods 发现无法部署

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

step2 重启组件

上一步中可以看到kubectl 命令(查询操作)可以使用了,但是部署一个pod确失败了(没有任何响应)!

原因如下:
kubeadm alpha certs renew all命令更新了客户端证书即/root/.kube/config中的证书
访问k8s-apiserver(查询操作)可以通过验证(因为根证书没有变,客户端证书可以通过验证)
但是k8s组件还未重启,内部调用使用的证书还是老证书,所以需要重启k8s组件

关于 /root/.kube/config可以参考 《快速上手k8s权限管理 立即掌握User Role RoleBinding kubeconfig 实战教程》

进入master节点的 /etc/kubernetes/manifests/ 文件夹 稍微修改一下所有组件的配置文件,(配置文件修改后会自动重启组件

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

例如修改下timeoutSeconds

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

然后再重启所有节点的 kubelet.service

systemctl restart kubelet.service
journalctl -fu kubelet

重启后发现kubelet 客户端证书过期

1518 bootstrap.go:265] part of the existing bootstrap client certificate is expired: 2024-02-23 08:13:25 +0000 UTC
1518 server.go:273] failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

查看api-server日志也可以看到TLS 握手失败

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

I0427 00:51:31.877435       1 log.go:172] http: TLS handshake error from 192.168.0.124:56108: EOF
I0427 00:52:22.075177       1 log.go:172] http: TLS handshake error from 192.168.0.124:42214: EOF
I0427 00:53:45.493054       1 log.go:172] http: TLS handshake error from 192.168.0.160:35706: EOF

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

进入各个节点的 /var/lib/kubelet/pki文件夹 查看kubelet的证书 发现还是老证书 由此可以证明 kubeadm alpha certs renew all命令不会更新kubelet证书

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

所以此时k8s集群还是不可用状态

这里可以使用admin.conf中的证书信息替换 所有节点的中kubelet.conf 证书信息

即admin.conf中的client-certificate-data 与 client-key-data  
替换kubelet.conf  client-certificate 与 client-key

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

kubelet.conf 原始配置

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

kubelet.conf 替换后

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

所有节点替换完成后 可以看到 /var/lib/kubelet/pki 文件夹下生成了新的kubelet-client证书

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

此时再恢复kubelet.conf 中的原始配置即可 (不恢复也可以正常使用)

step3 测试使用k8s集群

注意由于改了本地时间所以 使用docker pull 镜像时会出现证书过期 (这个证书和k8s证书无关)

Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

所以要测试k8s集群是否正常使用只有使用节点本地存在的镜像

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

创建一个dp.yaml 部署文件 内容如下

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

注意:imagePullPolicy: Never 镜像拉取策略使用Never 不拉取镜像使用本地镜像

测试部署Pod 访问接口成功

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

创建service

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器

外网访问Pod 成功

k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式,docker+k8s,kubernetes,docker,容器文章来源地址https://www.toymoban.com/news/detail-520780.html

到了这里,关于k8s- kubernetes证书过期替换之kubeadm命令 certs renew all方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s集群证书过期后,如何更新k8s证书

    对于版本 1.21.5,这是我的解决方案: ssh 到主节点,然后在步骤 2 中检查证书。 运行这个命令: kubeadm certs check-expiration 并看到昨天所有的都过期了。 所有现有证书的备份: 要全部更新,请运行以下命令: kubeadm certs renew all Done renewing certificates. You must restart the kube-apiserver

    2024年02月11日
    浏览(35)
  • K8S(kubeadm版)更新证书

            使用kubeadm方式安装的kubernetes集群各个组件所使用的证书期限为1年,CA 根证书是 10 年。到期后,证书失效,kubectl命令无法使用,在使用kubectl命令时,报错无法连接到localhost:8080,错误大概为:“certificate has expired or is not yet valid”。 来自弟弟的忠告,尽量别过期

    2024年04月16日
    浏览(27)
  • k8s集群证书过期解决

    问题现象 K8S集群证书过期后,会导无法创建Pod,通过kubectl get nodes也无法获取信息,甚至dashboard也无法访问。 执行命令发现报错: Unable to connect to the server: x509: certificate has expired or is not yet valid 查看K8S的日志: Part of the existing bootstrap client certificate is expired: 2023-08-29 02:29:04 +0

    2024年02月11日
    浏览(33)
  • 解决K8s证书过期问题

    K8s出现的问题:证书过期 参考K8s官方文档 查看运行日志: 关键错误:part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired: 2022-10-12 06:54:16 +0000 UTC 查看证书期限: 解决方式: 对过期证书进行备份,并删除旧的证书 重新生成证书 备份旧的配置文件 重新生成

    2024年02月16日
    浏览(47)
  • kubeadm搭建kubernetes(k8s)

    节点 IP 安装软件 master(2C/4G,cpu核心数要求大于2) 192.168.174.15 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.174.18 docker、kubeadm、kubelet、kubectl、flannel node02(2C/2G) 192.168.174.19 docker、kubeadm、kubelet、kubectl、flannel Harbor节点(hub.exo.com) 192.168.174.16 docker、docker-compose、

    2024年02月09日
    浏览(32)
  • Kubernetes实战(九)-kubeadm安装k8s集群

    ip hostname 10.220.43.203 ops-master-1 10.220.43.204 ops-worker-1 10.220.43.205 ops-worker-2 master/与worker主机均需要设置。 master/worker均安装 docker二进制安装参考:docker部署及常用命令-CSDN博客  为kubernetes添加国内阿里云YUM软件源 。 如果k8s版本低于1.24版,可以忽略此步骤。 由于1.24版本不能直接

    2024年02月04日
    浏览(35)
  • 使用kubeadm安装和设置Kubernetes(k8s)

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: 使用kubeadm方式搭建K8s集群主要分为以下几步 准备三台虚拟机,同时安装操作系统CentOS 7.x 对三个安装之后的操作系统进行初始化操作 在三个节点安装 dock

    2024年02月12日
    浏览(34)
  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要针对上篇文章的单 master 节点的 K8s 集群上搭建多 master 节点集群 和 LB 负载均衡服务器。 Kubernetes(K8S)集群搭建基础入门教程 虚拟机 IP 地址: IP 操作系统 主机名称 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    浏览(39)
  • k8s(kubernetes)的两种部署方式(kubeadm)

    在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点禁止swap分区 角色 IP master 192.168.1.11 node1 192.16

    2024年02月22日
    浏览(43)
  • Kubernetes技术--使用kubeadm快速部署一个K8s集群

    这里我们配置一个 单master集群 。( 一个Master节点,多个Node节点 ) 1.硬件环境准备 一台或多台机器,操作系统 CentOS7.x-86_x64 。这里我们使用安装了CentOS7的三台虚拟机 硬件配置 : 2GB或更多RAM , 2个CPU或更多CPU , 硬盘30GB或更多 2.主机名称和IP地址规划 3. 初始化准备工作 (1).关

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包