$ goroot_ Notizen von der Schnittstelle
· docker, security, reverse-proxy, nginx · 2 min

Docker-Image-Review: jwilder/nginx-proxy

Schon mal gefragt, ob es eine gute Alternative für Szenarien gibt, in denen ein vollwertiger Ingress-Proxy Overkill wäre? Hier kommt sie — und die Konfiguration kennst du schon, denn sie basiert auf nginx.

Maschinell aus dem Englischen übersetzt, vom Autor geprüft. Englisches Original

Schon mal gefragt, ob es eine gute Alternative für Szenarien gibt, in denen ein vollwertiger Ingress-Proxy Overkill wäre? Hier kommt sie: jwilder/nginx-proxy. Das Image kann besonders nützlich sein, wenn man zum ersten Mal ein Ingress-Konzept aufsetzt. Nginx[arch] ist in der Welt der klassischen Serveradministration und des Webhostings bestens bekannt. Warum also nicht den vertrauten Webserver auch in der containerisierten Umgebung nutzen? Verglichen mit vollwertigen Ingress-Routern wie Traefik[arch] erlaubt dir das Image, dein vorhandenes Know-how und auch einige deiner Konfigurationen weiterzuverwenden. Das Konzept eines Ingress-Routers ähnelt einem Reverse Proxy. Es geht darum, alle anderen Dienste hinter einem einzigen Container zu verstecken, so wie du es mit einem Reverse Proxy tun würdest. Die Vorteile liegen auf der Hand: Du musst dich nicht um Dinge wie Verschlüsselung oder Authentifizierung für jeden einzelnen Dienst separat kümmern. Es gibt dir außerdem die Möglichkeit, Dinge wie Load-Balancing oder das Sammeln von Statistiken über alle deine Dienste hinweg umzusetzen.

Anwendungsfall

Jason Wilder selbst erklärt den Anwendungsfall von jwilder/nginx-proxy sehr ausführlich in seinem Blog[arch]. Die Nutzung dieses Images beschränkt sich (Stand der Artikelerstellung) auf statische Setups, wie z. B. docker-compose-Dateien. Wenn du dynamischere Setups betreibst — etwa solche, bei denen Container spontan erstellt werden — sind Lösungen wie Traefik besser geeignet. Zum Zeitpunkt der Erstellung dieses Artikels kann das Image Backend-Dienste ohne spezielle jwilder/nginx-proxy-Konfiguration nicht automatisch erkennen.

Konfiguration

Die Hauptanwendungsfälle lassen sich vollständig über Umgebungsvariablen konfigurieren, die auf den zu proxenden Diensten definiert werden. Leider hat das auch den Nebeneffekt, dass die nginx-proxy-Konfiguration in deinem Backend-Dienst sichtbar wird. Würde man stattdessen Labels zur Konfiguration verwenden, würde das die Umgebung nicht verunreinigen.

Aktivität

Die Community rund um jwilder/nginx-proxy ist sehr aktiv. Das GitHub-Repository[arch] hat über 60 Contributor. Updates des Images erfolgen sehr häufig, was für einen Dienst, der die erste Verteidigungslinie in deinem Setup darstellt, sehr wichtig ist. Besonders wenn man bedenkt, dass die Nutzung von Docker-Images zusätzliche potenziell unsichere Schichten hinzufügt zwischen dir und dem Software-Hersteller.

Skalierung

Der Dienst selbst lässt sich nicht so einfach skalieren wie andere Ingress-Router-Lösungen. Um die Instanzen dynamisch zu skalieren, musst du einen dedizierten Load-Balancer betreiben, der die Aufrufe auf deine jwilder/nginx-proxy-Instanzen verteilt.

Fazit

Jasons nginx-basiertes Reverse-Proxy-Image ist einer der besten verfügbaren Ingress-Router für statische Setups. Es ist besonders nützlich in statischen Umgebungen, z. B. klassischen Servern, auf denen die Dienste in Containern laufen. Die Fähigkeit, die gesamte notwendige Konfiguration aus wenigen Einstellungen zu generieren, ist hervorragend. Es ist eines der wenigen verfügbaren Images, die überhaupt keine Konfigurationsdateien benötigen. Selbst für Einsteiger ohne jegliches nginx-Wissen senkt das die Hürde, einen Ingress-Router zu konfigurieren, wirklich erheblich.

Weiterlesen