如何使用kubeadm管理证书?

kubeadm管理证书

在管理证书之前,你需要了解kubernetes如何使用PKI证书的相关知识:官方文档

检查证书到期时间

check-expiration 可用于检查证书过期时间:

kubeadm alpha certs check-expiration

输出如下内容;

CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
admin.conf                 Oct 06, 2020 03:56 UTC   364d            no
apiserver                  Oct 06, 2020 10:41 UTC   364d            no
apiserver-etcd-client      Oct 06, 2020 03:55 UTC   364d            no
apiserver-kubelet-client   Oct 06, 2020 03:55 UTC   364d            no
controller-manager.conf    Oct 06, 2020 03:56 UTC   364d            no
etcd-healthcheck-client    Oct 02, 2020 12:14 UTC   361d            no
etcd-peer                  Oct 02, 2020 12:14 UTC   361d            no
etcd-server                Oct 02, 2020 12:14 UTC   361d            no
front-proxy-client         Oct 06, 2020 03:55 UTC   364d            no
scheduler.conf             Oct 06, 2020 03:56 UTC   364d            no     

该命令显示了 所有证书的到期/剩余时间,包括在etc/kubernetes/pki目录下的客户端证书及由kubeadm嵌入到KUBECONFIG文件中的客户端证书(admin.conf,controller-manager.conf和scheduler.conf)。

注意:

  1. kubelet.conf未包含在上面的列表中,因为kubeadm将已将其配置为自动更新。
  2. kubeadm无法管理由外部CA签名的证书。

自动续订证书

自动续订指的是,在用kubeadm升级控制平面时 自动更新所有证书。

如果对证书续约没有要求,并定期升级kubernetes版本,每次升级间隔时间少于1年,最佳做法是经常升级集群以确保安全。

如果不想在升级集群时续约证书,则给 kubeadm upgrade apply 或 kubeadm upgrade node 传递参数:--certificate-renewal=false

手动续订证书

使用 kubeadm alpha certs renew 命令 可以随时手动续订证书,该命令使用存储在/etc/kubernetes/pki中的 CA (or front-proxy-CA)证书和密钥来更新证书。

如果是HA集群,则在所有控制平面执行

kubeadm alpha certs 命令详解:

Available Commands:
  certificate-key  生成证书和key
  check-expiration  检测证书过期时间
  renew            续订Kubernetes集群的证书

用的最多的续订证书的 renew子命令,现在来看下该命令帮助:

[email protected]:~# kubeadm  alpha certs renew -h
This command is not meant to be run on its own. See list of available subcommands.

Usage:
  kubeadm alpha certs renew [flags]
  kubeadm alpha certs renew [command]

Available Commands:
  admin.conf               Renew the certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself
  all                      Renew all available certificates
  apiserver                Renew the certificate for serving the Kubernetes API
  apiserver-etcd-client    Renew the certificate the apiserver uses to access etcd
  apiserver-kubelet-client Renew the certificate for the API server to connect to kubelet
  controller-manager.conf  Renew the certificate embedded in the kubeconfig file for the controller manager to use
  etcd-healthcheck-client  Renew the certificate for liveness probes to healtcheck etcd
  etcd-peer                Renew the certificate for etcd nodes to communicate with each other
  etcd-server              Renew the certificate for serving etcd
  front-proxy-client       Renew the certificate for the front proxy client
  scheduler.conf           Renew the certificate embedded in the kubeconfig file for the scheduler manager to use

Flags:
  -h, --help   help for renew

Global Flags:
      --log-file string          If non-empty, use this log file
      --log-file-max-size uint   Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --rootfs string            [EXPERIMENTAL] The path to the ‘real‘ host root filesystem.
      --skip-headers             If true, avoid header prefixes in the log messages
      --skip-log-headers         If true, avoid headers when opening log files
  -v, --v Level                  number for the log level verbosity

如上所知,指定某个证书就能续订该证书,指定 all
则续订所有证书。

命令执行后,注意:

  1. 无论证书的到期时间如何,都会无条件地续订一年。
  2. 证书的SAN等信息基于原证书,无需再次提供。
  3. renew执行后,为使更改生效,需要重启控制平面组件。

kubeadm alpha certs命令仅支持v1.15及其以上的版本。

示例: 手动续订apiserver的证书-apiserver.crt

从上面检测中知道,当前 apiserver.crt 到期时间是 Oct 06, 2020 03:55 UTC ,剩余364d。

1. 执行renew更新:

[email protected]:~# kubeadm  alpha certs renew apiserver
certificate for serving the Kubernetes API renewed

2. 重启控制平面:

重启kubelet会自动重新创建核心组件

systemctl restart kubelet

3. 验证:

[email protected]:~# kubeadm alpha certs check-expiration
CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
apiserver                  Oct 06, 2020 10:41 UTC   364d            no  

apiserver证书到期时间发生了变化, 不过不是顺延一年, 而是 从你 执行renew成功的时间开始续签一年。

如果要将所有证书续签一年,则执行:

kubeadm  alpha certs renew all

使用外部CA续订证书

通过外部CA签发证书,需要kubeadm 生成一个CSR提交给CA。

1. 生成CSR和私钥:

kubeadm alpha certs renew apiserver --csr-only  --csr-dir /tmp/apiserver.csr
  • --csr-only:仅生成CSR。
  • --csr-dir:生成的CSR和私钥文件保存在哪里,默认保存在/etc/kubernetes/pki

