2017-03-01 2 views
4

Für die Verwendung von traefik als Reverse-Proxy vor einem Docker-Container, dessen dynamische IP-Adresse sich im Laufe der Zeit ändern kann, kommt traefik mit einem docker backend. Alle Beispiele, die ich für die Einrichtung finden konnte, folgen dem gleichen Muster:traefik reverse-proxy mit docker backend - konfiguriere frontend rules in der traefik-config-datei und nicht über container label

Zuerst traefik in docker Modus ohne eine zusätzliche Konfigurationsdatei, aktivieren Host-Netzwerk-Modus (optional, damit Traefik alle Docker-Netzwerke auf dem Host zu sehen falls erforderlich) und montieren Sie den Docker Unix-Socket, damit Traefik Container starten und stoppen kann.

docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug 

Starten Sie dann einen anderen Behälter und stellen Sie zumindest die folgenden labels:

  • traefik.backend: "some-Backend-name"
  • traefik.frontend.rule: „Host: localhost ; Methode: GET“(oder was auch immer Ihre Regeln sind)
  • traefik.port: 80 (oder was auch immer Port Container macht intern)

Beispiel:

docker run --rm --name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx 

Dann ein curl localhost tun, kann man in den Protokollen des traefik Behälter sehen, dass er die Anforderung nahm und an den NGINX Behälter geleitet.

So weit, so gut ... aber ich mag nicht die Tatsache, dass ich meine Reverse-Proxy-Weiterleitungsregeln (zB forward Host: some.host.name zu container xxx) innerhalb der Anwendung selbst konfigurieren muss (Wo meine docker-compose-Dateien beim Einrichten der Container, Labels etc. normalerweise stehen. Stattdessen möchte ich dies von der Anwendung trennen und stattdessen als Teil der Traefik-Konfiguration konfigurieren.

Ist das irgendwie möglich? Was ich versucht wird Weglassen der traefik.frontend.rule Etikett aus dem Behälter Beispiel nginx und stattdessen montieren Sie die folgende Konfigurationsdatei für traefik:

[frontends] 
    [frontends.frontend1] 
    backend = "some-backend-name" 
    [frontends.frontend1.routes.test_1] 
    rule = "Host: localhost; Method: GET" 

Der Startbefehl für traefik wird somit:

docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug 

Doch dies tut scheinbar nicht die Frontend-Regel aus der Konfigurationsdatei mit dem Backend-Label aus dem Nginx-Container anhängen. curl localhost gibt jetzt einen 404/Not found Fehler zurück.

Antwort

0

Dies ist wahrscheinlich eine Reihenfolge der Vorgänge Problem. Die Aktivierung der Debug-Protokollierung in der Konfiguration (debug = true) zeigt, dass traefik zuerst die Frontend-Regeln der Konfigurationsdatei analysiert und erst später Frontends und Backends basierend auf dem, was in Docker läuft, generiert.

Dies bedeutet, dass die Andock-Backends nicht existieren, wenn die Frontends von Config erstellt werden, und es wirft und Fehler.

Eine Lösung besteht darin, Ihre Regelkonfiguration in eine separate Datei zu stellen (z. B. rules.toml als shown in the docs) und die watch = true-Anweisung zu Ihrer Konfiguration hinzuzufügen. Dies bedeutet, dass die Frontend-Regeln, die Sie dort definieren, aktualisiert werden, nachdem die Backends von Docker generiert wurden.

Wir sollten wahrscheinlich einen Bug dafür einreichen, weil es nicht genau wünschenswerte Funktionalität ist.

+0

Danke für Ihre Eingabe. Wenn Sie dies jedoch versuchen, ist das Ergebnis genau das gleiche. Wenn Sie ein funktionierendes Beispiel dafür finden, lassen Sie es mich wissen. – Dirk

1

die Uhr Flagge scheint nur unter der Bedingung von rule.toml das erste Mal geändert funktioniert.

In Ihrem Fall, schlage ich vor, Sie schreiben einen Dienst, um Ihre Regel in etcd oder Tierpfleger zu aktualisieren. Der Service read etcd ändert und aktualisiert traefik configure in etcd.

Verwandte Themen