一、证书可用时间修改
1、注意当初我们使用kubeadm 安装,所以我们登录 master节点,进行下面的操作。
2、当然如果你觉得本文的下面这种方式太过繁琐,可以参考这篇文章 解决kubernetes证书过期问题 简单快速
1.1、证书说明
相关证书都在pki目录下(至于前缀目录你需要你当时指定在哪里,当初你应该是指定文件来配置的,所以你可以去 kubeadm-config.yaml文件中查看),我们可以选择一个查看,比如查看 apiserver 的。
# openssl 加密格式 -in 文件 输出格式 -noout
openssl x509 -in apiserver.crt -text -noout

可以看到2019年发布,2020年就过期,一年的时效,那么你再查看其它组件的证书,时效不一定是一年。
比如我们查看 ca 的证书,可以发现它是10年的。
但是都会有一个过期的时间,尤其是一年对于我们来说实在是太短了,但是其实只要我们跟随着k8s的官方,使用 kubeadm 来一年更新一个版本,那么这个 crt 证书就会自动更新,不需要我们担心和处理。但是有很公司的生产环境可能都是离线内网的又或者为了寻求稳定,不想一年就更新,所以我们就需要去修改它。
1.2、证书授权过期时间修改
怎么修改呢,因为我们是使用Kubeadm来安装的k8s,这个证书也是用它来颁发的,所以我们只需要修改这个 Kubeadm 的源码后再次编译,重新发布证书即可。
1.2.1、安装go环境
因为kubeadm 是使用go 写的,所以我们等下编译需要go的环境,环境的安装如下,下载安装包,解压至usr/local/bin 下,再配置到 PATH 环境变量中即可
wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
tar -zxvf go1.12.1.linux-amd64.tar.gz -C /usr/local
vi /etc/profile
export PATH=$PATH:/usr/local/go/bin
source /etc/profil
1.2.2、安装git环境
用来下载kubeadm 的源码,安装略。
1.2.3、修改源码
1.2.3.1、查看我们的 kubeadm的版本
因为你等下修改它的源码,肯定要和你当初使用的那个版本保持一致的。
1.2.3.2、下载源码
并切换到我们使用的分支,或者你直接下载那个分支代码也行
cd /data && git clone https://github.com/kubernetes/kubernetes.git
git checkout -b remotes/origin/release-1.15.1 v1.15.1
1.2.3.3、修改 Kubeadm 源码包更新证书策略
注意不同版本改的文件不一样
vim staging/src/k8s.io/client-go/util/cert/cert.go # kubeadm 1.14 版本之前
vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go # kubeadm 1.14 至今(2020年结束,后面不确定)
1、定义一个十年的时间变量
2、在生成证书的模板中使用我们的变量
其实我觉得可以上网查找下怎么修改 那个参数就好了 kubeadmconstants.CertificateValidity
1.2.3.3、重新编译
修改完成后,我们重新编译
make WHAT=cmd/kubeadm GOFLAGS=-v

如果代码没有问题,输出的文件会在 _output/bin/kubeadm目录,我们copy一份
cp _output/bin/kubeadm /root/kubeadm-new
1.2.3.4、更新 kubeadm
你不能只更新证书,重新编译过的 kubeadm 也需要替换的,因为证书的生成还是得用kubeadm 命令生成的。
# 将 kubeadm 进行替换,记得得先把之前的备份一下,避免等会出现问题回滚都回滚不了。
cp /usr/bin/kubeadm /usr/bin/kubeadm.old
cp /root/kubeadm-new /usr/bin/kubeadm
chmod a+x /usr/bin/kubeadm
1.2.3.5、更新各节点证书至 Master 节点
注意这里需要指定你之前安装k8s的配置文件(kubeadm-config.yaml),因为基础信息得保持一致,不然2次的证书不一样,也没法用。
# 将 证书 进行替换,记得得先把之前的备份一下,避免等会出现问题回滚都回滚不了。
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.old
cd /etc/kubernetes/pki
# 使用重新编译过(修改权限为10年的)的kubeadm 来重新生成证书
kubeadm alpha certs renew all --config=/root/kubeadm-config.yaml

可以看到apiserver 的证书已经是10年了,你去看其它的证书也是一样的。
openssl x509 -in apiserver.crt -text -noout

二、高可用的 K8S 集群构建
睿云
