[MELDEN] Von der Vision zum Code: Ein Leitfaden zur Ausrichtung der Geschäftsstrategie auf die Ziele der Softwareentwicklung ist veröffentlicht!
HOL ES DIR HIER

Load-Balancing und Reverse-Proxy mit Traefik

readtime
Last updated on
February 17, 2025

A QUICK SUMMARY – FOR THE BUSY ONES

Traefik Load Balancer und Reverse-Proxyserver

Traefik ist ein moderner HTTP-Reverse-Proxy und Load Balancer, der die Bereitstellung von Microservices einfach macht. Traefik lässt sich in Ihre vorhandenen Infrastrukturkomponenten integrieren und konfiguriert sich automatisch und dynamisch.

In diesem Artikel erfahren Sie, wie Sie:

  • Traefik v1.7.12 einrichten (Version 2.0 Alpha wurde kürzlich zur Verfügung gestellt, mehr zum Thema hier) auf Rancher-Infrastruktur.

Ziel:

  • um das Offenlegen Ihrer App und das Erlangen von SSL/TLS-Zertifikaten zu vereinfachen.

TABLE OF CONTENTS

Load-Balancing und Reverse-Proxy mit Traefik

Einführung

Traefik ist ein moderner HTTP-Reverse-Proxy und Load Balancer, der die Bereitstellung von Microservices einfach macht. Traefik lässt sich in Ihre vorhandenen Infrastrukturkomponenten (Docker, Schwarmmodus, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS,...) integrieren und konfiguriert sich automatisch und dynamisch. Traefik auf Ihren Orchestrator zu richten, sollte der einzige Konfigurationsschritt sein, den Sie benötigen.

In diesem Artikel zeige ich Ihnen, wie Traefik v1.7.12 einrichten (Version 2.0 Alpha wurde kürzlich zur Verfügung gestellt, mehr zum Thema hier) auf Rancher-Infrastruktur. Es vereinfacht das Offenlegen Ihrer Anwendungen und das Abrufen von SSL/TLS-Zertifikaten vom Dienst „Let's Encrypt“.

In diesem Tutorial wird davon ausgegangen, dass Sie über Grundkenntnisse in Docker und Rancher verfügen.

Anforderungen:

  • Rancher (bereits konfiguriert und läuft)
  • Traefik — keine Sorge, es ist kostenlos
  • Einige Web-Apps zum Bereitstellen

Beginnen wir mit der Erstellung einer Konfigurationsdatei

Da wir es auf Rancher verwenden werden, müssen wir zuerst den Rancher-Anbieter aktivieren:

# Rancher Provider aktivieren.
[Viehzüchter]

# Standard-Basisdomain, die für die Frontend-Regeln verwendet wird.
Domäne = "<BASE_DOMAIN>“

# In Traefik standardmäßig Rancher-Dienste verfügbar machen.
# Wenn wahr, wird auf alle Dienste zugegriffen unter<PROTOCOL>://<SERVICE_NAME>. <STACK_NAME>. <DOMAIN>: <HTTP_PORT>
ExposedByDefault = falsch

# Stellen Sie nur Dienste bereit, die sich in einem einwandfreien Zustand befinden.
enableServiceHealthFilter = wahr

# Anmeldeinformationen für die Rancher-API
[Rancher.api]

# Endpunkt, der verwendet werden soll, wenn eine Verbindung zur Rancher-API hergestellt wird.
# Es ist ein bisschen schwierig, da wir die Domain für Rancher später in diesem Artikel konfigurieren werden.
Endpunkt = „https://<RANCHER_DOMAIN>/v1"

# Anmeldeinformationen für die Rancher-API
<RANCHER_ACCESS_KEY>Zugriffsschlüssel = "“
<RANCHER_SECRET_KEY>geheimer Schlüssel = "“

Anmeldeinformationen können auf der API/Keys-Seite von Rancher generiert werden. Klicken Sie einfach auf die Schaltfläche „Umgebungs-API-Schlüssel hinzufügen“.

Dann konfigurieren wir Einstiegspunkte für alle Anwendungen.

# Einstiegspunkte, die von Frontends verwendet werden sollen, die keinen Einstiegspunkt angeben.
# Jedes Frontend kann seine eigenen Einstiegspunkte angeben.
defaultEntryPoints = ["http“, „https"]

# Definition von Einstiegspunkten.
[Einstiegspunkte]

# HTTP-Definition.
[Einstiegspunkte.http]

# Standard 80-Port für HTTP-Anfragen.
Adresse = „:80"

# GZIP-Komprimierung aktivieren
# Antworten werden komprimiert, wenn:
# - Der Antworttext ist größer als 512 Byte
# - Und der Accept-Encoding-Anforderungsheader enthält gzip
# - Und die Antwort ist noch nicht komprimiert
komprimieren: wahr

# HTTPS-Definition.
[Einstiegspunkte.https]

