So ändern Sie abgelaufene Zertifikate in kubernetes cluster.

Vor kurzem gab es ein Problem mit dem Ablauf von Kubernetes-Zertifikaten. Die Kommunikation mit dem Kubernetes-Masterknoten erfolgt über SSL-Tunneling. Das SSL-Tunneln basiert in der Regel auf einer Reihe vertrauenswürdiger Zertifizierungsstellen von Drittanbietern, um die Authentizität von Zertifikaten festzustellen. Wenn das Zertifikat abgelaufen ist, wird die Kommunikation mit dem Masterknoten gestoppt. Sobald dies eintritt, ist Ihr System vorübergehend mit Ausfallzeiten konfrontiert. Dieser Artikel hilft Ihnen, Probleme mit dem Ablauf des Zertifikats zu beheben bzw. zu vermeiden.

root @ xxxxxxxx: / home / ubuntu # kubectl holt pods -o wide
Verbindung zum Server nicht möglich: x509: Zertifikat ist abgelaufen oder noch nicht gültig

Generieren Sie neue Zertifikate

Erstellen Sie ein neues Verzeichnis namens certs

mkdir certs

Erstellen Sie die Datei openssl.cnf im Verzeichnis certs mit folgendem Inhalt (Bitte ändern Sie die Parameter entsprechend Ihrer Umgebung).

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[v3_req]
basicConstraints = CA: FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = Kubernetes
DNS.2 = kubernetes.default
DNS.3 = internal-XXXXXXXXXXXXXX.ap-south-1.elb.amazonaws.com
DNS.4 = *. *. Compute.internal
DNS.5 = * .ec2.internal
IP.1 = 10.3.0.1

Führen Sie die folgenden Befehle aus, um Zertifikate zu generieren.

openssl genrsa -out certs / ca-key.pem 2048
openssl req -x509 -new -nodes -key certs / ca-key.pem -days 365 -out certs / ca.pem -subj "/ CN = kube-ca"
openssl genrsa -out certs / apiserver-key.pem 2048
openssl req -new -key certs / apiserver-key.pem -out certs / apiserver.csr -subj "/ CN = kube-apiserver" -config openssl.cnf
openssl x509 -req -in certs / apiserver.csr -CA certs / ca.pem -CAkey certs / ca-key.pem -CAcreateserial -out certs / apiserver.pem -days 365 -extensions v3_req -extfile openssl.cnf
openssl genrsa -out certs / worker-key.pem 2048
openssl req -new -key certs / worker-key.pem -out certs / worker.csr -subj "/ CN = kube-worker"
openssl x509 -req -in certs / worker.csr -CA certs / ca.pem -CAkey certs / ca-key.pem -CAcreateserial -out certs / worker.pem -days 365
openssl genrsa -out certs / admin-key.pem 2048
openssl req -new -key certs / admin-key.pem -out certs / admin.csr -subj "/ CN = kube-admin"
openssl x509 -req -in certs / admin.csr -CA certs / ca.pem -CAkey certs / ca-key.pem -CAcreateserial -out certs / admin.pem -days 365

Erstellen Sie eine zip-Datei mit dem Ordner "certs"

zip -r certs.zip certs

Änderung des Master Nodes-Zertifikats

Bitte ssh in masters und führe die Befehle aus.

Laden Sie die generierte Datei certs.zip auf die Masterknoten hoch und extrahieren Sie sie nach / tmp

BACKUP / etc / kubernetes VERZEICHNIS.

cp / etc / kubernetes / home / user / backups

Entfernen Sie anschließend alle * .pem-Dateien aus / etc / kubernetes / ssl /.

rm /etc/kubernetes/ssl/*.pem

Führen Sie dann die folgenden Befehle auf allen Masterknoten aus.

sudo mv /tmp/certs/ca.pem /etc/kubernetes/ssl/ca.pem
sudo mv /tmp/certs/apiserver.pem /etc/kubernetes/ssl/apiserver.pem
sudo mv /tmp/certs/apiserver-key.pem /etc/kubernetes/ssl/apiserver-key.pem
rm -R / tmp / certs
sudo chmod 600 /etc/kubernetes/ssl/*-key.pem
sudo chown root: root /etc/kubernetes/ssl/*-key.pem

Starten Sie dann den k8-Daemon neu

sudo systemctl daemon-reload
sudo systemctl starte kubelet
sudo systemctl enable kubelet
sudo systemctl stop docker
sudo systemctl Docker starten

Bitte stellen Sie sicher, dass das Alter der Docker-Bilder neu ist.

Wenn Sie den Befehl docker ps ausführen, können Sie das Alter des Docker-Images überprüfen. (Starten Sie die Server neu, wenn das Alter nicht neu ist.)

Änderung des Worker Nodes-Zertifikats

Bitte ssh in worker und führe die Befehle aus.

Laden Sie die genrated certs.zip-Datei auf Worker-Knoten hoch und extrahieren Sie sie nach / tmp

BACKUP / etc / kubernetes VERZEICHNIS

cp / etc / kubernetes / home / user / backups

Entfernen Sie anschließend alle * .pem-Dateien aus / etc / kubernetes / ssl /.

rm /etc/kubernetes/ssl/*.pem

Führen Sie dann die folgenden Befehle auf allen Arbeitsknoten aus.

sudo mv /tmp/certs/ca.pem /etc/kubernetes/ssl/ca.pem
sudo mv /tmp/certs/worker.pem /etc/kubernetes/ssl/worker.pem
sudo mv /tmp/certs/worker-key.pem /etc/kubernetes/ssl/worker-key.pem
sudo chmod 600 /etc/kubernetes/ssl/*-key.pem
sudo chown root: root /etc/kubernetes/ssl/*-key.pem
sudo systemctl daemon-reload
sudo systemctl stop kubelet
sudo systemctl starte kubelet
sudo systemctl enable kubelet
sudo systemctl stop docker
sudo systemctl Docker starten

Bitte stellen Sie sicher, dass das Alter der Docker-Bilder neu ist.

Wenn Sie den Befehl docker ps ausführen, können Sie das Alter des Docker-Images überprüfen. (Starten Sie die Server neu, wenn das Alter nicht neu ist.)

Zertifikate im Manager-Knoten ändern

Bitte ssh in den verwaltenden Server, der kubctl installiert hat.

Laden Sie die generierte Datei certs.zip auf Worker-Knoten hoch und extrahieren Sie sie nach / tmp und entpacken Sie sie.

cat ~ / .kube / config /

Beispielausgabe

apiVersion: v1
Cluster:
- Cluster:
 Zertifizierungsstelle: /root/.kube/certs/ca.pem
 Server: https://internal-XXXXXXXXXXXXXX.ap-south-1.elb.amazonaws.com
 name: default-cluster
Kontexte:
- Kontext:
 Cluster: Standard-Cluster
 Benutzer: default-admin
 name: default-system
Aktueller Kontext: Standardsystem
Art: Konfig
Einstellungen: {}
Benutzer:
- name: default-admin
 Nutzer:
 Client-Zertifikat: /root/.kube/certs/admin.pem
 Client-Schlüssel: /root/.kube/certs/admin-key.pem

Sichern und entfernen Sie Zertifikate im obigen Zertifikatspfad.

rm /root/.kube/certs/admin.pem /root/.kube/certs/admin-key.pem /root/.kube/certs/ca.pem

Kopieren Sie neue Zertifikate in das Verzeichnis /root/.kube/certs

cp /tmp/certs/ca.pem /tmp/certs/admin.pem /tmp/certs/admin-key.pem /root/.kube/certs

Führen Sie den Befehl kubectl aus, um sicherzustellen, dass kubectl ordnungsgemäß funktioniert

Führen Sie die folgenden Befehle aus, um die Dienstkonten zu aktualisieren, da sie jetzt ungültige Token enthalten.

kubectl delete serviceaccount default
kubectl delete serviceaccount - Namespace = Standardeinstellung des Würfelsystems

Stellen Sie alle Dienste, Replikationscontroller, Pods, Namespaces usw. erneut bereit, um Neustarts zu vermeiden.