So leiten Sie Datenverkehr mit Traefik Reverse Proxy an Docker-Container weiter

0
182

Traefik ist ein führender Reverse-Proxy und Load Balancer für Cloud-native Operationen und containerisierte Workloads. Es fungiert als Edge-Router, der Ihre Dienste im Internet veröffentlicht.

Traefik leitet Anfragen an Ihre Container weiter, indem es Anfrageattribute wie Domain, URL und Port abgleicht. Der Proxy enthält eine automatische Diensterkennung, sodass Sie neue Container in Echtzeit hinzufügen können, ohne den Traefik-Dienst neu zu starten.

In diesem Leitfaden stellen wir eine einfache Traefik v2-Bereitstellung zusammen, die mehrere veröffentlicht Docker-Container. Auf diese Weise können Sie eine Docker-Installation verwenden, um mehrere Dienste über denselben Port bereitzustellen, z. B. eine Webanwendung, API und ein Verwaltungsfenster.

Erste Schritte

Es ist am einfachsten, Traefik mit einem eigenen Docker-Image bereitzustellen. Für den Rest dieses Leitfadens gehen wir davon aus, dass Sie Traefik mit Docker ausführen. Einzeldatei-Binärdateien sind als alternative Option verfügbar, wenn Sie Traefik lieber außerhalb Ihrer Docker-Installation verwenden möchten.

Sie müssen eine Konfigurationsdatei erstellen, bevor Sie Traefik verwenden können. Fügen Sie einer traefik.toml-Datei den folgenden Inhalt hinzu – Im Folgenden erklären wir, was es tut:

[Einstiegspunkte] [Einstiegspunkte.http] Adresse = ":80" [entryPoints.http.http.redirections.entryPoint] to = "https" Schema = "https" [Einstiegspunkte.https] Adresse = ":443"   [providers] [providers.docker] network = "traefik" Werbung

Diese Konfigurationsdatei konfiguriert Traefik mit zwei "Einstiegspunkten". Einstiegspunkte beschreiben, wie Anfragen den Traefik-Dienst erreichen. HTTP- und HTTPS-Einstiegspunkte werden erstellt, um die Ports 80 bzw. 443 abzuhören. Im Fall einer HTTP-Anforderung wird eine Umleitungsregel verwendet, um sie stattdessen an den https-Einstiegspunkt weiterzuleiten. Entfernen Sie den Umleitungsabschnitt, wenn Sie Inhalte über einfaches HTTP bereitstellen möchten.

Die “Anbieter” Abschnitt konfiguriert die Quellen, die Ihre Netzwerkrouten definieren. Provider sind einfach Infrastrukturkomponenten, die Traefik Routing-Anweisungen erteilen können. Wenn Sie möchten, können Sie einen benutzerdefinierten HTTP-API-Endpunkt schreiben, um Ihre Routen zu definieren.

In diesem Beispiel halten wir es einfach und verwenden den Docker-Anbieter. Dadurch werden die Docker-Container überwacht, die auf Ihrem Host ausgeführt werden. Wenn ein neuer Container mit Traefik-spezifischen Etiketten erscheint, werden diese Werte verwendet, um eine Route zum Container einzurichten. Damit dies funktioniert, müssen die Container an das Traefik-Docker-Netzwerk angehängt werden, da dies das in der Konfigurationsdatei angegebene Netzwerk ist. Erstellen Sie jetzt das Netzwerk:

docker network create traefik

Starting Traefik

Jetzt sind Sie bereit, Traefik zu starten! Stellen Sie einen neuen Container mit dem Traefik-Image bereit. Binden Sie die Ports 80 und 443 an Ihren Host, damit Traefik auf eingehende Anfragen lauschen kann. Sie sollten den Container auch dem zuvor erstellten Traefik-Netzwerk beitreten.

 

Hängen Sie den Docker-Socket Ihres Hosts mit dem Flag -v in den Traefik-Container ein. Dies gibt Traefik die Möglichkeit, auf andere Container zuzugreifen, die auf Ihrem Host ausgeführt werden, und ermöglicht die automatische Erkennung von Routen über den in Ihrer Konfigurationsdatei eingerichteten Docker-Anbieter. Die Konfigurationsdatei selbst wird in /traefik.toml im Traefik-Container gemountet.

