天天看點

K8s You must be logged in to the server (Unauthorized)|certificate has expired or is not yet valid.

K8S證書過期相關問題解決

      • 1、各個證書過期時間
      • 2、擷取叢集的配置檔案
      • 3、備份
      • 4、更新證書
      • 5、更新配置檔案
      • 6、在三台Master上執行重新開機kube-apiserver,kube-controller,kube-scheduler,etcd這4個容器,使其生效
      • 7、更換kubectl 操作的配置資訊
      • 8、檢視各個證書過期時間

在使用Kubernetes 叢集時有個大坑,一些證書的有效期是一年,官方考慮到安全性希望開發者在一年内,能及時更新Kubernetes的版本。更新之後有效期會再次重新整理。

Kubernetes版本 1.14.2

Ubuntu版本 16.04

  1. 原因證書過期問題
certificate has expired or is not yet valid.
           

2.原因應該是 /etc/kubernetes/admin.conf 也就是 $HOME/.kube/config 過期的原因。在終端操作指令使用的認證證書,根據/etc/kubernetes/pki/ca.crt生成的。是以這個也需要更新.

kubectl get pods 
`You must be logged in to the server (Unauthorized)`
           

1、各個證書過期時間

/etc/kubernetes/pki/apiserver.crt                #1年有效期
/etc/kubernetes/pki/front-proxy-ca.crt           #10年有效期
/etc/kubernetes/pki/ca.crt                       #10年有效期
/etc/kubernetes/pki/apiserver-etcd-client.crt    #1年有效期
/etc/kubernetes/pki/front-proxy-client.crt       #1年有效期
/etc/kubernetes/pki/etcd/server.crt              #1年有效期
/etc/kubernetes/pki/etcd/ca.crt                  #10年有效期
/etc/kubernetes/pki/etcd/peer.crt                #1年有效期
/etc/kubernetes/pki/etcd/healthcheck-client.crt  #1年有效期
/etc/kubernetes/pki/apiserver-kubelet-client.crt #1年有效期
           

2、擷取叢集的配置檔案

  1. 可以使用當時 kubeadm init --config=kubeadm-config.yaml 時的配置檔案。
  2. 使用指令擷取
kubeadm config view > /tmp/kubeadm-config.yaml 
           

3、備份

  1. 備份原有證書
cp -rp /etc/kubernetes /etc/kubernetes.bak
           
  1. 備份etcd資料目錄
cp -r /var/lib/etcd /var/lib/etcd.bak
           
  1. 備份配置資訊
mkdir /etc/kubernetes/conf-backup
  mv /etc/kubernetes/admin.conf kubelet.conf scheduler.conf controller-manager.conf conf-backup/
           

4、更新證書

kubeadm alpha certs renew all --config=/tmp/kubeadm-config.yaml
           

5、更新配置檔案

admin.conf 是給kubectl操作時用的,根據car.crt生成 是以需要更新

kubeadm init phase kubeconfig all --config /tmp/kubeadm-config.yaml
           

6、在三台Master上執行重新開機kube-apiserver,kube-controller,kube-scheduler,etcd這4個容器,使其生效

docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart

# 重新開機kubelet
systemctl restart kubelet
           

7、更換kubectl 操作的配置資訊

rm -rf $HOME/.kube
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
           

8、檢視各個證書過期時間

#檢視pod
kubectl get pods
# 檢視各證書過期時間
for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`;do openssl x509 -in $item -text -noout| grep Not;echo ======================$item===============;done
           

繼續閱讀