Traefik ist ein HTTP, TCP und UDP Reverse Proxy und LoadBalancer für Microservice Umgebungen. Offiziel Unterstützt Traefik 2.x kein Apache Mesos sondern lediglich Marathon. Um auch für die Zukunft einen guten und flexiblen LoadBalancer zu betreiben, welcher nicht nur für bestimmte Mesos Framework funktioniert, haben wir einen entsprechenden Provider entwickelt.
Die Nutzung meines Traefik Docker Images ist relativ einfach. Der Unterschied zum Original besteht lediglich darin, dass hier das Verzeichnis in der die traefik.toml Datei liegt, als Volume übergeben wird. Dies hat den Vorteil, dass (sofern ACME SSL Provider verwendet werden) ACME State Files ebenfalls persistent abgelegt werden.
docker run -p 80:80 -p 443:433 -p 9000:9000 -v <config_toml_directory>:/data:rw avhost/traefik_mesos:<version>
Um Apache Mesos als Provider zu nutzen, muß die nachfolgende Konfiguration angepasst und übernommen werden.
[providers.mesos]
endpoint = "<your_mesos_master>"
principal = "<mesos_usernname>"
secret = "<mesos_password>"
SSL = false
Damit Traefik die Services kennt, zu denen entsprechende Routen erzeugt werden sollen, müssen diese in Form von Labels an den jeweiligen Mesos Tasks (oder Marathon Apps) hinzugefügt werden.
Zum Beispiel:
"traefik.enable": "true",
"traefik.http.routers.homepage-ssl.tls": "true",
"traefik.http.routers.homepage.entrypoints": "web",
"traefik.http.middlewares.homepage.redirectscheme.scheme": "https",
# The service object with the name "homepage-web" and "homepage-web-ssl" will be generated from the name of the Mesos Task (or Marathon) PortMapping object.
"traefik.http.routers.homepage-ssl.service": "homepage-web",
"traefik.http.routers.homepage.service": "homepage-web",
"traefik.http.routers.homepage.rule": "Host(`your.example.com`)",
"traefik.http.routers.homepage-ssl.rule": "Host(`your.example.com`)",
"traefik.http.routers.homepage-ssl.tls.certresolver": "sslcert",
"traefik.http.routers.homepage-ssl.entrypoints": "websecure",
"traefik.http.services.homepage.loadBalancer.healthCheck.path": "/index.html"
"traefik.http.services.homepage.loadBalancer.healthCheck.interval": "10s"
"traefik.http.services.homepage.loadBalancer.healthCheck.timeout": "3s"
Anschließend werden die Services und Router entsprechend in der Traefik Umgebung sichtbar.
Alle traefik labels benötigen einen Namen. Hier ist das z.B: “homepage”:
traefik.http.routers.homepage.entrypoints": "web"
Um dieses dynamisch erstellen zu lassen, muss dieses wie folgt umgeschrieben werden:
traefik.http.routers.__mesos_taskid__.entrypoints": "web"
Der Traefik Mesos Provider ersetzt nun sowohl im label-key als auch im label-value __mesos_taskid__
, durch die
einmalige TaskID.