Kubernetes Zertifikate verwenden
Im vorherigen Beitrag wurde erklärt, wie die Kubernetes Certificate Authority über die Kubernetes API angesprochen werden kann.
Innerhalb des Kubernetes Clusters wird über die CA eine Vertrauensbeziehung etabliert - doch wie sieht es mit externen Zugriffen aus?
Nicht alles geschieht rein innerhalb des Clusters.
Ein offensichtliches Beispiel ist der Betrieb einer (Docker) Container Registry innerhalb von Kubernetes.
Das grundsätzliche Setup wurde in dem Beitrag Docker Registry in Kubernetes erläutert.
Da die Registry von der jeweiligen Container-Runtime angesprochen wird, geschieht dies regelmäßig direkt von einer Node und erfolgt damit nicht durch Kubernetes. Damit muss die Node über die passenden CA Zertifikate verfügen, sonst erhält man die Fehlermeldung, dass das X509 Zertifikat nicht validiert werden konnte. Nun geht es also darum, das CA Zertifikat von Kubernetes auf die einzelnen Nodes zu verteilen.
Kubernetes CA Zertifikat abrufen
Zunächst muss das CA Zertifikat von Kubernetes abgerufen werden.
Leider gibt es dazu bisher keine API.
Ein Weg ist, das Zertifkat aus der kubectl-Konfiguration zu extrahieren.
Dabei gilt es zu beachten, dass die Konfiguration mehrere Kontexte beinhalten kann.
In unserem Beispiel wird lediglich von einem einzelen Kontext ausgegangen, um das Setup einfach zu halten.
Verwendet man mehrere Kubernetes-Kontexte, so müssen die Kommandos entsprechend angepasst werden.
Mit dem folgenden Kommando wird die Konfiguration extrahiert und in der Datei k8s-ca.pem
gespeichert.
$ kubectl config view --raw --minify --flatten \
-o jsonpath='{.clusters[].cluster.certificate-authority-data}' \
| base64 -d > k8s-ca.pem
Wer gerne sicher gehen möchte, dass er das richtige CA Zertifikat vorliegen hat, kann das Zertifikat als Wurzelzertifikat verwenden und mit OpenSSL das Zertifikat des Kubernetes-API-Servers validieren. Die IP des API-Servers im Beispiel muss entsprechend auf die IP des eigenen API-Servers angepasst werden.
$ APISERVER=10.1.1.1
$ openssl s_client -connect $APISERVER:6443 2>&1 </dev/null | openssl x509 > apiserver.crt
$ openssl verify -CAfile k8s-ca.pem apiserver.crt
apiserver.crt: OK
Das CA Zertifikat kann nun dem System hinzugefügt werden.
CA Zertifikat installieren
Die Installation des Zertifikates ist abhängig vom verwendeten Betriebssystem. Exemplarisch wird für Debian- und Arch-basierte Umgebungen das Vorgehen illustriert.
$ sudo mkdir /usr/local/share/ca-certificates/c2-cluster
$ sudo cp k8s-ca.pem /usr/local/share/ca-certificates/c2-cluster/ca.crt
$ sudo update-ca-certificates
Arch Linux bringt ein eigenes Werkzeug zur Verwaltung von Zertifikaten mit.
$ sudo pacman -S ca-certificates-utils
$ sudo trust anchor k8s-ca.pem
Wenn die Zertifikate von Systemdiensten wie docker oder cri-o benötigt werden, müssen diese anschließend neu gestartet werden.
Zu den Themen Kubernetes, Docker und Cloud Architektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:
Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.