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: