Lokales K8s mit Cloudflare Tunnel im Internet verfügbar

Vorbereitungen

Cloudflare bietet seit 2021 (siehe A Boring Announcement: Free Tunnels for Everyone) kostenlose Tunnels an. Damit können lokale Websites im Internet verfügbar gemacht werden. Benötigt wird nur eine Domain, bei der Cloudflare als Nameserver hinterlegt ist. Wie das genau geht, ist unter “Set up your first tunnel” beschrieben.

Tunnel für Services im Kubernetes Cluster

Erstellte Tunnel können auch für Services in einem Kubernetes Cluster genutzt werden. Eine Anleitung mit Beispiel gibt es in meinem Fork von cloudflare/argo-tunnel-examples. Im dortigen Kubernetes Manifest “cloudflared.yml” habe ich, im Vergleich zum Original, das Container Image von cloudflare/cloudflared auf erisamoe/cloudflared geändert, damit das Deployment auch auf arm64 (also z.B. auf einem Raspberry Pi und somit auch im Raspberry Pi Kubernetes Cluster) und nicht nur auf amd64 funktioniert.

Nachdem das Deployment angepasst und erfolgreich durchgeführt wurde, ist der Service unter der gewählten Domain erreichbar und die Last wird automatisch auf alle Pods des Services verteilt. Da Cloudflare als TLS termination proxy genutzt wird, ist auch https möglich. Dadurch kann der Traffic bei Cloudflare natürlich unverschlüsselt gelesen werden. Entsprechend ist diese Lösung in einigen Fällen vielleicht nicht oder nur bedingt für produktive Umgebung geeignet.

Alternativen

Auch inlets von Alex Ellis kann als Tunnel genutzt werden. Angefangen mit einer kostenlosen Option, hat Inlets 2021 in einem Blogpost bekanntgegeben, dass sie jetzt eine monatliche Subscription anbieten. Das Projekt sollte man sich auf jeden Fall genauer anschauen, wenn auf Cloudflare verzichtet werden soll.