Kubernetes证书热更新期限至100年【HA高可用集群】

news/2025/1/15 18:14:23/

一、问题与环境

1.为什么更新证书?局域网如何保障服务稳定性?
  众所周知k8s(Kubernetes)有一个默认证书期限为一年不成文的规定,官方的解释是“最佳的做法是经常升级集群以确保安全。(升级后集群证书自动续期一年)”,这就导致运维人员有概率遗忘更新证书而导致整个k8s集群管理命令无法使用的惨状,但往往事与愿违很多政府合作的项目更看重稳定性,因为它们都运行在”政务网“也可以理解为局域网,在局域网当然就不存在安全性问题了。本文通过实战项目将k8s集群证书期限更改至100年!

2.环境

系统环境CentOS7.8

在这里插入图片描述

运行环境Go1.19.4

在这里插入图片描述

HA高可用k8s1.23.1集群

在这里插入图片描述

二、安装包

  • go1.19.4.linux-amd64.tar.gz【提取码:r7q1】
  • kubernetes-1.23.1.zip【提取码:r7q1】

三、步骤

注意:所有master节点都需要进行以下操作

1.备份配置文件

mkdir ~/confirm
cp -rf /etc/kubernetes/ ~/confirm/
mkdir ~/confirm/data_etcd
cp -rf /var/lib/etcd/* ~/confirm/data_etcd
cp /usr/bin/kubeadm /usr/bin/kubeadm.bak

在这里插入图片描述

2.二次编译环境安装

mkdir k8s-cet
cd k8s-cet/
tar xzf go1.19.4.linux-amd64.tar.gz -C /usr/local/vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/go
:wqsource /etc/profile

在这里插入图片描述

3.kubeadm二次编译并修改期限【核心】

unzip kubernetes-1.23.1.zip 
cd kubernetes-1.23.1/vim cmd/kubeadm/app/constants/constants.go
#搜索CertificateValidity
修改证书时间 :CertificateValidity = time.Hour * 24 * 365 * 100vim staging/src/k8s.io/client-go/util/cert/cert.go
#搜索KeyUsageDigitalSignatur
修改 :NotAfter:              now.Add(duration365d * 100).UTC(),make -j4 WHAT=cmd/kubeadm
rm -rf /usr/bin/kubeadm
cp /srv/soft/k8s-cet/kubernetes-1.23.1/_output/bin/kubeadm /usr/bin/kubeadm
kubeadm certs renew all
kubeadm certs check-expiration

在这里插入图片描述
在这里插入图片描述

注意:可以看到图中所圈区域时间年限已经变成99年了,但是这不意味着结束,还需要执行一个关键步骤“重启静态pod”

4.重启静态pod【重要】

静态pod是什么?
  静态Pod是由kubelet进行管理的仅存在于特定Node的Pod上,他们不能通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet无法对他们进行健康检查。简单来说就是组成k8s本身的pod例如:etcd、kube-apiserver、kube-controller-manager、kube-scheduler

cd ~/confirm
tar -cvf static.tar.gz /etc/kubernetes/manifests/*
tar -tf static.tar.gz 
rm -f /etc/kubernetes/manifests/*.yaml
# 等待20s 命令死掉(kubectl get ns 执行报错后开始执行下面解压命令)
# HA集群需要所有主节点一起进行,否则无法验证kubectl服务pod是否停止(会轮询道其他主节点)
tar -xvf static.tar.gz -C /etc/kubernetes/manifests/  

说明:这样做的目的好处是 在不影响现有的线上服务动态Pod前提起到重启静态pod的效果从而实现所谓的“热更新”

5.更新kubeconfig【重要】

cd /etc/kubernetes/
cp admin.conf  /root/.kube/config
# 如果文件存在则会问是否覆盖,输入y回车即可
y

在这里插入图片描述

注意:如果不更新kubeconfig则kubectl将无权限管理Pod

6.验证

kubectl get ns

检验kubectl命令
在这里插入图片描述
检验整个HA集群证书时间
在这里插入图片描述
检验报警是否恢复
在这里插入图片描述

四、结束语

  本次k8s证书更新项目实战到此结束了,感谢认真读完,如果觉得还可以并且给予了你一定的帮助,那么给作者点赞、收藏、关注吧!


http://www.ppmy.cn/news/7376.html

相关文章

ASIO IO_CONTEXT 源码整理

io_context关系图 io_context io_context::io_context(): impl_(add_impl(new impl_type(*this,ASIO_CONCURRENCY_HINT_DEFAULT, false))) { }io_context::io_context(int concurrency_hint): impl_(add_impl(new impl_type(*this, concurrency_hint 1 ? ASIO_CONCURRENCY_HI…

【Linux】Linux调试器--gdb的使用

有时候,我们并不需要被教导,而是应该被不断的提醒。 文章目录一、gdb的介绍二、debug和realease版本的区别三、gdb的使用1.显示代码: l行号(list)指令2.设置断点: b行号(breakpoint&#xff09…

SQL经典练习:电脑商店

表结构 本文使用的表结构如下: 以下是创建表的语句: -- 厂商表 CREATE TABLE Manufacturers (Code INTEGER NOT NULL PRIMARY KEY, -- 编号,主键Name VARCHAR(255) NOT NULL, -- 名称 );-- 产品表 CREATE TABLE Products (Code INTEGER NO…

Java8 Stream详细用法介绍

Java8 Stream详细用法介绍一、Stream概述1.1、流的定义1.2、流与集合1.3、流的特性1.4、Stream的创建1.5、Stream操作分类二、Stream API 使用2.1 中间操作2.1.1、filter() 过滤2.1.2、map与flatMap 映射2.1.3、sorted() 排序2.2 终止操作2.2.1、forEach() 遍历2.2.2、collect(…

Netty面试题大全

Netty面试题大全 目录 文档索引 面试题汇总 Q:Netty是什么?为什么需要Netty? Q:Netty为什么性能高? Q:Netty有哪些组件? Q:Netty如何解决半包读写问题? Q:Netty如…

ESP8266 WIFI模块的使用

ESP8266 wiFI 可以用作连接周边的无线设备,也可以作为发送器供其他设备连接通常在产品中,我们经常用作无线的接收使用,也可能会用作在线升级使用等。 说点题外话:虽然在线升级已经较为成熟,但我不推荐在一些重要的产品…

C# 并行编程

一 并行任务库TPL 1 并行任务库(TPL,Task Parallel Library) 2 最重要的是Task类,还有Parallel类 3 Task类,是利用线程池来进行任务的执行 比如直接用ThreadPool更优化,而且编程更方便 4 Paallel类&…

[01] 两整数之和

371 两整数之和题目给你两个整数 a 和 b ,不使用 运算符 和 - ​​​​​​​,计算并返回两整数之和。题解思路魔鬼细节细节一解析细节二解析细节三解析细节四解析代码循环写法递归写法参考题解题目 给你两个整数 a 和 b ,不使用 运算符 和…