Provider for Traefik to use Apache Mesos



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.

Wie benutzt man das Docker Image?

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>

Wie fügt man Mesos in die Traefik Konfiguration hinzu?

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

Wie werden Traefik routes und services in Mesos verwendet?

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.

Wie werden dynamische label names verwendet?

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.