蛮子哥 蛮子哥
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

蛮子哥

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
    • jenkins脚本式流水线部署k8s项目实例一
    • helm v3安装并创建例子
    • 使用helm将本地部署文件上传到harbor chart上
    • helm公共仓库创建
    • helm适应minio作为私有仓库
    • helm release使用说明
    • kubernetes核心概念
    • kubectl使用技巧
    • kubernetes卷的几种类型
    • kubernetes安全框架
    • 云原生-什么是HPA和PDB、VPA
    • k8s部署php项目示例
    • 配置kubeconfig 文件访问 Kubernetes 集群
    • configmap配置的几种方式
    • k8s配置go服务
    • k8s部署java项目
    • kubernetes部署prometheus监控
    • kubernetes部署elk日志系统
    • kubernetes环境devops流水线
    • kubernetes高阶技能必备的工具
    • deployment中使用configmap、secret的方式
    • 业务pod 飘移pending排查分析
    • debian 12安装kubernetes
    • istio入门
    • kubernetes证书续签到100年
  • elk

  • jenkins

  • GitLabCI_CD

  • AI编程

  • 提示词

  • 专题
  • Kubernetes笔记
蛮子哥
2026-05-04

kubernetes证书续签到100年

一、确认使用的K8S版本


kubectl version
kubeadm version
kubectl get nodes
1
2
3
4

二、查询集群的证书时效

2.1、标准路径证书

kubeadm certs check-expiration
1

2.2、检查 K8s 主 PKI 目录证书

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

2.3、检查 etcd 证书

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

三、根据查询到的版本去获取对应版本的源码


https://github.com/kubernetes/kubernetes/tree/v1.32.13
1
2

3.1、确认需要go的版本并安装对应的版本

https://github.com/kubernetes/kubernetes/blob/release-1.32/.go-version

执行:https://go.dev/dl/go1.24.13.linux-amd64.tar.gz

解压并安装

tar -zxvf go1.24.13.linux-amd64.tar.gz -C /usr/local/
ll -l /usr/local/
1
2

配置环境变量:


tee -a /etc/profile <<-'EOF'
#go setting
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin
EOF
1
2
3
4
5
6
7

变量立即生效:

source /etc/profile
1

验证是否安装成功

go env
echo $GOROOT
echo $GOPATH
go version
1
2
3
4

3.2、克隆下载源码仓库并切换到对应的版本

我直接克隆整个仓库,是方便后面制作任意版本的证书。随时可以更新和切换任意版本,进行证书续签。


# 下载主版本
git clone https://github.com/kubernetes/kubernetes.git
# 拉取所有远程标签
git fetch --tags
# 切换到 v1.35.1 版本
git checkout v1.35.1
1
2
3
4
5
6
7

3.3、 验证是否切换成功


# 验证是否切换成功
git status
git describe --tags
1
2
3
4

四、证书有效期修改

4.1、找到证书底层工具类

staging/src/k8s.io/client-go/util/cert/cert.go
1

输入 /NotAfter 查找,默认是10年,修改为100年。(CA 根证书)

 vim staging/src/k8s.io/client-go/util/cert/cert.go
NotAfter:              now.Add(duration365d * 100).UTC(),

1
2
3

4.2、找到常量定义文件

cmd/kubeadm/app/constants/constants.go
1

在全局配置类****找到:普通证书默认1年(apiserver、etcd 等)

CertificateValidityPeriod = time.Hour * 24 * 365
1

输入 CertificateValidityPeriod 查找,后面加上*100,改为100年。

在全局配置类****找到:CA 根证书 默认10年

CACertificateValidityPeriod = time.Hour * 24 * 365 * 10

1
2

输入 /CACertificateValidityPeriod 查找,后面修改*100,改为100年

vim cmd/kubeadm/app/constants/constants.go
1

最终修改结果:

// CertificateValidityPeriod defines the validity period for all the signed certificates generated by kubeadm
CertificateValidityPeriod = time.Hour * 24 * 365 * 100
// CACertificateValidityPeriod defines the validity period for all the signed CA certificates generated by kubeadm
CACertificateValidityPeriod = time.Hour * 24 * 365 * 100
1
2
3
4

**4.3、**验证已经正确修改


cat staging/src/k8s.io/client-go/util/cert/cert.go | grep NotAfter
cat cmd/kubeadm/app/constants/constants.go | grep CertificateValidity
1
2
3

五、编译生成新证书

5.1、再次确认构建的go的版本号和环境版本是否一致


[root@master1 kubernetes]# cat build/build-image/cross/VERSION
v1.35.0-go1.25.6-bullseye.0[root@master1 kubernetes]# 
[root@master1 kubernetes]# 
[root@master1 kubernetes]# go version
go version go1.25.6 linux/amd64
[root@master1 kubernetes]# 
1
2
3
4
5
6
7

5.2、确认二进制文件位置


