【kubernetes系列】kubeadm证书调整

这篇具有很好参考价值的文章主要介绍了【kubernetes系列】kubeadm证书调整。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

部署k8s集群之前调整

默认情况下,使用kubeadm部署的k8s集群的证书有效期为1年。我们可以在初始k8s集群之前就调整好时间,避免后期经常更新。可以使用以下脚本对kubeadm的时间调整后重新编译生成kubeadm。此脚本针对k8s1.19.16版本,不同版本可能有所区别,请自行测试。
[root@k8s-m1 ~]# cat kubeadm_update.sh

yum install -y gcc make rsync jq git
wget  https://dl.google.com/go/go1.15.15.linux-amd64.tar.gz -O go1.15.15.linux-amd64.tar.gz
tar zxvf go1.15.15.linux-amd64.tar.gz  -C /usr/local
echo  -e 'export GOROOT=/usr/local/go\nexport GOPATH=/usr/local/gopath\nexport PATH=$PATH:$GOROOT/bin\n' >> /etc/profile
source /etc/profile 2>/dev/nul

#git clone https://github.com/kubernetes/kubernetes -b v1.19.16
sed -i 's/24 * 365/24 * 365 * 100/g' ./kubernetes/cmd/kubeadm/app/constants/constants.go
sed -i 's/duration365d * 10/duration365d * 100/g' ./kubernetes/staging/src/k8s.io/client-go/util/cert/cert.go
sed -ri 's#KUBE_GIT_TREE_STATE="dirty"#KUBE_GIT_TREE_STATE="clean"#g' ./kubernetes/hack/lib/version.sh
cd kubernetes/
make all WHAT=cmd/kubeadm GOFLAGS=-v
cp -a  ../kubernetes/_output/local/bin/linux/amd64/kubeadm /usr/bin/
kubeadm version

部署k8s集群之后定期手动更新证书

使用自定义的证书

默认情况下,kubeadm 会生成运行一个集群所需的全部证书。 你可以通过提供你自己的证书来改变这个行为策略。

如果要这样做,你必须将证书文件放置在通过 --cert-dir 命令行参数或者 kubeadm 配置中的 certificatesDir 配置项指明的目录中。默认的值是 /etc/kubernetes/pki。

如果在运行 kubeadm init 之前存在给定的证书和私钥对,kubeadm 将不会重写它们。 例如,这意味着你可以将现有的 CA 复制到 /etc/kubernetes/pki/ca.crt 和 /etc/kubernetes/pki/ca.key 中,而 kubeadm 将使用此 CA 对其余证书进行签名。

外部 CA 模式

只提供了 ca.crt 文件但是不提供 ca.key 文件也是可以的 (这只对 CA 根证书可用,其它证书不可用)。 如果所有的其它证书和 kubeconfig 文件已就绪,kubeadm 检测到满足以上条件就会激活 “外部 CA” 模式。kubeadm 将会在没有 CA 密钥文件的情况下继续执行。

否则,kubeadm 将独立运行 controller-manager,附加一个 --controllers=csrsigner 的参数,并且指明 CA 证书和密钥。

包括集群使用外部 CA 的设置指南参考https://kubernetes.io/zh-cn/docs/setup/best-practices/certificates/

检查证书是否过期check-expiration 能被用来检查证书是否过期

[root@k8s-m1 ~]# kubeadm alpha certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 May 21, 2024 02:54 UTC   264d                                    no      
apiserver                  May 21, 2024 02:54 UTC   264d            ca                      no      
apiserver-kubelet-client   May 21, 2024 02:54 UTC   264d            ca                      no      
controller-manager.conf    May 21, 2024 02:54 UTC   264d                                    no      
front-proxy-client         May 21, 2024 02:54 UTC   264d            front-proxy-ca          no      
scheduler.conf             May 21, 2024 02:54 UTC   264d                                    no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Mar 05, 2049 06:42 UTC   25y             no      
front-proxy-ca          Oct 16, 2031 06:59 UTC   8y              no 

该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm 使用的 KUBECONFIG 文件中嵌入的客户端证书的到期时间/剩余时间。
另外, kubeadm 会通知用户证书是否由外部管理; 在这种情况下,用户应该小心的手动/使用其他工具来管理证书更新。

警告: kubeadm 不能管理由外部 CA 签名的证书
注意: 上面的列表中没有包含 kubelet.conf 因为 kubeadm 将 kubelet 配置为自动更新证书。

手动更新证书

我们可以随时通过 kubeadm alpha certs renew 命令手动更新证书。下面我们来具体测试一下

#查看时间的目的是确认执行下面的命令具体更新了哪些文件
[root@k8s-m1 kubernetes]# date
Thu Jan 25 14:18:03 CST 2024
#更新
[root@k8s-m1 kubernetes]# kubeadm alpha certs renew all
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API 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 the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed
# 检查
[root@k8s-m1 kubernetes]# kubeadm alpha certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Jan 24, 2025 06:18 UTC   364d                                    no      
apiserver                  Jan 24, 2025 06:18 UTC   364d            ca                      no      
apiserver-kubelet-client   Jan 24, 2025 06:18 UTC   364d            ca                      no      
controller-manager.conf    Jan 24, 2025 06:18 UTC   364d                                    no      
front-proxy-client         Jan 24, 2025 06:18 UTC   364d            front-proxy-ca          no      
scheduler.conf             Jan 24, 2025 06:18 UTC   364d                                    no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Mar 05, 2049 06:42 UTC   25y             no      
front-proxy-ca          Oct 16, 2031 06:59 UTC   7y              no      
[root@k8s-m1 kubernetes]# 

通过上面可以发现其实只更新了admin.conf、apiserver、apiserver-kubelet-client、controller-manager.conf、front-proxy-client、scheduler.conf 这几个文件证书。通过时间也可以发现对应的文件如下:

[root@k8s-m1 kubernetes]# ll -rt /etc/kubernetes/pki/ 
......
-rw-------  1 root root 1679 Jan 25 14:18 apiserver.key
-rw-r--r--  1 root root 1285 Jan 25 14:18 apiserver.crt
-rw-------  1 root root 1679 Jan 25 14:18 apiserver-kubelet-client.key
-rw-r--r--  1 root root 1094 Jan 25 14:18 apiserver-kubelet-client.crt
-rw-------  1 root root 1679 Jan 25 14:18 front-proxy-client.key
-rw-r--r--  1 root root 1103 Jan 25 14:18 front-proxy-client.crt
[root@k8s-m1 kubernetes]# ll -rt /etc/kubernetes/*.conf
-rw------- 1 root root 1858 Mar  6  2023 /etc/kubernetes/kubelet.conf
-rw------- 1 root root 5453 Jan 25 14:18 /etc/kubernetes/admin.conf
-rw------- 1 root root 5481 Jan 25 14:18 /etc/kubernetes/controller-manager.conf
-rw------- 1 root root 5429 Jan 25 14:18 /etc/kubernetes/scheduler.conf

通过openssl命令也可以查看到更新后的证书有效期,注意这只能查看以crt文件结尾的有效期,如果是上面的conf文件,还需要进行手动转换查看。如下:

#能直接查看的
[root@k8s-m1 kubernetes]# openssl x509 -in pki/apiserver.crt -text -noout

#需转换的,以schduler.conf为例,其他两个conf文件类似
[root@k8s-m1 kubernetes]# BASE64_ENCODED_STRING=`cat /etc/kubernetes/scheduler.conf |grep client-certificate-data|awk -F": " '{print $2}'`
[root@k8s-m1 kubernetes]# echo $BASE64_ENCODED_STRING|base64 -d> /etc/kubernetes/pki/scheduler.crt
[root@k8s-m1 kubernetes]# openssl x509 -in /etc/kubernetes/pki/scheduler.crt -text -noout

此命令用 CA(或者 front-proxy-CA )证书和存储在 /etc/kubernetes/pki 中的密钥执行更新。

执行完此命令之后你需要重启控制面 Pod。因为动态证书重载目前还不被所有组件和证书支持,所有这项操作是必须的。 静态 Pod 是被本地 kubelet 而不是 API 服务器管理,所以 kubectl 不能用来删除或重启他们。 要重启静态 Pod 你可以临时将清单文件从 /etc/kubernetes/manifests/ 移除并等待 20 秒 (参考 KubeletConfiguration 结构中的 fileCheckFrequency 值)。如果 Pod 不在清单目录里,kubelet 将会终止它。 在另一个 fileCheckFrequency 周期之后你可以将文件移回去,kubelet 可以完成 Pod 的重建,而组件的证书更新操作也得以完成。

或者完成后重启etcd,kube-apiserver,kube-controller,kube-scheduler这四个容器

