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