[root@master1 kubernetes]# whereis kubeadm
kubeadm: /usr/bin/kubeadm
[root@master1 kubernetes]# ll -l /usr/bin/ |grep kube
-rwxr-xr-x  1 root root    72372408 Feb 10 21:18 kubeadm
-rwxr-xr-x  1 root root    58597560 Feb 10 21:19 kubectl
-rwxr-xr-x  1 root root    58110244 Feb 10 21:19 kubelet
[root@master1 kubernetes]# 

1
2
3
4
5
6
7
8
9

5.3、编译二进制文件

备注:GOFLAGS=-v 显示详细信息,go build -v cmd/kubeadm。


# 编译 kubeadm
make all WHAT=cmd/kubeadm GOFLAGS=-v

# 编译 kubelet
make all WHAT=cmd/kubelet GOFLAGS=-v

# 编译 kubectl
make all WHAT=cmd/kubectl GOFLAGS=-v
1
2
3
4
5
6
7
8
9

**5.4、**编译完后,查看编译结果

ll l _output/
1

备注:更新已经存在的集群只会用到 kubeadm,新二进制部署集群的话会用到kubeadm、kubectl、kubelet


#真实路径
ll -l _output/local/bin/linux/amd64
1
2
3

5.5、把编译好的文件拷贝到指定目录


mkdir -p  /home/k8s-100
cp -r _output/local/bin/linux/amd64/* /home/k8s-100/
ll -l /home/k8s-100/
1
2
3
4

六、更新集群刷新100年证书

在开始之前导出集群完整的 kubeadm 配置(关键!)

kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm-config.yaml

1
2

做好备份很重要!!!

6.1、先对老的二进制文件好环境文件进行备份(每台都执行)


ll -l /usr/bin/ |grep kube
mkdir -p /usr/bin/k8s_backup
mv /usr/bin/kubeadm /usr/bin/k8s_backup/
ll -l /usr/bin/k8s_backup


cp -r /var/lib/etcd /var/lib/etcd_backup
cp -r /etc/kubernetes /etc/kubernetes_backup
ll /etc/kubernetes_backup
1
2
3
4
5
6
7
8
9
10

6.2、把新制作的二进制文件放到程序位置


# master1 执行
cd /home/k8s-100/
cp /home/k8s-100/kubeadm /usr/bin/
1
2
3
4

# master1执行
scp -r /home/k8s-100/kubeadm master2:/usr/bin/
scp -r /home/k8s-100/kubeadm master3:/usr/bin/
scp -r /home/k8s-100/kubeadm node:/usr/bin/
1
2
3
4
5

6.3、备份并删除旧证书 (master节点执行)

# 备份旧证书(以防万一)
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak

# 删除所有旧证书(除了 CA 证书!)
rm -f /etc/kubernetes/pki/apiserver.crt
rm -f /etc/kubernetes/pki/apiserver.key
rm -f /etc/kubernetes/pki/apiserver-etcd-client.crt
rm -f /etc/kubernetes/pki/apiserver-etcd-client.key
rm -f /etc/kubernetes/pki/apiserver-kubelet-client.crt
rm -f /etc/kubernetes/pki/apiserver-kubelet-client.key
rm -f /etc/kubernetes/pki/front-proxy-client.crt
rm -f /etc/kubernetes/pki/front-proxy-client.key
rm -f /etc/kubernetes/pki/etcd/server.crt
rm -f /etc/kubernetes/pki/etcd/server.key
rm -f /etc/kubernetes/pki/etcd/peer.crt
rm -f /etc/kubernetes/pki/etcd/peer.key
rm -f /etc/kubernetes/pki/etcd/healthcheck-client.crt
rm -f /etc/kubernetes/pki/etcd/healthcheck-client.key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

6.4、用新 kubeadm 重新生成所有证书 (master节点执行)

kubeadm certs renew all

1
2

6.5、重启,这一步必须做,不做后面会出问题

kubectl delete -n kube-system pod  `kubectl get pod -n kube-system |awk '{print $1}'`

1
2

并等待全部启动正常:

kubectl get pod -n kube-system -o wide -w

1
2

6.6、重新生成 kubeconfig 文件 (master节点执行)

# 删除旧的 kubeconfig 文件(里面也嵌了证书)
rm -f /etc/kubernetes/admin.conf
rm -f /etc/kubernetes/controller-manager.conf
rm -f /etc/kubernetes/scheduler.conf
rm -f /etc/kubernetes/super-admin.conf

kubeadm init phase kubeconfig all
或者
kubeadm init phase kubeconfig all --config kubeadm-config.yaml
1
2
3
4
5
6
7
8
9

6.7、查看证书年限


kubeadm certs check-expiration
1
2

6.8、用 phase certs all 生成所有缺失的证书**(master节点执行)**


kubeadm init phase certs all
或者
kubeadm init phase certs all --config kubeadm-config.yaml
1
2
3
4

PixPin_2026-05-04_22-09-22.png

微信 支付宝
上次更新: 2026/05/04, 22:13:52

← istio入门 elk安装→

最近更新
01
istio入门
04-29
02
ES故障排查命令
04-29
03
debian 12安装kubernetes
04-22
更多文章>
Theme by Vdoing | Copyright © 2019-2026 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式