1.K8s集群内置的证书在一年后会到期,导致集群不能正常使用
证书到期后会提示:Unable to connect to the server: x509: certificate has expired or is not yet valid
2. master 节点
在默认情况下,可以使用如下命令查看证书过期时间:
1 | openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt |
证书主要存放在/etc/kubernetes/pki 目录
1 | [root@node1 ssl]# ll |
3. 集群在有效期内是进行证书续期
3.1 在某个master节点证书续期
如果使用已经修改后的kubeadm,可以先将/usr/local/bin 目录下的kubeadm进行备份和替换
备份配置文件和etcd
1 | cp -rp /etc/kubernetes /etc/kubernetes.bak |
- 生成集群配置文件,如果证书已经超期了,执行此命令会失败,可以尝试修改节点时间或者使用8080 端口连接api-server获取这些信息
1 | cd /etc/kubernetes |
- 使用kubeadm命令进行 证书续期
1 | kubeadm alpha certs renew apiserver --config=./cluster.yaml |
执行完毕后,会在目录/etc/kubernetes/pki 生成新的证书,此时再查看证书有效期,会发现证书的有效期已经延长
- 重新生成配置文件
1 | rm -f /etc/kubernetes/*.conf |
5.重启kubelet、apiserver、controller-manager、scheduler、etcd
1 | docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart |
- 复制新的认证文件 用于命令行使用kubectl
1 | rm -fr ~/.kube/ |
3.3 高可用环境其他master节点证书续期
- 备份配置文件和etcd
1 | cp -rp /etc/kubernetes /etc/kubernetes.bak |
- 删除无用的文件
1
2rm /etc/kubernetes/*.conf -rf
rm /etc/kubernetes/ssl -rf - 将master节点的以下信息复制到到计算节点 node53docker ps |grep -E ‘k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd’ | awk -F ‘ ‘ ‘{print $1}’ |xargs docker restart
1
2
3
4
5
6
7
8scp -r /etc/kubernetes/ssl/ node53:/etc/kubernetes
scp /etc/kubernetes/cluster.yaml node53:/etc/kubernetes
````
4. 执行命令生成各组件启动需要的配置文件
````
kubeadm init phase kubeconfig all --config=./cluster.yaml
````
5.重启kubelet、apiserver、controller-manager、scheduler、etcdrm -fr ~/.kube/1
2
6. 复制新的认证文件 用于命令行使用kubectl
mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf ~/.kube/configcp -rp /etc/kubernetes /etc/kubernetes.bak1
2
3
4
5
### 3.2 计算节点证书续期
1. 备份配置文件1
2
3
42. 删除无用的文件
````
rm /etc/kubernetes/*.conf -rf
rm /etc/kubernetes/ssl -rf - 将master节点的以下信息复制到到计算节点 node53
scp -r /etc/kubernetes/ssl/ node53:/etc/kubernetes scp /etc/kubernetes/cluster.yaml node53:/etc/kubernetes
4. 执行命令生成kubelet启动需要的配置文件
kubeadm init phase kubeconfig all –config=./cluster.yaml
````
可以在/etc/kubernetes 目录看到新的配置文件
5. 删除 /var/lib/kubelet/pki/kubelet-client-current.pem 文件或者自定义的kubelet存放目录
- 此时执行命令systemctl restart kubelet 重启kubelet就可以
4. 修改kubeadm源码支持更长的证书有效期
主要修改两块代码,如下所示
修改一
vi staging/src/k8s.io/client-go/util/cert/cert.go,将时间修改为20年,具体的修改位置如下所示:
修改二
vim ./cmd/kubeadm/app/util/pkiutil/pki_helpers.go,将时间修改为20年,具体的修改位置如下所示:
执行命令make WHAT=cmd/kubeadm 重新编译生成kubeadm 可执行文件
5. kubelet 自动续期与controller-manager的证书签发时间
这里主要有两个参数
kubelet 进程接收 –rotate-certificates 参数,该参数决定 kubelet 在当前使用的 证书即将到期时,是否会自动申请新的证书。
kube-controller-manager 进程接收 –cluster-signing-duration 参数 (在 1.19 版本之前为 –experimental-cluster-signing-duration),用来 控制签发证书的有效期限。