首页 > 其他分享 >手动二进制部署的 kubernetes 集群证书过期处理

手动二进制部署的 kubernetes 集群证书过期处理

时间:2024-06-05 14:33:20浏览次数:28  
标签:kubernetes 证书 二进制 etc apiserver 过期 kubeadm pki

现象

一个二进制部署的 kubernetes 集群,突然发现无法连接到 apiserver,执行 kubectl 时报错:

Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2024-05-31T15:25:02+08:00 is after 2024-05-29T08:07:53Z

解决

排查下来原因是 apiserver 的证书过期,导致 kubectl 及其他的控制面组件均无法连接到 apiserver。所以我们需要更新 apiserver 的证书。由于这是一个比较古老的集群,之前还是完全使用手动二进制部署方式,证书也是手动生成的,维护并不方便。因此我想要通过 kubeadm 来更新集群证书。

通过查阅官方文档 使用 kubeadm 进行证书管理,发现是可行的,只要在生成证书时,将手动生成证书时使用的根证书 ca.crt 和 ca.key 传递给 kubeadm 即可。具体方式如下:

1.备份原有证书

备份是一个好习惯,需要养成。在更新证书之前,先将原有证书备份一份,出现问题时可以快速恢复。

cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak

2.下载 kubeadm

下载和当前集群版本对应的 kubeadm 工具。

3.准备证书生成目录

kubeadm 默认生成证书是在 /etc/kubernetes/pki 下,为了避免出现问题覆盖原有证书,我新建了一个目录/tmp/kubernetes/pki用于证书生成,同时将原 ca 证书文件拷贝到该目录下。

mkdir -p /tmp/kubernetes/pki
cp /etc/kubernetes/pki/ca.crt /tmp/kubernetes/pki
cp /etc/kubernetes/pki/ca.key /tmp/kubernetes/pki

4.准备 kubeadm config 文件

执行 kubeadm 时,需要指定一个配置文件,用来告诉 kubeadm apiserver 的地址、pods/svc 的网段、DNS 后缀等信息,以便在生成证书时,写入 csr 文件中。否则证书更新后可能出现 x509 错误。以下是我在生成时指定的配置文件。

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controlPlaneEndpoint: "172.16.249.85:6443"
networking:
  podSubnet: "xx.xxx.0.0/17"
  serviceSubnet: "xx.xxx.128.0/17"
  dnsDomain: "cluster.local"
certificatesDir: "/tmp/kubernetes/certs"

5.生成新的证书

# 生成所有证书
./kubeadm init phase certs all --config kubeadm-config.yaml

# 实际上这里只需要更新 apiserver 的证书即可,可以指定只生成 apiserver 证书
./kubeadm init phase certs apiserver --config kubeadm-config.yaml

6.更新证书

将生成的 apiserver 的证书拷贝到原有证书目录下。

cp -f /tmp/kubernetes/pki/apiserver.crt /etc/kubernetes/pki
cp -f /tmp/kubernetes/pki/apiserver.key /etc/kubernetes/pki

到此,证书更新已经完成,可以检查下集群是否恢复正常。

标签:kubernetes,证书,二进制,etc,apiserver,过期,kubeadm,pki
From: https://www.cnblogs.com/maoqide/p/18232996

相关文章

  • Kubernetes - 安装方法
    Minikube:对于想要在系统上安装Kubernetes但系统资源有限的用户来说,它是理想的选择。因此,minikube的关键点在于它没有单独的Kubernetes主节点和Kubernetes工作节点架构。在这里,我们将所有Kubernetes组件打包在一起作为一体化设置。单个系统同时充当主节点和工作节点。访......
  • 【Kubernetes】k8s的调度约束(亲和与反亲和)
    一、调度约束list-watch组件Kubernetes是通过List-Watch的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。用户是通过kubectl根据配置文件,向APIServer发送命令,在Node节点上面建立Pod和Container。APIServer经过API调用,权限控制,调......
  • Kubernetes – 架构
    Kubernetes集群主要由称为节点的工作机器和控制平面组成。集群中至少有一个工作节点。KubectlCLI与控制平面通信,控制平面管理工作节点。Kubernetes–集群架构如下图所示,Kubernetes采用客户端-服务器架构,有主节点和工作节点,主节点安装在单个Linux系统上,而节点安装在多个......
  • 二进制部署etcd-三个集群方案
    etcd的二进制部署还有什么问题,想咨询的,加群:582337768。这个群不是我的,但是我在里面,但是还是那句话,我也不懂。三个节点信息node01ip=192.168.1.11node02ip=192.168.1.12node03ip=192.168.1.13创建证书#下载制作证书的二进制文件wget--no-check-certificatehttps://p......
  • C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
    intcountBits(intn){intcount=0;while(n){count+=n&1;//count=count+n&1//n&1的结果只可能是1或者0//如果对应的二进制位上的数字不同,那么n&1的结果就是1,//那么count刚好加一n>>=1;......
  • Java运算符 二进制计算 素数问题 九九乘法表 月份问题 分解质因数 完全数问题 天数计
    1.代码观察inta=6--;System.out.println(a);在Java中,后置递减运算符--只能在整型(int)和长整型(long)变量上使用,而且必须将--放在变量值的后面。因此,6--是非法的,Java编译器会报错。正确代码如下inta=6;a--;System.out.println(a);输出结果为52.代码分析Syst......
  • Kubernetes Calico网络重大故障排查实战
    引言  在当前的Kubernetes实践环境中,Calico作为优选的网络解决方案应用非常广泛,它提供了高效的网络连接和安全策略管理,是构建和维护大规模云基础设施的关键组件,所以其稳定运行至关重要。Calico的简介与原理  Calico是一个纯三层的数据中心网络方案,它提供了高性能......
  • Kubernetes 多集群通信的五种方案
    Kubernetes多集群通信的五种方案原创 oilbeater 我的观点 2024-05-3108:03 北京 听全文oilbeater读完需要8分钟速读仅需3分钟随着企业的业务规模不断扩大,Kubernetes的使用也从单集群逐步扩展到多集群部署。多集群环境下,集群之间的通信成为一个重要的研究课......
  • Kubernetes——YAML文件编写
    目录一、创建Kubernetes对象YAML文件必备字段1.apiVersion2.kind3.metadata4.spec二、YAML格式基本规范1.结构表示2.键值对3.列表(数组)4.字典(映射)5.数据类型6.注释7.多文档支持8.复杂结构9.示例 三、YAML文件编写1.YAML文件的组成2.生成YAML文件框架2.1--d......
  • K8S-集群-二进制安装
    1、环境准备1.1安装规划 服务器准备服务器ip  组件master-1  192.168.177.15  ectd、api-server、controller-master、scheduler、dockernode-1     192.168.177.16etcd、kubelet、kube-proxy、dockernode-1     192.168.177.17e......