Neuigkeiten von trion.
Immer gut informiert.

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.

Extraktion des CA Zertifikates aus der kubectl-Konfiguration
$ 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.

Validierung von TLS Zertifikat des Kubernetes-API-Servers
$ 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.

Installation von Kubernetes-CA-Zertifikat auf Debian
$ 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.

Installation von Kubernetes-CA-Zertifikat auf Arch Linux
$ 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.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Zur Desktop Version des Artikels