Expertenwissen

Traefik HTTP/3 Tutorial Konfiguration

Unter den Webtechnologien stechen zwei Entwicklungen hervor, die das Potenzial haben, die Art und Weise, wie Dienste im Internet bereitgestellt und genutzt werden, zu revolutionieren: HTTP/3 und Traefik. Jede dient einem bestimmten Zweck, aber gemeinsam verbessern sie die Leistung, Sicherheit und Skalierbarkeit der Web-Infrastruktur.

HTTP/3 führt eine grundlegende Änderung der zugrundeliegenden Transportschicht ein, indem es QUIC (Quick UDP Internet Connections) anstelle von UDP einsetzt. Mit dieser Umstellung werden wichtige Probleme angegangen, die bei früheren Versionen vor allem bei verlustbehafteten oder instabilen Netzwerkbedingungen auftraten. Mit HTTP/3 können die Nutzer schnellere Verbindungszeiten, verbesserte Latenzzeiten und eine höhere Robustheit gegenüber Paketverlusten erwarten - alles wichtige Voraussetzungen für die Ära des mobilen Hochgeschwindigkeits-Internets.

Andererseits ist Traefik ein moderner HTTP-Reverse-Proxy und Load Balancer, der für moderne Cloud-basierte Architekturen entwickelt wurde. Er vereinfacht die Netzwerkkomplexität, indem er die Aufgabe des Routings von Anfragen an die entsprechenden Backend-Dienste automatisiert. Mit Traefik müssen Sie das Netzwerk nicht jedes Mal manuell anpassen, wenn sich Ihre Microservice- oder Container-Konfigurationen ändern. 

Dieser Artikel erklärt, wie man Traefik über HTTP/3 konfiguriert. Zusammen verbessern HTTP/3 und Traefik die Bereitstellung von Webanwendungen. Während HTTP/3 die Effizienz und Zuverlässigkeit verbessert, bietet Traefik einen agilen und anpassungsfähigen Ansatz für die Verwaltung des Anwendungsverkehrs.

Zusammenfassung der wichtigsten Traefik HTTP/3 Konzepte

HTTP/3 Traefik
Rolle in der Web-Infrastruktur Hypertext-Übertragungsprotokoll v3

Reverse-Proxy/Load-Balancer

Leitet Client-Anfragen weiter und verteilt den eingehenden Datenverkehr gleichmäßig.

Performance Geringere Latenzzeit Dynamisches Routing
Sicherheit Verbesserung der Sicherheit Automatisches HTTPS
Verlässlichkeit Widerstandsfähigkeit der Verbindung Entdeckung von Diensten
Netzwerk-Effizienz Staukontrolle

Middleware-Unterstützung

Ändert Anfragen/Antworten im laufenden Betrieb.

HTTP/3 Überblick

HTTP/3 ist die dritte Hauptversion des Hypertext-Übertragungsprotokolls. Sie baut auf den Grundlagen von HTTP/2 auf, ersetzt aber TCP (Transmission Control Protocol) durch QUIC. QUIC integriert Transport Layer Security (TLS) und Stream Multiplexing in ein einziges Protokoll, das über UDP (User Datagram Protocol) läuft. 

Diese Entscheidung vermeidet inhärente Probleme mit TCP, wie z. B. Head-of-Line-Blocking, bei dem die Reihenfolge der Pakete die Verarbeitungsreihenfolge vorgibt, was zu Verzögerungen führt, wenn ein Paket verloren geht. Durch die Umstellung auf QUIC ermöglicht HTTP/3 auch die Verschachtelung mehrerer Datenströme, wodurch verhindert wird, dass die Verzögerung eines Streams die anderen beeinträchtigt, was zu einer effizienteren und schnelleren Bearbeitung von Anfragen führt.

Aus technischer Sicht verbessert HTTP/3 die Webleistung erheblich, insbesondere bei weniger stabilen Netzverbindungen. Sie erhalten zum Beispiel

  • Effizienterer Verbindungsaufbau, der weniger Roundtrips erfordert als das in HTTP/2 verwendete TCP, wodurch die Gesamtlatenzzeit verringert wird.
  • Verbesserte Ausfallsicherheit der Verbindung auch bei Netzwerkänderungen, z. B. bei Änderung der IP-Adresse eines Benutzers.
  • Eingebaute Sicherheit, da HTTP/3 mit TLS 1.3 Sicherheitsfunktionen auf der Transportschicht integriert.

Eine vollständige Liste finden Sie im Kapitel HTTP/2 vs. HTTP/3.

{{banner-9="/design/banners"}}

Traefik Übersicht

Traefik ist ein moderner HTTP-Reverse-Proxy und Load Balancer, der sich in das Cloud-native Ökosystem integriert. Er fungiert als dynamischer Traffic-Manager, der Anfragen automatisch erkennt und an die am besten geeigneten Dienste weiterleitet. 

