前言

kubernetes 版本为 v1.16.3

使用 kubelet get node 后报错: x509: certificate has expired or is not yet valid ,提示证书过期。

解决

检查证书何时过期

kubeadm alpha certs check-expiration

CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
admin.conf Mar 27, 2024 07:41 UTC <invalid> no
apiserver Mar 27, 2024 07:41 UTC <invalid> no
apiserver-etcd-client Mar 27, 2024 07:41 UTC <invalid> no
apiserver-kubelet-client Mar 27, 2024 07:41 UTC <invalid> no
controller-manager.conf Mar 27, 2024 07:41 UTC <invalid> no
etcd-healthcheck-client Mar 27, 2024 07:41 UTC <invalid> no
etcd-peer Mar 27, 2024 07:41 UTC <invalid> no
etcd-server Mar 27, 2024 07:41 UTC <invalid> no
front-proxy-client Mar 27, 2024 07:41 UTC <invalid> no
scheduler.conf Mar 27, 2024 07:41 UTC <invalid> no
# 备份 kubernetes配置
cp -r /etc/kubernetes /etc/kubernetes_bak

kubeadm alpha certs renew:可以使用 all 子命令来续订所有 Kubernetes 证书,也可以选择性地续订部分证书 kubeadm alpha certs renew --help

  • all:更新所有可用证书,一般可以直接使用这个更新所有。
  • apiserver:单独更新服务 Kubernetes API 的证书,相当于针对单个组件进行生成。
  • apiserver-etcd-client:更新 apiserver 用来访问 etcd 的证书。
  • 其它都类似
kubeadm alpha certs renew all

certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed

此时所有证书都已重新生成,在 /etc/kubernetes/pki 下。/etc/kubernetes/admin.conf/etc/kubernetes/controller-manager.conf/etc/kubernetes/scheduler.conf 也已经更新了。

再次查看证书时间就延续了一年:

 kubeadm alpha certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
admin.conf Mar 27, 2025 10:23 UTC 364d no
apiserver Mar 27, 2025 10:23 UTC 364d no
apiserver-etcd-client Mar 27, 2025 10:23 UTC 364d no
apiserver-kubelet-client Mar 27, 2025 10:23 UTC 364d no
controller-manager.conf Mar 27, 2025 10:23 UTC 364d no
etcd-healthcheck-client Mar 27, 2025 10:23 UTC 364d no
etcd-peer Mar 27, 2025 10:23 UTC 364d no
etcd-server Mar 27, 2025 10:23 UTC 364d no
front-proxy-client Mar 27, 2025 10:23 UTC 364d no
scheduler.conf Mar 27, 2025 10:23 UTC 364d no

如果容器服务使用的是 Docker,为了让证书生效,可以使用以下命令对涉及到证书使用的几个服务进行重启:

docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' | xargs docker restart

或者重启 docker服务:systemctl restart docker

没有更新的文件就只有 /etc/kubernetes/kubelet.conf 了,因为 kubeadmkubelet 配置为自动更新证书。 轮换的证书位于目录 /var/lib/kubelet/pki。 要修复过期的 kubelet 客户端证书,请参阅 kubelet 客户端证书轮换失败。当签署的证书即将到期时,kubelet 会使用 Kubernetes API,自动发起新的证书签名请求。 该请求会发生在证书的有效时间剩下 30% 到 10% 之间的任意时间点。 同样地,控制器管理器会自动批准证书请求,并将签署的证书附加到证书签名请求中。 Kubelet 会从 Kubernetes API 取回签署的证书,并将其写入磁盘。 然后它会更新与 Kubernetes API 的连接,使用新的证书重新连接到 Kubernetes API

在通过 kubeadm init 创建的节点上,在 kubeadm 1.17 版本之前有一个 缺陷,该缺陷使得你必须手动修改 /etc/kubernetes/kubelet.conf 文件的内容。 kubeadm init 操作结束之后,你必须更新 kubelet.conf 文件 将 client-certificate-dataclient-key-data 改为如下所示的内容 以便使用轮换后的 kubelet 客户端证书:

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

如果是 1.17 以前的版本,也可以手动调用 kubeadm init phase kubeconfig kubelet 进行证书轮换。需要先把 /etc/kubernetes/kubelet.conf 删掉,使用 kubeadm init phase kubeconfig kubelet 进行重新生成。之后在 systemctl restart kubelet 进行重启。

node节点

这时候把 master 节点上的 $HOME/.kube/config,复制到 node 节点的 $HOME/.kube/config

export KUBECONFIG=$HOME/.kube/config

这样 所有节点都可以正常使用 kubectl

k8s v1.19版本之后,自签证书过期x509: certificate has expired or is not yet valid