2. 查看CSR和私钥:

命令输出结果中提供了CSR和私钥。

[email protected]:~# ls /tmp/apiserver.csr/
apiserver.csr  apiserver.key

3. 使用该私钥到CA上请求签发证书。

将颁发的证书及私钥复制到PKI目录/etc/kubernetes/pki中。

原文地址:https://blog.51cto.com/newfly/2440907

时间: 2024-07-31 07:00:42

如何使用kubeadm管理证书?的相关文章

Windows AD证书服务系列---部署及管理证书模板(1)

一个证书就是一组小容量的数据,这些数据包含了它自身的几条信息.这个数据可以包含自身的Email地址,名字,证书使用类型,有效期,AIA和CDP位置的URL.证书还可以包含秘钥对,秘钥对中的私钥和公钥被用来进行身份验证,数字签名和加密.当证书在以下条件中使用时会生成秘钥对: 当内容被公钥加密了,它只能通过私钥来解密 当内容被私钥加密了,它只能通过公钥来解密 一个单独的秘钥对中,找不到其他同一关系秘钥 在合理的时间内,无法通过公钥推导出私钥,反之亦然 在注册的过程中,秘钥对会在客户端上生成,然后公钥

Windows AD证书服务系列---管理证书还原(1)

秘钥归档和还原的概述 在有些时候保障证书和对应的配对秘钥的安全是很重要的,例如,如果我们使用一个证书去对Email或文档的内容进行加密,但是我们把公钥和私钥遗失了,那么我们就无法访问被证书的公钥加密的数据了,因此对公钥和私钥进行归档和还原就显得非常重要了.我们可以将证书结合一个私钥导出,然后将它保存在一个安全的位置,例如独立媒体或者特定的云存储,以这样的方式来归档或备份私钥.但是这种方法要求每个用户都要备份自己的私钥,这样就算不上一个可靠的备份方式了,那么我们可以选择在CA上集中秘钥归档来作为替

Windows AD证书服务系列---部署及管理证书模板(2)

实验:修改并启用证书模板 注意:实验中的CA类型必须是企业CA,因为独立CA是不支持证书模板的 实验环境: LON-DC1  Windows2012 AD+ADCS 172.16.0.10 实验步骤: 打开LON-DC1上的证书颁发机构 展开证书颁发机构下面的子项,右键选择证书模板中的管理任务 可以看到里面已经有很多默认的模板了,我们这里选择用户模板,右键点击这个模板,然后选择复制模板 弹出的窗口中,兼容性可以不用修改,如果你公司已经没有2008R2以下的服务器,或者没有WIN7以下的客户端的话

kubeadm修改证书过期时间

因为我是安装用kubeadm自动安装的,目前最新版本1.63 但是限于证书过期时间问题,需要去做更改,特此记录! 一.安装go语言. 现在新版本的k8s重新编译都需要高版本的go语言了.我这边安装的是V1.13.5 先下载:rm -rf go1.135.linux-amd64.tar.gz tar -zxvf  go1.135.linux-amd64.tar.gz mv go /usr/local/ 添加环境变量: export PATH=$PATH:/usr/local/go/bin sour

kubernetes 1.17.2 kubeadm部署 证书修改为100年

[[email protected] ~]# cd /data/ [[email protected]-k8s-master01 data]# ls docker [[email protected]-k8s-master01 data]# mkdir k8s [[email protected]-k8s-master01 data]# cd k8s/ [[email protected]-k8s-master01 k8s]# ls [[email protected]-k8s-master01

利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用

将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.dll 然后用下面的脚本生成Windows MSVC需要的模块定义文件(.def, .lib和.exp), 然后就可以在VC中使用了. 前提系统要安装VS. 系统要求: Windows7+VS Studio (2008 and later)+MSYS 1) 根据32位dll生成模块定义文件的pytho

证书生成和管理总结

一.OpenSSL工具管理证书 OpenSSL 是一个强大的安全套接字层密码库,包括了加密算法,常用密钥和证书管理,SSL协议等功能.OpenSSL提供的命令非常多,这里只简单列出OpenSSL生成密钥和证书的一些操作(Window需要以管理员身份运行cmd): 生成PEM格式的密钥 openssl genrsa -out rsakey0.pem 2048 算法为rsa,长度为2048,保持到rsakey0.pem文件中. openssl genrsa -des3 -out rootca.key

使用X.509数字证书加密解密实务(一)-- 证书的获得和管理

一.       获得证书 1.        从CA获得 2.        从windows2003证书服务中获得 3.        使用makecert工具获得 二.       证书的保存 1.        保存在证书存储区 2.        以文件形式保存 2.1.       带有私钥的证书 2.2.       二进制编码的证书 2.3.       Base64编码的证书 3.        存储区中的证书跟证书文件相互转换 3.1.       使用工具相互转换 3.1.

Azure编程笔记(4):管理Cloud Service的证书

?? 我们在Microsoft Azure中部署CloudService的时候,可能会用到证书.通常在两种情况下需要用到证书.一是把证书安装在服务器端.此时证书用来建立HTTPS/SSL连接,以便保护传输中的数据.二是把证书部署在客户端.此时客户端发起连接请求时,它会把证书信息添加到请求中.服务器端收到请求之后,会验证其中的证书是不是合法的证书.这种情况下证书是用来验证用户的.接下来我们分两种情况来讨论如何管理证书. 把证书安装在服务器端 假设我们用ASP .NET的Web API开发一个Web