首页 > 其他分享 >Kubernetes 证书过期问题的处理方法

Kubernetes 证书过期问题的处理方法

时间:2024-03-06 14:59:18浏览次数:36  
标签:Kubernetes kubernetes 证书 过期 ca etc etcd kubeadm

问题现象

出现 Kubernetes API 无法调取的现象,使用 kubectl 命令获取资源均返回如下报错.

Unable to connect to the server: x509: certificate has expired or is not yet valid

经网上搜索之后发现。应该是 Kubernetes 集群的证书过期了,使用命令排查证书的过期时间.

# kubeadm alpha certs check-expiration

发现确实是证书过期了。

相关介绍及问题解决

因为使用 kubeadm 部署的 Kubernetes 集群,所以更新起证书也是比较方便的,默认的证书时间有效期是一年

集群的 Kubernetes 版本是 1.15.3版本是可以使用以下命令来更新证书的,但是一年之后还是会到期,这样就很麻烦

所以我们需要了解一下 Kubernetes 的证书,然后我们来生成一个时间很长的证书,这样我们就可以不用去总更新证书了

# kubeadm alpha certs renew all --config=kubeadm.yaml
# systemctl restart kubelet
# kubeadm init phase kubeconfig all --config kubeadm.yaml
然后将生成的配置文件替换,重启kube-apiserver、kube-controller、kube-scheduler、etcd这4个容器即可

另外kubeadm会在控制面板升级的时候自动更新所有证书,所以使用 kubeadm 搭建得集群最佳的做法是经常升级集群,这样可以确保你的集群保持最新状态并保持合理的安全性。

但是对于实际的生产环境我们可能并不会去频繁得升级集群,所以这个时候我们就需要去手动更新证书。

下面我们通过调用 Kubernetes 的 API 来实现更新一个10年的证书。

复制代码
首先在/etc/kubernetes/manifests/kube-controller-manager.yaml文件加入配置
spec:
  containers:
  - command:
    - kube-controller-manager
    # 设置证书有效期为10年
    - --experimental-cluster-signing-duration=87600h 
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
复制代码

修改完成后 kube-controller-manager 会自动重启生效。然后我们需要使用下面的命令为 Kubernetes 证书 API 创建一个证书签名请求。

如果你设置例如 cert-manager 等外部签名者,则会自动批准证书签名请求(CSRs)。

否者,你必须使用 kubectl certificate 命令手动批准证书。

以下 kubeadm 命令输出要批准的证书名称,然后等待批准发生:

# kubeadm alpha certs renew all --use-api --config kubeadm.yaml &

需要将全部 pending 的证书全部批准。我们还不能直接重启控制面板的几个组件

这是因为使用 kubeadm 安装的集群对应的etcd 默认是使用的 /etc/kubernetes/pki/etcd/ca.crt 这个证书进行前面的

而上面我们用命令kubectl certificate approve批准过后的证书是使用的默认的/etc/kubernetes/pki/ca.crt 证书进行签发的

所以我们需要替换 etcd 中的 CA 机构证书:

复制代码
# 先拷贝静态Pod资源清单
 cp -r /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak
 vi /etc/kubernetes/manifests/etcd.yaml
......
spec:
  containers:
  - command:
    - etcd
    # 修改为CA文件
    - --peer-trusted-ca-file=/etc/kubernetes/pki/ca.crt
    - --trusted-ca-file=/etc/kubernetes/pki/ca.crt
......
    volumeMounts:
    - mountPath: /var/lib/etcd
      name: etcd-data
    - mountPath: /etc/kubernetes/pki  # 更改证书目录
      name: etcd-certs
  volumes:
  - hostPath:
      path: /etc/kubernetes/pki  # 将 pki 目录挂载到etcd中去
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/etcd 
      type: DirectoryOrCreate
    name: etcd-data
......
复制代码

由于 kube-apiserver 要连接 etcd 集群,所以也需要重新修改对应的 etcd ca 文件:

复制代码
vi /etc/kubernetes/manifests/kube-apiserver.yaml
......
spec:
  containers:
  - command:
    - kube-apiserver
    # 将etcd ca文件修改为默认的ca.crt文件
    - --etcd-cafile=/etc/kubernetes/pki/ca.crt
......
复制代码

