首页 > 其他分享 >04. Kubernetes - Kubeadm 证书问题

04. Kubernetes - Kubeadm 证书问题

时间:2022-10-10 21:14:22浏览次数:70  
标签:Kubernetes 04 证书 kubernetes 更新 go Kubeadm kube kubeadm

证书有效期

通过 kubeadm 安装的 Kubernetes 集群的证书有效期为 1 年,可以使用相关命令查看证书的有效期:

kubeadm certs check-expiration

如图所示:

image

可以看到除了 ca 证书,其他证书的有效期都是一年。如果证书到期,则整个集群都会挂掉。

解决这个问题的办法一般有两种:

  1. 如果还没有安装集群,可以通过修改源码设置证书有效期。
  2. 如果集群已经运行,可以通过重新签发有效期更长的证书。

证书更新

为了更新的安全性,更新之前可以将所有 Master 节点的配置目录做一个备份:

cp -r /etc/kubernetes /etc/kubernetes_$(date +%F)
cp -r /var/lib/etcd /var/lib/etcd_$(date +%F)

通过执行证书更新命令查看:

kubeadm certs renew --help

可以看到证书更新是支持更新指定服务的证书,也可以更新单个服务的证书,但都是集群服务的证书。

# 所有 Master 节点更新所有证书
kubeadm certs renew all
systemctl restart kubelet

如图所示:

image

可以看到提示让重启 kube-apiserver, kube-controller-manager, kube-scheduler 和 etcd 服务证书才能生效。

# 重启组件
for i in $(kubectl get pods -A | grep -E "etcd|kube-apiserver|kube-controller-manager|kube-scheduler" | awk '{print $2}');do
    kubectl delete pod $i -n kube-system
    sleep 3
done

如如所示:

image

此时查看证书已经是新的了,也可以通过命令查看:

echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2>/dev/null | openssl x509 -noout -enddate

同时,由于在初始化 Master 集群的时候采用的是设置环境变量 export KUBECONFIG=/etc/kubernetes/admin.conf 的方法,不需要再更新该文件。如果不是该方法,还需要使用新的 admin.conf 替换掉复制的 /root/.kube/config 配置文件。

修改源码

上面的方法更新的证书有效期还是 1 年,生产还不是太建议。可以通过修改源码调整 kubeadm 的证书时间。

  1. 主备一台 Linux 服务器,用于源码修改:
# 下载 Kubernetes 源码
yum install git
cd /opt
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes

# 查看所有分支
git branch -a

# 切换分支
git checkout -b remotes/origin/release-1.25

# 查看当前分支
git branch

  1. 修改源码:

修改文件:staging/src/k8s.io/client-go/util/cert/cert.go

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

搜索关键字 NewSelfSignedCACert 找到方法,里面有定义 now.Add(duration365d * 10).UTC(), 10 年,改成 100 年:

# 改成 100 年
NotAfter:              now.Add(duration365d * 100).UTC(),

修改文件:cmd/kubeadm/app/constants/constants.go

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

搜索关键字 CertificateValidity ,可以找到定义的常量 CertificateValidity = time.Hour * 24 * 365 1 年,改为 100 年。

CertificateValidity = time.Hour * 24 * 365 * 100

  1. 安装 go 环境:
# 查看所需要的 go 版本
cat build/build-image/cross/VERSION

# 下载 go
wget https://golang.google.cn/dl/go1.19.2.linux-amd64.tar.gz
mv go1.19.2.linux-amd64.tar.gz /opt
cd /opt/
tar -zxf go1.19.2.linux-amd64.tar.gz
mkdir /opt/gopath

# 配置环境变量
cat >> /etc/profile << EOF
# go 配置
export GOROOT=/opt/go
export GOPATH=/opt/gopath
export PATH=\$PATH:\$GOROOT/bin
EOF

#生效
source /etc/profile

  1. 编译 Kubeadm:
cd /opt/kubernetes/

# 指定只编译 Kubeadm
make all WHAT=cmd/kubeadm GOFLAGS=-v

编译完成后会在 _output/local/bin/linux/amd64/kubeadm 目录下生成 kubeadm 的二进制文件。将该二进制文件替换掉 Master 节点的二进制文件即可。


  1. 替换文件:
mv /usr/bin/kubeadm /usr/bin/kubeadm_$(date +%F)
# 将新的 kubeadm 上传到 /usr/bin 下面,然后修改权限
chmod 755 /usr/bin/kubeadm
  1. 此时在使用上面的方法更新证书之后,如图所示:

image

可以发现,组件的证书都变成了 100 年,但是 CA 的证书还是 10 年。如果想要更新 CA 证书,需要重建集群。

标签:Kubernetes,04,证书,kubernetes,更新,go,Kubeadm,kube,kubeadm
From: https://www.cnblogs.com/ezops/p/16777356.html

相关文章

  • Leecode104 二叉树的最大深度
    //DFS解法前序遍历/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*Tr......
  • Kubernetes Traefik 路由规则及中间件 Traefik Middlewares 的配置 (k3s)
    系统环境:  Traefik版本:v2.2.0Kubernetes版本:K3s1.23.6一、什么是TraefikTraefik是一款开源的边缘路由器,现在本人主要要作用于kubernetes中对外的网关,即Ing......
  • 关于多个 Kubernetes 集群指标的采集操作
    简介在使用观测云期间,有时需要针对一个工作空间接入多个Kubernetes集群指标,通过观测云提供的全局Tag的方式来进行区分,大大提高了效率。下面是我总结的操作步骤。当集......
  • Build Kodi19.4 by Ubuntu20.04
    此文谨记录Kodi编译过程,帮助新手少采坑。学习Kodi前希望通过本地编译后,对模块功能逐个调试。毕竟是少数派应用,影音玩家以直接下载apk安装。极少提及这种野路子进行编译。事......
  • JavaScript高级程序设计笔记04 变量、作用域与内存
    变量、作用域与内存变量特定时间点一个特定值的名称。分类原始值:按值访问复制:两个独立使用、互不干扰引用值(由多个值构成的对象):按引用访问操作对象时,实际上......
  • 004 二分法
    //二分法判断一个数是否存在(有序数组)publicstaticBooleanBSExist(int[]arr,intnum){if(arr==null||arr.length==0){returnfal......
  • 004Java的一些基本概念
    004Java的一些基本概念1、Java特性和优势Java至少具有以下特性:简单性(没有头文件、没有指针运算、也没有分配内存等操作)面向对象(万物皆对象)可移植性(一次编写,到处运行......
  • 第24章: kubernetes集群网络
    4.1网络基础知识1公司网络架构​​​​(1)路由器:网络出口(2)核心层:主要完成数据高效转发、链路备份等(3)汇聚层:网络策略、安全、工作站交换机的接入、VLAN之间......
  • 带有pwn环境的Ubuntu22.04快速安装
    pwn环境ubuntu22.04快速安装(有克隆vmk)ubuntu更新到了22.04版本,经过本人测试后非常的好(ma)用(fan),该版本和mac很相像,而且用起来也比较丝滑,只不过配置上稍微有一些多,也比较繁琐......
  • 第15章: Prometheus监控Kubernetes资源与应用
          Prometheus监控Kubernetes资源与应用       目录​​1监控方案 2​​​​2监控指标 4​​​​3实现思路 4​​​​4在K8S中部署Prometheus 4​​​​......