Am văzut aceste probleme pe multe alte forumuri și, în sfârșit, am găsit o soluție care funcționează de la mine.
În primul rând, problemele mele s-au datorat exclusiv certificatului /var/lib/kubelet/pki/kubelet.crt, pe care îl văd expirat fie cu:
ecou -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep -A 2 Valabilitate
sau
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -text -noout | grep -A 2 Valabilitate
În primul rând, trebuie să activați --rotate-certificates=true și --rotate-server-certificates=true în kubeletul tău. În cazul meu, am instalat cluster-ul folosind kubeadm, ca să pot edita /etc/systemd/system/kubelet.service.d/10-kubeadm.conf, și adăugați următoarele la KUBELET_EXTRA_ARGS:
Environment="KUBELET_EXTRA_ARGS=--rotate-certificates=true --rotate-server-certificates=true --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
În general, este doar adăugarea acestor steaguri la execuția kubelet /usr/bin/kubelet --rotate-certificates=true --rotate-server-certificates=true.
Și reîncărcați și reporniți kubelet cu:
sudo systemctl daemon-reload
sudo service kubelet restart
După repornire, văd ceva de genul 14114 log.go:172] http: eroare de strângere de mână TLS de la 20.0.0.13:57738: niciun certificat de servire nu este disponibil pentru kubelet, care indică faptul că certificatul trebuie adăugat și aprobat.
În al doilea rând, trebuie să aprobăm csr de la kubernetes (acesta este ceva la care nu m-am uitat niciodată până acum...):
kubectl obține csr
Acolo se va vedea certificatul care așteaptă să fie aprobat, deci doar aprobat:
certificatul kubectl aprobă csr-dlcf6
Și clusterul dvs. ar trebui să aibă acum certificatul server kubelet reînnoit. Pentru a verifica din nou:
ecou -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep -A 2 Valabilitate
Cateva note:
- Am activat rotația atât pentru client, cât și pentru server. Rotația clienților face, de asemenea, parte din scriptul de reînnoire automată a certificatului (https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/)
- După ce am activat rotația
/var/lib/kubelet/pki/kubelet.crt nu mai este folosită, în schimb legătura simbolică /var/lib/kubelet/pki/kubelet-server-current.pem este utilizat și indică cel mai recent certificat rotat.
Referinte: