当前位置: 首页 > news >正文

k8s证书过期处理 手动生成证书、凭证

前言

证书管理是确保集群安全运行的一个关键环节。下面我将详细解答如何处理过期证书,以及手动生成和替换证书的流程和适用场景。

证书过期处理

如果 Kubernetes 集群中的证书过期,可能会导致集群出现各种异常,例如:

  • API Server 停止工作
  • kubelet 无法与 API Server 通信
  • kube-controller-manager 和 kube-scheduler 停止工作
  • etcd 集群出现通信问题

因此,一旦发现证书过期,我们需要尽快对其进行更新。具体的操作步骤如下:

查看过期证书

  • 使用kubeadm部署的k8s

    # 检查证书到期时间
    kubeadm certs check-expiration 
    # 更新所有证书
    kubeadm certs renew all 
    # 更新 kubelet 证书 在每个工作节点上使用  更新 kubelet 证书 更新完成后需要重启 
    kubeadm certs renew kubelet-client
    
  • 使用mac上docker desktop k8s
    这个略微繁琐

# 检测集群状态
kubectl cluster-info
# 将输入如下内容
# Kubernetes control plane is running at https://kubernetes.docker.internal:6443
# CoreDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy# To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
# 输出 证书过期时间
echo | openssl s_client -showcerts -connect kubernetes.docker.internal:6443 2>/dev/null | openssl x509 -noout -enddate
# notAfter=May 15 07:17:02 2025 GMT

手动生成证书

在某些特殊情况下,我们可能需要手动生成并替换证书,比如:

Kubernetes 集群中某些特殊组件(如 Ingress Controller)需要使用自定义证书
需要为客户端生成专用的客户端证书
现有证书遗失或损坏,需要重新生成

我们可以使用 openssl 来生成

openssl

openssl can manually generate certificates for your cluster.

  • 下载安装

  • Generate a ca.key with 2048bit:

    openssl genrsa -out ca.key 2048
    
  • According to the ca.key generate a ca.crt (use -days to set the certificate effective time):

    # -subj 参数用于指定证书 Subject 名称
    openssl req -x509 -new -nodes -key ca.key -subj "/CN=kubernetes.docker.internal" -days 10000 -out ca.crt
    
  • Generate a server.key with 2048bit:

    openssl genrsa -out server.key 2048
    
  • 基于 server.key 生成 server.csr

    openssl req -new -key server.key -out server.csr 
    # You are about to be asked to enter information that will be incorporated
    # into your certificate request.
    # What you are about to enter is what is called a Distinguished Name or a DN.
    # There are quite a few fields but you can leave some blank
    # For some fields there will be a default value,
    # If you enter '.', the field will be left blank.
    -----
    # Country Name (2 letter code) [AU]:CN
    # State or Province Name (full name) [Some-State]:XX
    # Locality Name (eg, city) []:XX
    # Organization Name (eg, company) [Internet Widgits Pty Ltd]:xa
    # Organizational Unit Name (eg, section) []:xa
    # Common Name (e.g. server FQDN or YOUR name) []:CA
    # Email Address []:1@qq.com# Please enter the following 'extra' attributes
    # to be sent with your certificate request
    # A challenge password []:
    # An optional company name []:
    
  • Generate the server certificate using the ca.key, ca.crt and server.csr:

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000  -sha256
  • View the certificate signing request:
openssl req  -noout -text -in ./server.csr

在这里插入图片描述

  • View the certificate:
openssl x509  -noout -text -in ./server.crt

在这里插入图片描述
Finally, add the same parameters into the API server start parameters.

  • 分发自签名 CA 证书
    客户端节点可能会拒绝承认自签名 CA 证书有效。 对于非生产部署,您可以将自签名 CA 证书分发给所有客户端并刷新有效证书的本地列表。
    在每个客户端上执行以下操作
    sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
    sudo update-ca-certificates
    

官方文档: https://kubernetes.io/docs/tasks/administer-cluster/certificates/


good day !!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Google Find My Device:科技守护,安心无忧
  • Java入门基础学习笔记50——ATM系统
  • 怎么判断同步时序逻辑电路和异步时序逻辑电路?
  • 【字典树 马拉车算法】336. 回文对
  • [硬件笔记] IIC通讯、开漏输出、上拉电阻
  • 数据结构面试题总结
  • 8.继承和多态
  • C# 中的 Dictionary<TKey, TValue> 类
  • vue3 input输入框输入限制(数字)
  • Python学习(3) 函数
  • Go语言之Gorm框架(一) ——初窥Gorm框架
  • 基于SpringBoot的社区医院管理系统
  • Xfce4桌面背景和桌面图标消失问题解决@FreeBSD
  • Notes for video: EDC-Con 2022/01 - EDC Conceptual Overview and Architecture
  • 从 0 开始本地部署大语言模型
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Linux系统编程】快速查找errno错误码信息
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java方法详解
  • k8s 面向应用开发者的基础命令
  • Mysql优化
  • SQLServer之创建显式事务
  • 规范化安全开发 KOA 手脚架
  • 解析 Webpack中import、require、按需加载的执行过程
  • 两列自适应布局方案整理
  • 什么是Javascript函数节流?
  • 微信小程序--------语音识别(前端自己也能玩)
  • 问题之ssh中Host key verification failed的解决
  • 我的业余项目总结
  • 一起参Ember.js讨论、问答社区。
  • 怎样选择前端框架
  • (09)Hive——CTE 公共表达式
  • (C++哈希表01)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (TOJ2804)Even? Odd?
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)springcloud实战之config配置中心
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (接口自动化)Python3操作MySQL数据库
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三)模仿学习-Action数据的模仿
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十)Flink Table API 和 SQL 基本概念
  • (十六)一篇文章学会Java的常用API
  • (转) ns2/nam与nam实现相关的文件
  • .NET Core 成都线下面基会拉开序幕
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 分布式技术比较