11.证书可用时间修改

k8s所有用到的证书

/etc/kubernetes/pki
[root@k8s-master01 pki]# ls
apiserver.crt                 apiserver-kubelet-client.key  front-proxy-ca.key
apiserver-etcd-client.crt     ca.crt                        front-proxy-client.crt
apiserver-etcd-client.key     ca.key                        front-proxy-client.key
apiserver.key                 etcd                          sa.key
apiserver-kubelet-client.crt  front-proxy-ca.crt            sa.pub

#查看证书的信息
openssl x509 -in apiserver.crt -text -noout

#查看证书的期限
kubeadm alpha certs check-expiration


#生成配置文件
kubeadm config view > /tmp/kubeadm-config.yaml

一、自动续签

kubeadm alpha certs renew all

将上面加入自动计划任务 * * * * *

0 0 1 */3 * kubeadm alpha certs renew all
格式:
  * * * * * 
分别对应表示: 分钟(0-59) 小时(0-23) 日(1-31) 月份(1-12) 星期(0-6)

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
同时正斜线可以和星号一起使用,
例如*/5,第一个位置就是每隔5秒,如果用在minute字段,表示每多少分钟。

每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,
			则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表

二、手动续签

1、go环境部署

wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
tar -zxvf go1.12.7.linux-amd64.tar.gz -C /usr/local/

vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
source /etc/profile

2、下载源码

cd /data && git clone https://github.com/kubernetes/kubernetes.git
#国内
git clone https://gitee.com/RaYong8080/kubernetes.git
cd kubernetes/
git checkout -b remotes/origin/release-1.15.1 v1.15.1

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 至今
# 在func NewSignedCert方法下面 定义一个常量 duration365d 
const duration365d = time.Hour * 24 * 365 * 10 # 这里改为10年
#  NotAfter:     time.Now().Add(kubeadmconstants.CertificateValidity).UTC(), 将更改为下面内容
NotAfter:     time.Now().Add(duration365d).UTC(),

make WHAT=cmd/kubeadm GOFLAGS=-v
编译后的kubeadm 放在_output文件的bin下

4、更新kubeadm

cp /usr/bin/kubeadm /usr/bin/kubeadm.old
cp _output/bin/kubeadm /usr/bin/kubeadm
chmod a+x /usr/bin/kubeadm

5、更新各节点证书至Master节点

cp -r /etc/kubernetes/pki /etc/kubernetes/pki.old
cd /etc/kubernetes/pki
kubeadm alpha certs renew all --config=/root/kubeadm-config.yaml
openssl x509 -in apiserver.crt -text -noout | grep Not

更新kubectl 客户端证书

cp -a /etc/kubernetes /root/.kube/config

授权config权限
chown $(id -un):$(id -un) /root/.kube/config

6、HA集群其余mater节点证书更新

scp /etc/kubernetes/pki/{ca.crt,ca.key,sa.key,sa.pub,\
front-proxy-ca.crt,front-proxy-ca.key} \@192.168.66.111:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/etcd/{ca.crt,ca.key} @192.168.66.112:/etc/kubernetes/pki/etcd/

scp /usr/bin/kubeadm @192.168.66.111:/usr/bin/kubeadm
#!/bin/bash

masterNode="192.168.66.111 192.168.66.112"
#for host in ${masterNode}; do
#    scp /etc/kubernetes/pki/{ca.crt,ca.key,sa.key,sa.pub,front-proxy-ca.crt,
front-proxy-ca.key}"${USER}"@$host:/etc/kubernetes/pki/
#    scp /etc/kubernetes/pki/etcd/{ca.crt,ca.key} "root"@$host:/etc/kubernetes/pki/etcd
#    scp /etc/kubernetes/admin.conf "root"@$host:/etc/kubernetes/
#done
for host in ${CONTROL_PLANE_IPS}; do
		scp /etc/kubernetes/pki/{ca.crt,ca.key,sa.key,sa.pub,front-proxy-ca.crt,front-proxy-ca.key}"${USER}"@$host:/root/pki/
		scp /etc/kubernetes/pki/etcd/{ca.crt,ca.key} "root"@$host:/root/etcd/
		scp /etc/kubernetes/admin.conf "root"@$host:/root/kubernetes/
done

7、验证证书

查看证书的信息
openssl x509 -in apiserver.crt -text -noout

#查看证书的期限
kubeadm alpha certs check-expiration

完成后重启 kube-apiserver、kube-controller、kube-scheduler、etcd

docker ps | grep -E 'k8s_kube-apiserver|k8s_etcd_etcd|k8s_kube-scheduler|k8s_kube-controller' | \
awk -F ' ' '{print $1}' | xargs docker restart
posted @ 2021-08-01 16:31  白色的番茄  阅读(340)  评论(0编辑  收藏  举报