Neuigkeiten von trion.
Immer gut informiert.

Zugriff auf microk8s in WSL2

Kubernetes

Gerade für die Entwicklung und zum Testen bietet es sich im Kontext von Kubernetes an, auch eine lokale Umgebung zur Verfügung zu haben. Seit Docker Desktop für Firmen lizenzpflichtig geworden ist, ist diese Option weniger oft anzutreffen. Dabei sind nicht unbedingt die Kosten der entscheidende Faktor, sondern die mit der Beschaffung verbundene Komplexität und Aufwände.

Stattdessen bietet sich als Alternative an, mit der WSL zu arbeiten. Mit Ubuntu kommt auch eine leicht einzurichtende Kubernetest Distribution von Canonical mit: Microk8s. Microk8s bietet vergleichbar mit Minikube auch die Integration von verschiedene Addons um zum Beispiel einen Ingress einfach bereitzustellen.

Aktivierung von Ingress mit Microk8s
$ microk8s enable ingress

Da Microk8s innerhalb der WSL läuft, ist die Integration nicht ganz so nahtlos, wie dies bei Docker Desktop gelungen ist. Wir werfen im folgenden einen Blick darauf, welche Optionen es gibt, auf den Microk8s bzw. Dienste zuzugreifen. Im Fokus steht dabei vor allem der Ingress, wird dieser schließlich auch sonst typischerweise für den Zugriff auf HTTP Dienste und Webanwendungen genutzt.

Port Forward

Da ein Kubernetes Cluster typischerweise nicht lokal läuft, ist der Zugriff auf somit entfernte Dienste kein Sonderfall, sondern alltäglches Geschäft. So unterstützt das Werkzeug kubectl auch den Zugriff auf Pods und Services. Dazu muss eine entsprechende Berechtigung auf dem Kubernetes API Server vorliegen, kubectl lauscht dann auf einem lokalen Port und leitet die Verbindung weiter. Dies funktioniert mit beliebigen Anwendungen, ist jedoch wenig effizient, da für jede neue TCP Verbindung eine entsprechende Weiterleitung eingerichtet werden muss.

Für den Zugriff auf den Ingress könnte das Kommando beispielsweise so aussehen:

$ kubect -n ingress port-forward service ingress 8080:80

Danach kann über http://localhost:8080 auf der Maschine, auf der das kubectl gestartet wurde, auf den Ingress im Cluster zugegriffen werden. Entsprechende DNS Einträge oder Einträge in der hosts Datei können beim Testen mehrerer Dienste helfen.

LoadBalancer Service

Eine weitere Möglichkeit besteht darin, den Ingress als Kubernetes Service vom Typ LoadBalancer bereitzustellen. Dabei wird eine separate IP verwendet, über die dann zugegriffen wird.
Microk8s macht dies prinzipiell einfach, da auch hierfür ein Addon existiert.

Installation des MetalLB Addon für LoadBalancer Services
$ microk8s enable metallb:192.168.1.200-192.168.1.220

Das funktioniert jedoch je nach Netzwerksetup und Windows nicht immer mit WSL2 zusammen.

Ingress Host-Port

Die Microk8s Ingress Addon Konfiguration verwendet automatisch Host-Ports, so dass eigentlich der Zugriff auch auf dem Windows Host über http://localhost funktionieren solte. Da macht jedoch die WSL einen Strich durch die Rechnung: Schließlich läuft eine gut getarnte virtuelle Maschine, die Linux bereitstellt und lediglich auf geschickte Weise in die Windows Welt eingebunden wird. Und genau hier klappt nicht alles, wie man es erwarten würde: Ubuntu stellt Microk8s durch eine eigene Containertechnologie, Snap, zur Verfügung. Innerhalb von Microk8s werden wiederum Container gestartet, um Kubernetes und auch die Ingress Implementierung bereitzustellen. Auf einer dieser Abstraktionsebenen klappt dann ggf. etwas nicht, den Port korrekt zu kommunizieren.

In den Setups, bei denen wir diese Probleme festgestellt haben, hat folgender Hack Abhilfe geschaffen: Unter dem WSL Ubuntu einfach den Port ohne Containertechnologien einfach nochmals verwenden. Dann merkt es auch das WSL und reicht den Port durch - an den Ingress, nicht den nachträglich gestarteten Prozess.

Netcat als Listener auf Port 80
$ sudo netcal -vvvv -l 80




Zu den Themen Kubernetes, Docker und Cloudarchitektur 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!

Los geht's!

Bitte teilen Sie uns mit, wie wir Sie am besten erreichen können.