Im Gegensatz zu herkömmlichen statischen Reverse Proxies aktualisiert Traefik seine Routing-Konfigurationen automatisch, wenn Dienste in der Umgebung hinzugefügt, entfernt oder geändert werden. Diese automatische Service-Erkennung wird durch die Integration mit Standard-Container-Orchestrierungssystemen wie Kubernetes, Docker Swarm und Mesos unterstützt. Darüber hinaus bietet Traefik integrierte Unterstützung für Let's Encrypt, wodurch SSL-Zertifikate für verschlüsselten Datenverkehr automatisch abgerufen und erneuert werden können, was die Sicherheit ohne manuelle Eingriffe erhöht.

Die Rolle von Traefik in Ihrer Netzwerkinfrastruktur(Quelle)

Aus der Perspektive der Anwendungsfälle ist Traefik besonders nützlich für die Handhabung von Microservices-Architekturen. Es eignet sich hervorragend für Umgebungen, in denen sich die Infrastruktur dynamisch ändert, wie z. B. bei Anwendungen, die in Containern bereitgestellt werden, die je nach Bedarf auf- und abgebaut werden. Seine Fähigkeit zur sofortigen Anpassung an Änderungen macht es ideal für kontinuierliche Bereitstellungspraktiken.

Die umfassenden Dashboard- und Überwachungsfunktionen von Traefik bieten Echtzeiteinblicke in den Zustand und die Leistung von Microservices und erleichtern so eine effiziente Verwaltung und Fehlerbehebung. Darüber hinaus ermöglichen die Middleware-Funktionen den Entwicklern die Änderung von Anfragen und Antworten, die Implementierung von Ratenbegrenzungen oder die Authentifizierung von Anfragen, um nur einige Funktionen zu nennen.

Traefik-Installation

Holen Sie sich die neueste Binärdatei von der Versionsseite und führen Sie sie mit der Beispielkonfigurationsdatei aus.

./traefik --configFile=traefik.toml

Oder Sie verwenden das offizielle kleine Docker-Image und führen es mit der Beispielkonfigurationsdatei aus:

docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik

Oder besorgen Sie sich die Quellen und kompilieren/kompilieren Sie Traefik:

git clone https://github.com/traefik/traefik

Traefik HTTP/3 Einrichtung

Um Traefik für HTTP/3 zu konfigurieren, muss man die beiden primären Einstellungsebenen verstehen: die statische und die dynamische Konfiguration.

Die statische Konfiguration legt die grundlegenden Aspekte von Traefik fest, wie z.B. die Verbindungen zu Providern und die Einstiegspunkte, die Traefik abhört und die im Allgemeinen konstant bleiben. Sie können die statische Konfiguration mit drei Methoden erstellen.

  1. Konfigurationsdatei: Verwenden Sie eine Konfigurationsdatei (traefik.yml, traefik.yaml oder traefik.toml), die sich normalerweise in /etc/traefik/, $XDG_CONFIG_HOME/, $HOME/.config/ oder im Arbeitsverzeichnis befindet. Sie können eine andere Datei mit dem Argument --configFile angeben.
  2. Kommandozeilen-Argumente: Direkte Eingabe von Konfigurationseinstellungen beim Starten von Traefik, erreichbar über traefik --help oder in einer Docker-Umgebung über docker run traefik[:version] --help.
  3. Umgebungsvariablen: Legen Sie Konfigurationsoptionen als Umgebungsvariablen fest, die im Abschnitt Übersicht über die statische Konfigurationsumgebung in der Dokumentation beschrieben werden.

Die dynamische Konfiguration umfasst Einstellungen, die vorgeben, wie Traefik Anfragen behandelt, z. B. Routing-Regeln und Lastausgleichsstrategien. Dynamische Konfigurationen stammen von Anbietern wie Orchestrierungen, Service-Registrierungen oder einfachen Konfigurationsdateien und können während des Betriebs geändert werden, ohne dass Traefik neu gestartet oder Verbindungen unterbrochen werden müssen. In Docker-Umgebungen zum Beispiel werden dynamische Konfigurationen oft von Labels in Container-Setups abgeleitet. Wichtig ist, dass diese Schicht auch HTTPS-Zertifikate verwaltet, so dass diese nahtlos hinzugefügt, aktualisiert oder entfernt werden können.

{{banner-23="/design/banners"}}

Konfigurationsdatei mit HTTP/3-Unterstützung

Um Traefik für die Unterstützung von HTTP/3 zu konfigurieren, müssen Sie sicherstellen, dass Sie Traefik Version 2.5 oder höher haben, da die Unterstützung von HTTP/3 erst mit dieser Version beginnt. Nachfolgend finden Sie ein Beispiel für eine Traefik-Konfigurationsdatei, die grundlegende HTTP- und HTTPS-Einstiegspunkte enthält und HTTP/3 aktiviert. Bitte denken Sie daran, dass QUIC auf UDP aufbaut.

Im Folgenden finden Sie eine Beispielkonfigurationsdatei.

################################################################
# Configuration sample for Traefik v2.5+
#
# For more information on Traefik with HTTP/3: https://doc.traefik.io/traefik/
#
################################################################