说明:

certs renew 使用现有的证书作为属性(Common Name、Organization、SAN 等)的权威来源, 而不是 kubeadm-config ConfigMap。强烈建议使它们保持同步。

kubeadm certs renew 可以更新任何特定的证书,或者使用子命令 all 更新所有的证书,如下所示:

kubeadm certs renew all

k8s v1.16.3,Unable to connect to the server: x509: certificate has expired or is not yet valid的更多相关文章

  1. Unable to connect to the server: x509: certificate signed by unknown authority

    0x00 Problem 在使用二进制搭建 k8s 集群的过程中,使用 kubectl get 等操作时始终显示 x509: certificate signed by unknown authori ...

  2. lvs+keepalived部署k8s v1.16.4高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

  3. Centos7.6部署k8s v1.16.4高可用集群(主备模式)

    一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...

  4. Centos7安装Kubernetes k8s v1.16.0 国内环境

    一. 为什么是k8s v1.16.0? 最新版的v1.16.2试过了,一直无法安装完成,安装到kubeadm init那一步执行后,报了很多错,如:node xxx not found等.centos ...

  5. 解决loadrunner录制时 Request Connection: Remote Server @ 0.0.0.0:80 (Service=?) NOT PROXIED! (REASON: Unable to connect to remote server: rc = -1 , le = 0)问题

    环境为win7+ie8+loadrunner11,录制脚本回放查看Recoding log 出现如下错误:[Net An. Error    ( 7f8:1340)] Request Connecti ...

  6. org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within

    org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeo ...

  7. Unable to connect to zookeeper server within timeout: 5000

    错误 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error crea ...

  8. CentOS7图形界面启动报错unable to connect to X server

    以前还可以正常启动图形界面,这次启动失败,报错unable to connect to X server 使用的是oracle用户,因为我是在oracle用户下创建的oracle数据库等 解决办法: ...

  9. Message Unable to connect to SQL Server '(local)'

    最近在sql server 加了一些job,但是run job的时候发生了一下错误: ssage Unable to connect to SQL Server '(local)' 问题根源:调用 T ...

  10. Unable to connect to web server 'IIS Express'(无法连接到Web服务器“IIS Express”)的解决方式-Jexus Manager

    在运行微软示例工程eShopOnWeb时候, 在经过一段时间再运行启动报Error "Unable to connect to web server 'IIS Express'"  ...

随机推荐

  1. 混合云网络过于复杂?ENS给你全局一张网的极致体验

    本文分享自华为云社区<[华为云Stack][大架光临]第19期:混合云网络过于复杂?ENS给你全局一张网的极致体验>,作者:华为云Stack ENS研发团队. 政企IT的混合形态 经过几十 ...

  2. 从异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }说开去

    从异常{ 无法将 匿名方法 转换为类型"System.Delegate",因为它不是委托类型 }说开去. 查看如下代码: this.Invoke(delegate { Messag ...

  3. 意外之喜——黑夜 CrossFire!!!

    在日常逛L站时,偶然发现了"友链"功能,机缘巧合下进入了specialhua的博客,又被吸引着点进了其中一篇博客,于是便通过specialhua的博客看到了黑夜的这篇文章,感觉就像 ...

  4. DVWA靶场File Upload(文件上传) 漏洞所有级别通关教程及源码审计

    文件上传 文件上传漏洞是由于对上传文件的内.类型没有做严格的过滤.检查,使得攻击者可以通过上传木马文件获取服务器的webshell文件 low 上传一个php文件,上传成功,并且可以在WWW\DVWA ...

  5. RestTemplate 详解

    RestTemplate 简介 RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求.POST 请求.PUT ...

  6. java加密算法入门(四)-加密算法汇总

    如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...

  7. MySQL5.7x 主从复制

    原文链接:https://blog.liuzijian.com/post/9f8ede8e-26de-75d6-6347.html 在MySQL中,主从复制(Master-Slave Replicat ...

  8. 变量-python

    变量-python 1. 变量的定义 变量是存储数据的地方,在程序运行时,变量的值可以改变.变量的定义格式如下: 变量名 = 数据 例如: a = 10 b = "hello" c ...

  9. 从倒水问题到盛最多水的容器:一道经典的双指针应用题|LeetCode 11 盛最多水的容器

    LeetCode 11 盛最多水的容器 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你有没有遇到过这样的场景:家里要举办派对,需要准备一个大 ...

  10. 使用CMD命令导出和导入IIS站点配置信息

    1.导出导入某个站点 1.1.导出应用程序池和站点 1.1.1.导出某个应用程序池配置 具体导出命令如下所示: %windir%\system32\inetsrv\appcmd list apppoo ...