除此之外还需要替换 requestheader-client-ca-file 文件,默认是 /etc/kubernetes/pki/front-proxy-ca.crt 文件,现在也需要替换成默认的 CA 文件

否则使用聚合 API,比如安装了 metrics-server 后执行 kubectl top 命令就会报错:

# cp /etc/kubernetes/pki/ca.crt /etc/kubernetes/pki/front-proxy-ca.crt
# cp /etc/kubernetes/pki/ca.key /etc/kubernetes/pki/front-proxy-ca.key

这样我们就得到了一个10年证书的 Kubernetes 集群,还可以通过重新编译 kubeadm 来实现一个10年证书的,这个我没有尝试,不过在初始化集群的时候也是一个方法。

参考文档:  https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/

标签:Kubernetes,kubernetes,证书,过期,ca,etc,etcd,kubeadm
From: https://www.cnblogs.com/user-sunli/p/18056598

相关文章

  • 极狐GitLab Runner Kubernetes(k8s)配置
    GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。资料Kubernetes高级配置添加额外主机别名Pod的DNS配置极狐GitLabRunner......
  • 配置ssh证书登录
    系统:centos7.61、生成公钥和私钥,任何目录下都行ssh-keygen-trsa2、提示默认生成位置为/root/.ssh/id_rsa,直接回车。(也可以自己改)  提示输入证书的密码,可以留空,建议输入,如果输入了,则需要再次确认,记住这个证书密码(证书再加一层密码,这样即使证书丢失,也有第二个保险,有......
  • kubernetes可视化管理工具KubePi体验简介
    kubernetes可视化管理工具KubePi体验简介原创 zhuhb 运维笔谈 2024-03-0111:55 上海 听全文推荐一个飞致云开源的kubernetes可视化面板KubePi,Github地址https://github.com/1Panel-dev/KubePiKubePi可以导入多个Kubernetes集群,并且通过权限控制,将不同cluster......
  • fiddler绑定mumu模拟器安装证书配置抓包使用
    1、在mumu模拟器的浏览器上,访问代理机器的ip加上8888回车,点击下载证书 2、找到mumu模拟器里的设置,找到证书,进行安装  3、证书安装完成之后,找到连接的wifi,点击配置代理为手动 4、以上配置完成就可以抓包成功啦 ......
  • 免费ssl证书,使用acme.sh,泛解析,阿里dns自动续期
    -阿里云注册用户,添加dns可编辑权限- curlhttps://get.acme.sh|[email protected] -注意大小写exportAli_Key="<key>"exportAli_Secret="<secret>" - 执行阿里自动dns cd~/.acme.sh/./acme.sh--issue--dnsdns_ali-dexample.com-......
  • 极狐GitLab Runner 信任域名证书
    本文作者徐晓伟极狐GitlabRunner信任实例域名证书,用于注册注册极狐GitLabRunner。问题参见 极狐gitlab-runner-host.md说明解决方案是使用颁发给域名gitlab.test.helm.xuxiaowei.cn的证书,可以使用自己的域名去各大云厂商免费申请,或者使用自己根据域名gitlab.tes......
  • httpsok-v1.8.0 SSL证书自动续签就应该这么简单
    ......
  • 基于现有k8S 集群 CA 证书更新100年
    #先提前编译kubeadm到100年1、先备份conf文件和证书文件cp-rp /etc/kubernetes//etc/kubernetes.bak2、生成新的crt证书,默认在/etc/kubernetes/pki路径fori in cafront-proxy-caapiserver-kubelet-clientfront-proxy-clientapiserver;dokubeadminitphase......
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
    使用npm时遇到npmERR!codeCERT_HAS_EXPIRED错误时,这通常是因为您的本地计算机上的根证书已过期。这个错误可能是由于您的操作系统或Node.js环境中的证书问题导致的。本文将介绍如何解决这个常见的问题,以确保您可以顺利使用npm进行包管理。错误代码npmERR!codeCERT_HAS_EX......
  • 又学了一招, 设置抓包代理证书, Charles, fiddle
    之前一直都没用心搞懂证书的安装逻辑今天又碰到了铁板.因为买了新的硬盘,将以前的文件转移到新硬盘上,导致旧的证书路径失效.需要重新导入,重新安装,否则浏览器就一直显示证书不安全,恶心了自己两天. 具体操作1:在运行面板中输入certmgr.msc,确定 2: 打开当......