# Standardport 443 für HTTPS-Anfragen.
Adresse = „:443"

# Aktivieren Sie die TLS-Verschlüsselung auf HTTPS-Endpunkten.
[Einstiegspunkte.https.tls]

Um Zertifikate von „Let's encrypt“ korrekt zu erhalten, müssen wir das ACME-Protokoll (Automatic Certificate Management Environment) aktivieren.

# ACME aktivieren.
[Acme]

# E-Mail-Adresse, die für die Registrierung bei Let's Encrypt verwendet wurde.
E-Mail = "<EMAIL_ADDRESS>“

# Datei, die für die Speicherung von Zertifikaten verwendet wird.
storage = „/etc/traefik/acme/acme.json“

# Einstiegspunkt zum Proxy, auf den Acme Zertifikate anwenden.
entryPoint = „https“

# Aktiviere die Zertifikatsgenerierung für Frontend-Hostregeln.
onHostRule = wahr

# Verwenden Sie eine HTTP-01 ACME-Herausforderung.
[ACME.Http-Herausforderung]

# VERWENDEN SIE DEN HTTP-Endpunkt für diese Herausforderung.
Einstiegspunkt = „http“

Jetzt können wir die Domain für Rancher konfigurieren.

[datei]

[Backends]

# Setze den Namen des Backends, das Rancher beschreibt. Wir nennen es „Rancher“.
[Backends.Rancher]

[backends.rancher.servers]

[backends.rancher.servers.server0]

# URL zum Rancher-Server.
url = „http://<RANCHER_IP>:<RANCHER_PORT>“

# Da es sich um einen Rancher mit einer einzigen Instanz handelt, können wir das Gewicht auf 1 setzen. Alle Anfragen werden von diesem Server bearbeitet.
Gewicht = 1

[Frontends]

# Setze den Namen des Frontends, das Rancher beschreibt. Wir verwenden den gleichen Namen „Rancher“.
[Frontends. Rancher]

# Backend, das Anfragen bearbeitet.
Backend = „Rancher“

# Leiten Sie den Client-Host-Header an das Backend weiter.
passHostHeader = wahr

[frontends.rancher.routes]

[frontends.rancher.routes.route0]

# Benutze dieses Frontend nur, wenn die Anfrage einen Host-Header mit unserer Domain enthält.
Regel = „Host:<RANCHER_DOMAIN>“

Jetzt sollte Traefik alle Anfragen an korrekt bearbeiten Rancher-Server. Darüber hinaus sollte es ein neues Zertifikat dafür erhalten <RANCHER_DOMAIN>und die Verbindung zu ihm über das verschlüsselte HTTPS-Protokoll ermöglichen.

Wir können auch eine Option festlegen, um bei Netzwerkfehlern erneut zu versuchen, Anfragen zu senden.

[erneut versuchen]

Wir speichern die Konfigurationsdatei im Verzeichnis /home/docker/traefik/traefik.toml auf dem Server. Die gesamte Konfigurationsdatei für Traefik:

defaultEntryPoints = ["http“, „https"]

[Viehzüchter]
Domäne = "<BASE_DOMAIN>“
ExposedByDefault = falsch
enableServiceHealthFilter = wahr

[Rancher.api]
Endpunkt = „https://<RANCHER_DOMAIN>/v1"
<RANCHER_ACCESS_KEY>Zugriffsschlüssel = "“
<RANCHER_SECRET_KEY>geheimer Schlüssel = "“

[Einstiegspunkte]

[Einstiegspunkte.http]
Adresse = „:80"

[Einstiegspunkte.https]
Adresse = „:443"

[Einstiegspunkte.https.tls]

[Acme]
E-Mail = "<EMAIL_ADDRESS>“
storage = „/etc/traefik/acme/acme.json“
entryPoint = „https“
onHostRule = wahr

[ACME.Http-Herausforderung]
Einstiegspunkt = „http“

[erneut versuchen]

[datei]

[Backends]
[Backends.Rancher]
[backends.rancher.servers]
[backends.rancher.servers.server0]
url = „http://<RANCHER_IP>:<RANCHER_PORT>“
Gewicht = 1

[Frontends]
[Frontends. Rancher]
Backend = „Rancher“
passHostHeader = wahr

[frontends.rancher.routes]
[frontends.rancher.routes.route0]
Regel = „Host:<RANCHER_DOMAIN>“

Nachdem Sie diese Konfigurationsdatei auf dem Server gespeichert haben, erstellen Sie eine neue leere Datei acme.json daneben. Jetzt sind wir bereit, einen neuen Stack auf Rancher for Traefik zu erstellen.

Erstelle einen neuen Stack für Traefik

Wichtiger Hinweis: Sie müssen alle anderen öffentlich zugänglichen Reverse-Proxys deaktivieren und um dies tun zu können, müssen Sie Rancher über die IP-Adresse öffnen.

