Den Tailscale-Operator für Headscale nachbauen: Das tailnet-gateway

Warum der offizielle Tailscale-Kubernetes-Operator nicht zu meinem selbstgehosteten Headscale passt — und wie ich die Teile, die ich brauche, als ein einziges StatefulSet nachgebaut habe

Mein Lab hängt an einem selbstgehosteten Headscale — einer quelloffenen Reimplementierung der Tailscale-Control-Plane. Das funktioniert wunderbar für Menschen und für die Talos-Knoten. Sobald ich aber wollte, dass auch die Cluster-Dienste sauber im Tailnet auftauchen — die Kubernetes-API, die Talos-API, die clusterinterne Namensauflösung —, stieß ich auf eine Lücke: Der offizielle Tailscale-Kubernetes-Operator ist für die Tailscale-SaaS gebaut, nicht für Headscale. Also habe ich die Teile, die ich tatsächlich brauche, selbst nachgebaut. Das Ergebnis ist ein einziges, gut lesbares StatefulSet: das tailnet-gateway.

Von Mastodon zu snac: Ein Fediverse-Server, der in einen Ordner passt

Warum ich den ausgewachsenen Mastodon-Stack gegen snac getauscht habe — einen ActivityPub-Server ohne Datenbank, Cache oder Object-Storage

Vor einer Weile habe ich ausführlich beschrieben, wie meine Mastodon-Instanz auf Kubernetes aufgebaut ist — und schon damals durchklang, dass dieser Stack für genau ein menschliches Konto reichlich überdimensioniert ist. Inzwischen habe ich die Konsequenz gezogen: this-is-fine.social läuft heute auf snac , einem ActivityPub-Server, der in einen einzigen Verzeichnisbaum passt.

Das OCI-Format und der Wechsel von Harbor zu Zot

Warum OCI mehr ist als nur Docker-Images, weshalb mein Build daemonlos mit Skopeo und Crane statt docker push arbeitet — und wie Zot mein schwergewichtiges Harbor abgelöst hat

„Container-Image“ ist im Sprachgebrauch fast zum Synonym für „Docker“ geworden — dabei ist das Format längst von Docker entkoppelt und in der Open Container Initiative (OCI) standardisiert. Dieser Beitrag erklärt, was das konkret bringt, warum meine Build-Pipeline deshalb mit Skopeo und Crane statt docker push arbeitet, und wie ich meine bisherige Harbor-Registry gegen das deutlich schlankere Zot getauscht habe.

Envoy Gateway: Ein Ingress, drei Welten und OIDC für alle

Von Traefik-Ingress über die Gateway-API zu Envoy Gateway — drei Shared-Gateways für extern, intern und Tailnet, OIDC für Apps ohne SSO und Feintuning per Policy

Der Edge eines Clusters — die Stelle, an der externer Traffic auf die Workloads trifft — ist eine der Komponenten, die man besser einmal richtig baut. Bei mir hat dieser Punkt eine kleine Evolution hinter sich: von Traefik als klassischem Ingress-Controller über die Adoption der Gateway-API bis hin zu Envoy Gateway , das diese API heute exklusiv umsetzt. Dieser Beitrag ist eine ausführliche Tour durch den Aufbau.

Pocket-ID: Ein OIDC-Provider, der nur eine Sache kann — und die gut

Warum ich meinen schwergewichtigen Authentik-Stack gegen das schlanke, passkey-zentrierte Pocket-ID als zentralen OIDC-Provider getauscht habe

Single Sign-On im Homelab ist ein zweischneidiges Schwert: Man will einen Login für alles, handelt sich damit aber schnell einen Identity-Provider ein, der schwerer wiegt als die Dienste, die er absichert. Genau an diesem Punkt habe ich meinen bisherigen Authentik -Stack gegen Pocket-ID getauscht — erreichbar unter auth.this-is-fine.io und seitdem der zentrale OIDC-Provider für mein gesamtes Lab.