################################################################
# Global configuration
################################################################
[global]
  checkNewVersion = true
  sendAnonymousUsage = true

################################################################
# Entrypoints configuration
################################################################

# Entrypoints definition
#
# Enable HTTP/3 by specifying the protocol as udp on the secure entrypoint

[entryPoints]
  [entryPoints.web]
    address = ":80"

  [entryPoints.websecure]
    address = ":443/udp"  # Specify UDP for HTTP/3 support

################################################################
# TLS Configuration
################################################################

[tls]
  [[tls.certificates]]
    certFile = "/path/to/your/cert.crt"
    keyFile = "/path/to/your/key.key"

################################################################
# Providers configuration
################################################################

# Docker provider configuration
[providers.docker]
  watch = true
  endpoint = "unix:///var/run/docker.sock"
  exposedByDefault = false

################################################################
# HTTP/3 Configuration Example
################################################################

# Enabling HTTP/3 on the websecure entrypoint
[experimental.http3]
  enabled = true

Da jede Konfiguration spezifisch für die von Ihnen gewählte Infrastruktur ist, bitten wir Sie, die offizielle Dokumentation für weitere Einzelheiten zu Rate zu ziehen.

Statische Konfigurationen

Wenn Traefik startet, verarbeitet es zunächst die statische Konfiguration (wie zuvor erklärt), um Verbindungen und lauschende Ports herzustellen. Zum Beispiel:

# Static configuration in YAML
entryPoints:
  web:
    address: :8081

Dynamische Konfigurationen

Nach der Einrichtung von Einstiegspunkten beginnen die Router von Traefik, eingehende Anfragen anhand vordefinierter Regeln in der dynamischen Konfiguration zu bewerten. Wenn eine Anfrage einer Regel entspricht, kann sie verschiedene Middleware für Transformationen durchlaufen, bevor sie an den entsprechenden Backend-Service weitergeleitet wird. Hier ist ein Beispiel dafür, wie Sie diese Komponenten in einer Konfigurationsdatei definieren könnten:

# Dynamic HTTP routing configuration in YAML
http:
  routers:
    to-whoami:
      rule: "Host(`example.com`) && PathPrefix(`/whoami/`)"
      middlewares:
      - test-user
      service: whoami

  middlewares:
    test-user:
      basicAuth:
        users:
        - test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/

  services:
    whoami:
      loadBalancer:
        servers:
        - url: http://private/whoami-service

Zusammenfassend lässt sich sagen, dass dieses Snippet Traefik so konfiguriert, dass es auf HTTP-Anfragen hört, die an example.com/whoami/ gerichtet sind, für den Zugriff eine Basisauthentifizierung verlangt und dann die authentifizierten Anfragen an einen vom whoami-Dienst definierten Backend-Dienst weiterleitet, der die Anfragen schließlich an http://private/whoami-service sendet.

{{banner-15="/design/banners"}}

TCP-Konfigurationen

Die Flexibilität von Traefik ist offensichtlich, da es sowohl HTTP- als auch TCP-Anfragen unterstützt. In den Konfigurationen können detaillierte Einstellungen für die Transportschicht festgelegt werden, um die Verwaltung von Verbindungen, wie z. B. Timeouts, TLS-Einstellungen usw., genau zu steuern. Hier sind einige Beispiele dafür, wie Transportparameter sowohl für HTTP- als auch für TCP-Verkehr konfiguriert werden können.

# Static configuration for serversTransport in YAML
serversTransport:
  insecureSkipVerify: true
  rootCAs:
    - path/to/foo.crt
  forwardingTimeouts:
    dialTimeout: 1s
    responseHeaderTimeout: 1s
    idleConnTimeout: 1s

# Static configuration for TCP serversTransport in YAML
tcpServersTransport:
  dialTimeout: 30s
  dialKeepAlive: 30s
  tls:
    insecureSkipVerify: true
    rootCAs:
      - path/to/foo.crt

Dieser strukturierte Ansatz ermöglicht Traefik eine hohe Anpassungsfähigkeit und eine effiziente Verwaltung einfacher und komplexer Routing- und Sicherheitsszenarien in dynamischen Umgebungen.

Abschließende Gedanken

Ehrlich gesagt gibt es viele Möglichkeiten, Traefik unter verschiedenen Umgebungen zu konfigurieren, und das Lesen der Dokumentation ist fast schon ein Muss. Trotz seiner Komplexität ist Traefik ein unverzichtbares Werkzeug für moderne Infrastrukturen, dank seiner robusten Fähigkeit, dynamisches Routing und Lastverteilung mit minimalem Overhead zu verwalten. Seine Anpassungsfähigkeit in verschiedenen Einsatzkontexten, von kleinen Setups bis hin zu großen, verteilten Systemen, macht es unglaublich vielseitig. Die Integration von HTTP/3 mit Traefik hat sich als ein entscheidender Vorteil erwiesen, insbesondere in Umgebungen, in denen Geschwindigkeit und Zuverlässigkeit entscheidend sind.

Weitere Fachbeiträge