Nachdem Sie den zuvor funktionierenden Reverse-Proxy gestoppt und sichergestellt haben, dass keine Container mit öffentlich zugänglichen Ports 80 oder 443 vorhanden sind, klicken Sie auf „Neuen Stack erstellen“. Laden Sie die folgende docker-compose.yml-Datei hoch (aktualisieren Sie die Volumes natürlich entsprechend dem Verzeichnis, in dem Sie die Konfigurationsdatei gespeichert haben):

Ausführung: '2'
dienstleistungen:
Verkehr:
bild: traefik:v1.7.12
stdin_open: wahr
Bände:
- /home/docker/traefik/traefik.toml:/etc/traefik/traefik.toml
- /home/docker/traefik/acme.json:/etc/traefik/acme/acme.json
tty: wahr
Anschlüsse:
- 80:80 /tcp
- 443:443 /tcp
Beschriftungen:
io.rancher.container.pull_image: Verkehr: v1.7.12

Nach der Bereitstellung sind wir bereit, Traefik zu verwenden, um Anfragen unserer eigenen Anwendungen zu bearbeiten. Außerdem sollte Rancher unter einer verschlüsselten URL verfügbar sein: https://<RANCHER_DOMAIN>

Verwenden Sie Traefik in unseren eigenen Anwendungen

Im letzten Schritt benötigen wir eine Webapplikation. Ich werde eine sehr ausgefeilte Hello World-Anwendung verwenden.

Ich werde dafür einen neuen Stack erstellen. Dinge, die für Traefik wichtig sind, sind Etiketten, die für einen bestimmten Behälter festgelegt wurden.

Aktiviere diesen Container in Traefik:

traefik.enable: 'wahr'

Legt den Container-Namen des Backends fest:

traefik.backend: node-hallo-world

Registriert den Port, auf dem die Anwendung lauscht (interner Docker-Port):

verkehr.port: '8080'

Verwenden Sie diesen Container nur, wenn die Anfrage einen Host-Header mit unserer Domain enthält:

traefik.frontend.rule: Host: <DOMAIN>

Legt die Domain fest:

traefik-Domain: <DOMAIN>

Überschreibt das Standard-HTTP-Protokoll:

traefik.frontend.protocol: https

Legt die Umleitung von HTTP zum verschlüsselten HTTPS-Protokoll fest:

traefik.frontend.redirect.entrypoint: https

Gibt 301 statt 302 für die Weiterleitung zurück:

traefik.frontend.redirect.permanent: 'wahr'

Nachdem Sie unserer Anwendung die richtigen Bezeichnungen zugewiesen haben, ist sie unter der angegebenen Domain zugänglich. Die docker-compose.yml-Datei, die ich für meine Hello World-Anwendung verwenden werde, sieht so aus:

Ausführung: '2'
dienstleistungen:
node-hallo-world:
Bild: heroku/nodejs-hello-world
Umgebung:
ANSCHLUSS: '8080'
stdin_open: wahr
tty: wahr
Beschriftungen:
io.rancher.container.pull_image: immer
traefik.enable: 'wahr'
traefik.backend: node-hallo-world
verkehr.port: '8080'
traefik.frontend.rule: Host: <DOMAIN>
traefik-Domain: <DOMAIN>
traefik.frontend.protocol: https
traefik.frontend.redirect.entrypoint: https
traefik.frontend.redirect.permanent: 'wahr'

Zusammenfassung

Traefik ist ein Reverse-Proxy, mit dem Entwickler ihre Anwendung problemlos auf Domains verfügbar machen können. Die integrierte Unterstützung für „Let's Encrypt“ erfolgt automatisch entdecken Sie neue Dienste und beziehen Sie SSL/TLS Bescheinigungen. Außerdem aktualisiert es kontinuierlich seine Konfiguration, sodass keine Neustarts erforderlich sind.

Weitere Informationen zu Traefik finden Sie auf der offiziellen Seite: https://docs.traefik.io/

Frequently Asked Questions

No items found.

Our promise

Every year, Brainhub helps 750,000+ founders, leaders and software engineers make smart tech decisions. We earn that trust by openly sharing our insights based on practical software engineering experience.

Authors

Adam Gołąb
github
JavaScript-Softwareentwickler

Full-Stack-Softwareingenieur mit 11 Jahren Berufserfahrung. Fan von React.js und Node.js.

Bianka Pluszczewska
github
Technischer Redakteur

Enthusiast für Softwareentwicklung mit 9 Jahren Berufserfahrung in dieser Branche.

Adam Gołąb
github
JavaScript-Softwareentwickler

Full-Stack-Softwareingenieur mit 11 Jahren Berufserfahrung. Fan von React.js und Node.js.

Bianka Pluszczewska
github
Technischer Redakteur

Enthusiast für Softwareentwicklung mit 9 Jahren Berufserfahrung in dieser Branche.

Read next

No items found...