docker run -d -p 80:80 -p 443:443 -v $PWD/traefik.toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker .sock –name traefik –network traefik traefik:2.6

Starten Sie als Nächstes ein paar Container, um zu testen, ob Traefik funktioniert:

docker run -d –label traefik.http.routers.apache.rule=Host(`apache.example.com`) –name apache –network traefik httpd:latest docker run -d –label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) –name nginx –network traefik nginx:latest Advertisement

Stellen Sie sicher, dass Sie DNS-Einträge für apache.example.com und nginx.example.com hinzugefügt haben, die Ihrem Traefik-Host zugeordnet sind. Sie sollten in der Lage sein, diese Domains in Ihrem Browser zu besuchen, um die standardmäßigen Apache- bzw. NGINX-Zielseiten anzuzeigen. Die beiden Container sind mit dem Traefik-Netzwerk verbunden; Ihre Labels traefik.http.routers richten grundlegende Routen ein, die eingehenden Anfragen anhand des Werts ihres Host-Headers entsprechen.

Routing-Traffic

Traefik unterstützt mehrere verschiedene “Matcher” für das Routing Ihres Datenverkehrs. Wir haben oben den Host-Matcher verwendet, aber Sie können auch nach HTTP-Methode, Headern, URI, IP-Adresse und Parametern für Abfragezeichenfolgen routen. Fügen Sie Ihren Containern mehrere Matcher hinzu, um komplexere Routing-Regeln zu erstellen.

Traefik unterstützt auch Middleware, mit der Sie die Anfrage ändern können, bevor sie Ihre Dienste erreicht. Möglicherweise möchten Sie ein Präfix hinzufügen, Header anpassen oder die Standardauthentifizierung auf Proxyebene anwenden. Hier ist ein Beispiel für die Verwendung der Headers-Middleware zum Hinzufügen eines zusätzlichen X-Proxied-By-Anforderungsheaders:

docker run -d –label traefik.http.routers.nginx.rule=Host( `nginx.example.com`) –label traefik.http.middlewares.demo.headers.customrequestheaders.X-Proxied-By=traefik –name nginx –network traefik nginx:latest

Traefik leitet den Datenverkehr zu den exponierten Häfen Ihrer Container. Sie können einen anderen Port angeben, indem Sie das Label traefik.http.services.<demo-service>.loadbalancer.server.port=8080 festlegen.

SSL hinzufügen

Als nächstes sollten Sie SSL hinzufügen, um sicherzustellen, dass Ihr Datenverkehr vollständig geschützt ist. Traefik enthält die Integration von Let’s Encrypt, sodass wir diese jetzt verwenden, um die Zertifikatserstellung zu automatisieren.

Fügen Sie den folgenden Abschnitt zu Ihrer traefik.toml-Datei hinzu:

[certificatesResolvers.lets-encrypt.acme] email = "you@example.com" storage = "/acme.json" [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

Dadurch wird Traefik so konfiguriert, dass es den ACME-Anbieter von Let’s Encrypt verwendet, wenn Zertifikatanforderungen aufgelöst werden. Stellen Sie sicher, dass Sie die E-Mail-Adresse durch Ihre eigene ersetzen, damit Sie alle von Let’s Encrypt gesendeten Zertifikatsablauferinnerungen erhalten. Der Abschnitt tlsChallenge definiert, wie die Zertifizierungsüberprüfung erfolgt; Wenn Sie es leer lassen, wird der Standardablauf zum Bereitstellen einer eindeutigen Datei verwendet, die Let’s Encrypt während der Zertifikatsausstellung anfordert und validiert.

Werbung

Starten oder ersetzen Sie Ihren Traefik-Container neu, um die neue Konfiguration anzuwenden . Sie sollten auch eine neue Datei in /acme.json im Container – Traefik wird dies verwenden, um Zertifikate zu speichern.

docker run -d -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock –name traefik –network traefik traefik:2.6

Verwendung des Dashboards

Traefik enthält eine Web-Benutzeroberfläche, die eine grafische Ansicht der Endpunkte, Anbieter und Dienste (Container) bietet, die in Ihrer Bereitstellung aktiv sind. Sie können die Benutzeroberfläche verfügbar machen, indem Sie in Ihrer Konfigurationsdatei eine Route dafür einrichten.

< /p>

Ändern Sie zuerst Ihre vorhandene traefik.toml mit dem folgenden Abschnitt:

[api] dashboard = true   [providers.file] Dateiname = "/traefik_dashboard.toml"

Als nächstes erstellen Sie traefik_dashboard.toml mit folgendem Inhalt:

[http.middleware.dashboard_auth.basicAuth] users = [ "admin:$123…" ]   [http.routers.api] rule = “Host(`traefik.example.com`)” Einstiegspunkte = ["https"] Middlewares = ["dashboard_auth"] service = "api@internal" [http.routers.api.tls] certResolver = "lets-encrypt"

Die neue Datei wird benötigt, da Traefik keine “dynamischen” Konfiguration (Dienste und Router) neben der “statischen” Werte in Ihrer Hauptdatei traefik.toml. Die Dashboard-Konfigurationsdatei definiert manuell eine Route, die traefik.example.com dem internen Web-UI-Dienst zuordnet. Die zu traefik.toml hinzugefügte Zeile provider.file registriert die neue Routendefinition beim Dateianbieter.

Verwenden Sie htpasswd, um einen Satz von Anmeldeinformationen für die HTTP-Basisauthentifizierung zu generieren. Fügen Sie die generierte Zeichenfolge dem Array „users“ in der Middleware „dashboard_auth“ hinzu. Sie müssen diesen Benutzernamen und dieses Passwort verwenden, um auf das Dashboard zuzugreifen.

sudo apt install apache2-utils htpasswd -nb admin your_password # Outputs admin:$123…

Starten Sie Traefik jetzt mit Ihrer aktualisierten Konfiguration neu , denken Sie daran, auch die neue Datei traefik_dashboard.toml zu mounten:

docker run -d -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v $PWD/traefik_dashboard.toml:/traefik_dashboard.toml -v /var/run/docker.sock:/var/run/docker.sock –name traefik –network traefik traefik:2.6

Das sollten Sie können Greifen Sie auf das Dashboard zu, indem Sie in Ihrem Browser zu traefik.example.com gehen. Wenn Sie die Webbenutzeroberfläche nicht als Route verfügbar machen möchten und immer von Ihrem lokalen Computer darauf zugreifen, können Sie stattdessen Port 8080 in Ihrem Traefik-Container veröffentlichen. Ändern Sie Ihre Datei traefik.toml mit dem folgenden Abschnitt:

[api] Dashboard = wahr unsicher = wahr docker run -d -p 8080:8080 -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD /traefik.toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock –name traefik –network traefik traefik:2.6 Werbung

Dadurch können Sie über http://localhost:8080 auf das Dashboard zugreifen. Dieser Ansatz sollte nicht in sicheren Produktionsumgebungen verwendet werden, ermöglicht aber eine schnellere Einrichtung lokaler Experimente.

Fazit

Traefik ist eine vielseitige Reverse-Proxy-Lösung für Ihre Container . In diesem Artikel haben wir nur die grundlegendsten seiner Funktionen behandelt. Über die grundlegende Verwendung mit Docker hinaus arbeitet Traefik auch mit führenden Container-Orchestrierungslösungen wie Kubernetes, Docker Swarm und Mesos.

Traefik bietet eine REST-API sowie Metriken in Formaten, die von Prometheus, InfluxDB, Datadog und anderen verstanden werden Statistik Mit diesen Funktionen können Sie Traefik-Bereitstellungen zusammen mit den anderen Infrastrukturkomponenten in Ihrem Stack automatisieren und instrumentieren. Es ist eine ideale Möglichkeit, containerisierte Arbeitslasten weltweit zu veröffentlichen, ohne eine vollständige Orchestrierungslösung zu verwenden.