I recently made the switch from the nginx reverse proxy life to Traefik. I've written a couple of other posts recently about the process:
Today's post is going to cover the final piece of the jigsaw I needed to solve before I could dump nginx, the file provider. In otherwords - how do I use Traefik to route traffic for services that aren't containers or published via another service discovery backend? In the case of this post it's Home Assistant and Blue Iris. Two critical services in my LAN that run on dedicated hardware.
As always, code can be found at github.com/ironicbadger/infra.
Traefik discourage use of the file provider, a quick google on the topc and you'll discover they think it is orthogonal to overall goals of the project. As such, the documentation is a little crypic so here's how I use it.
When I run Traefik I mount
/etc/traefik to a volume on the host. In that volume create a file called
rules.yaml. Here is what that file looks like:
http: routers: router-homeassistant: entryPoints: - websecure rule: Host(`ha.123.com`) service: service-homeassistant tls: certResolver: cloudflare router-blueiris: entryPoints: - websecure rule: Host(`bi.123.com`) service: service-blueiris tls: certResolver: cloudflare services: service-homeassistant: loadBalancer: servers: - url: "http://192.168.1.99:8123" service-blueiris: loadBalancer: servers: - url: "http://192.168.1.200:81"
This file defines routers and services, terms you should be familiar with when working with Traefik.
certresolveris not the same as
certResolverand so on.
The syntax for defining the rules to match is the same here as it would be if you were applying the label
http.routers.routername.rule=Host(`bi.ktz.me`). This is how to determine the structure of the keys in this file.
Finally, you'll need to tell Traefik to use this file in
/etc/traefik.yaml. This is configured under the
providers: docker: endpoint: unix:///var/run/docker.sock watch: true exposedByDefault: false file: filename: /etc/traefik/rules.yaml
And there we are, that's how to configure an external service to work with Traefik v2.