[root@k8s-m1 ~]# for i in etcd kube-apiserver kube-controller kube-scheduler;do echo ….restart container $i….; docker ps |grep $i | grep -v pause | cut -d " " -f1 | xargs docker restart; done 

# 注意下面这步很重要
[root@k8s-m1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

然后sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config重新拷贝证书。

最后注意重点:如果运行了一个 HA 的集群,以上操作需要在所有控制面板节点上执行。
其他方法如自动更新证书和用 Kubernetes 证书 API 更新证书 请参考以下官方文档。
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/

更多关于kubernetes的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出文章来源地址https://www.toymoban.com/news/detail-684420.html

到了这里,关于【kubernetes系列】kubeadm证书调整的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

    默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。 可以设置HA集群: 使用堆叠控制控制平面节点,其中 etcd 节点与控制平面节点共存 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    2024年02月14日
    浏览(44)
  • 【Kubernetes】Kubernetes之Kubeadm部署

    集群服务器主机名 服务器IP地址 集群服务器部署的服务 master(2C/4G,cpu核心数要求大于2) 192.168.145.15 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.145.30 docker、kubeadm、kubelet、kubectl、flannel node02(2C/2G) 192.168.145.45 docker、kubeadm、kubelet、kubectl、flannel 4.1 配置 master0

    2024年02月14日
    浏览(39)
  • 【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群

    前面简单介绍了Kubernetes的相关架构及其组件,这一章节我们将介绍如何快速搭建Kubernetes的集群,这里我们将使用官方支持的用于部署 Kubernetes 的工具— kubeadm。 主机名 ip地址 节点类型 系统版本 master.example.com 192.168.194.128 master,etcd centos7.x node1.example.com 192.168.194.130 node1 cent

    2024年02月03日
    浏览(36)
  • Kubernetes - kubeadm部署(二)

    先从一个报错开始吧 错误信息可以看到crictl连接的runtime是docker,并且连接失败。查看containerd启动信息(journalctl -exu containerd),containerd启动完成后监听的unix sock路径是:/run/containerd/containerd.sock。 创建crictl配置文件:/etc/crictl.yaml。修改crictl默认配置,把runtime-endpoint和image

    2024年02月16日
    浏览(34)
  • Kubeadm搭建 Kubernetes

    1)所有节点进行初始化,安装docker引擎和kubeadm kubelet kubectl  2)生成集群初始化配置文件并进行修改 3)使用kubeadm init根据初始化配置文件生成K8S的master控制管理节点 4)安装CNI网络插件(flannel、calico等) 5)在其他节点使用kubeadm join将节点以node或者master角色加入K8S集群 ku

    2024年02月13日
    浏览(25)
  • Kubernetes - kubeadm部署

    kubeadm官方推荐方案,也在大力发展。小问题比较多,扩展还是需要配合其它方案一起做。高可用上面还是需要自己花一些精力,如果只是玩玩,还是非常推荐的,但是想要正式环境使用,我还是推荐大家三思。 由于kubeadm更像是一套完整的脚本封装,所以想要扩展它,还是需

    2024年02月16日
    浏览(28)
  • 【kubernetes】Debian使用Kubeadm部署Kubernetes失败:Connection Refused

    这篇文章也可以在我的博客中查看 今天废话不多说直接解决一个阴间问题 在部署kubernetes后(执行完 kubeadm init 后),执行任何 kubectl 命令,都会报以下错误: 此后执行 kubectl get pods -A 你会看到一些容器在无规律地被摧毁 在过一段时间后, Api-server 直接开摆,你无法再连接上

    2024年02月06日
    浏览(30)
  • Kubernetes一键部署利器:kubeadm

    使用 kubeadm 的第一步,是在机器上手动安装 kubeadm、kubelet 和 kubectl 这三个二进制文件。 当你执行 kubeadm init 指令后,kubeadm 首先要做的,是一系列的检查工作,以确定这台机器可以用来部署 Kubernetes。这一步检查,我们称为“Preflight Checks”,它可以为你省掉很多后续的麻烦。

    2024年02月11日
    浏览(30)
  • 使用kubeadm部署kubernetes 1.24.3

     节点信息:  这里使用containerd作为运行时,部署可参照 https://blog.csdn.net/weixin_46476452/article/details/127670046 目录 一、系统环境初始化 二、配置apt源、下载kubeadm 三、安装cni 四、初始化kubernetes 五、配置节点认证,加入集群 六、部署calico网络插件 七、验证 八、报错处理  我系

    2024年02月13日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包