k8s證書過期了怎么辦?別慌,有救!


說明

1.本文描述的k8s集群,均是通過相應版本的kubeadm工具安裝。

2.以下的操作之前,請務必先備份/etc/kubernetes目錄,以備不時之需。

3.以下更新證書的過程中,均不重新生成ca證書。(如果更新了ca證書,集群node節點均需要重新join)

kubernetes v1.13更新證書的方法

1.准備集群信息描述文件

kubeadm config view > cluster.yaml

如果證書已經過期,上述步驟難以執行成功,需要手動構建cluster.yaml文件,示例如下:

apiServer:
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 10.40.53.101:6443   //根據實際情況填寫
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.13.2   //根據實際情況填寫
networking:
  dnsDomain: cluster.local
  podSubnet: 192.168.0.0/16  //此為默認值,根據實際填寫
  serviceSubnet: 10.96.0.0/12   //此為默認值,根據實際填寫
scheduler: {}

 

2.生成etcd健康檢查連接所需證書

kubeadm alpha phase certs etcd-healthcheck-client --config cluster.yaml

 

3.生成etcd peer之間認證所需證書
kubeadm alpha phase certs etcd-peer --config cluster.yaml

 

4.生成etcd server端證書
kubeadm alpha phase certs etcd-server --config cluster.yaml

 

5.生成apiserver front proxy所需的證書
kubeadm alpha phase certs front-proxy-client --config cluster.yaml

注意:front-proxy證書僅在你運行kube-proxy來支持 an extension API server時需要用到。

 

6.生成apiserver連接etcd所需的證書
kubeadm alpha phase certs apiserver-etcd-client --config cluster.yaml

 

7.生成apiserver連接kubelet所需的證書

kubeadm alpha phase certs apiserver-kubelet-client --config cluster.yaml

 

8.生成apiserver服務端證書
kubeadm alpha phase certs apiserver --config cluster.yaml

 

9.重新生成新的kubeconf文件

即通過如下命令即可更新/etc/kubernetes/目錄下的*.conf文件。

kubeadm alpha phase kubeconfig all --config cluster.yaml

 

10.依次重啟master節點的docker和kubelet,確保master組件容器重啟運行成功。至此證書更新完成,替換~/.kube/config文件后,即可恢復對集群的控制。

 

kubernetes v1.14更新證書的方法

說明:

  • kubeadm v1.14未提供kubeadm alpha phase kubeconfig all 之類的命令來自動生成/etc/kubernetes/*.conf文件,那只能按照下面步驟自行更新。
  • 以下步驟中的 ip:port 按實際更改。

 

1.更新/etc/kubernetes/pki下的所有證書文件(不含ca證書)。
##renew all cert except ca cert
kubeadm alpha certs renew all
 
2.以下是手動生成/etc/kubernetes/*.conf文件的方法。
##generate admin.conf
kubectl config  set -cluster kubernetes \
--certificate-authority=pki /ca .crt  \
--embed-certs= true  \
--server=https: //10.10.53.101:6443 \
--kubeconfig=admin.conf
 
kubectl config  set -credentials kubernetes-admin \
--client-certificate=pki /apiserver-kubelet-client .crt \
--client-key=pki /apiserver-kubelet-client .key \
--embed-certs= true  \
--kubeconfig=admin.conf
 
kubectl config  set -context kubernetes-admin@kubernetes \
--cluster=kubernetes \
--user=kubernetes-admin \
--kubeconfig=admin.conf
 
kubectl config use-context kubernetes-admin@kubernetes --kubeconfig=admin.conf
 
##generate controller-manager.conf
kubectl config  set -cluster kubernetes \
--certificate-authority=pki /ca .crt \
--embed-certs= true  \
--server=https: //10.10.53.101:6443 \
--kubeconfig=controller-manager.conf
 
kubectl config  set -credentials system:kube-controller-manager \
--client-certificate=pki /apiserver-kubelet-client .crt \
--client-key=pki /apiserver-kubelet-client .key \
--embed-certs= true  \
--kubeconfig=controller-manager.conf
 
kubectl config  set -context system:kube-controller-manager@kubernetes \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=controller-manager.conf
 
kubectl config use-context system:kube-controller-manager@kubernetes --kubeconfig=controller-manager.conf
 
##generate scheduler.conf
kubectl config  set -cluster kubernetes \
--certificate-authority=pki /ca .crt \
--embed-certs= true  \
--server=https: //10.10.53.101:6443 \
--kubeconfig=scheduler.conf
 
kubectl config  set -credentials system:kube-scheduler \
--client-certificate=pki /apiserver-kubelet-client .crt \
--client-key=pki /apiserver-kubelet-client .key \
--embed-certs= true  \
--kubeconfig=scheduler.conf
 
kubectl config  set -context system:kube-scheduler@kubernetes \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=scheduler.conf
 
kubectl config use-context system:kube-scheduler@kubernetes --kubeconfig=scheduler.conf
 
##generate kubelet.conf
kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$( hostname ) > kubelet.conf
 
systemctl stop kubelet
systemctl stop docker
 
##clear kubelet pki
mkdir  -p  /var/lib/kubelet/pki-bak
mv  /var/lib/kubelet/pki/ /var/lib/kubelet/pki-bak/
 
systemctl start docker
systemctl start kubelet
##set admin config
cp  /etc/kubernetes/admin .conf ~/.kube /config
 
##approve node csr
kubectl get csr| grep  $( hostname )| awk  '{print $1}' | xargs  kubectl certificate approve

 

kubernetes v1.15更新證書的方法

1.更新/etc/kubernetes/pki目錄下的所有證書(不包含ca證書)

kubeadm alpha certs renew all

 

2.檢查csr狀態,如果沒有approved,則手動執行如下命令

kubectl get csr|grep -v NAME|awk '{print $1}'|xargs kubectl certificate approve

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM