Fri. Apr 3rd, 2020

Traefik v2.2 releases: modern HTTP reverse proxy and load balancer

5 min read

Traefik (pronounced traffic) is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy. Traefik integrates with your existing infrastructure components (DockerSwarm modeKubernetesMarathonConsulEtcdRancherAmazon ECS, …) and configures itself automatically and dynamically. Pointing Traefik at your orchestrator should be the only configuration step you need.

Imagine that you have deployed a bunch of microservices with the help of an orchestrator (like Swarm or Kubernetes) or a service registry (like etcd or consul). Now you want users to access these microservices, and you need a reverse proxy.

Traditional reverse-proxies require that you configure each route that will connect paths and subdomains to each microservice. In an environment where you add, remove, kill, upgrade, or scale your services many times a day, the task of keeping the routes up to date becomes tedious.

This is when Traefik can help you!

Traefik listens to your service registry/orchestrator API and instantly generates the routes so your microservices are connected to the outside world — without further intervention from your part.

Run Traefik and let it do the work for you! (But if you’d rather configure some of your routes manually, Traefik supports that too!)



  • Continuously updates its configuration (No restarts!)
  • Supports multiple load balancing algorithms
  • Provides HTTPS to your microservices by leveraging Let’s Encrypt (wildcard certificates support)
  • Circuit breakers, retry
  • See the magic through its clean web UI
  • Websocket, HTTP/2, GRPC ready
  • Provides metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB)
  • Keeps access logs (JSON, CLF)
  • Fast
  • Exposes a Rest API
  • Packaged as a single binary file (made with ❤️ with go) and available as a tiny official docker image

Changelog v2.2


  • [acme,middleware,tls] Entry point redirection and default routers configuration (#6417 by ldez)
  • [consul,etcd,kv,redis,zk] Add KV store providers (dynamic configuration only) (#5899 by ldez)
  • [consulcatalog,docker,marathon,rancher,udp] Add UDP in providers with labels (#6327 by juliens)
  • [docker] Fix traefik behavior when network_mode is host (#5698 by FuNK3Y)
  • [docker] Support SSH connection to Docker (#5969 by sh7dm)
  • [healthcheck] Do not follow redirects for the health check URLs (#5147 by coder-hugo)
  • [k8s,k8s/crd,udp] Add UDP support in kubernetesCRD provider (#6348 by jbdoumenjou)
  • [k8s,k8s/crd] Add TLSStores to Kubernetes CRD (#6270 by dtomcej)
  • [k8s,k8s/crd] Add namespace attribute on IngressRouteTCP service (#6085 by jbdoumenjou)
  • [k8s,k8s/ingress] Support ‘’ ingress apiVersion (#6171 by ldez)
  • [k8s,k8s/ingress] Update deprecated function call in k8s providers (#5241 by Wagum)
  • [k8s,k8s/ingress] Add Ingress annotations support (#6160 by ldez)
  • [k8s,k8s/ingress] systematically call updateIngressStatus (#6148 by mpl)
  • [logs,middleware] Rename the non-exposed field “count” to “size” (#6048 by sylr)
  • [logs,middleware] Add http request scheme to logger (#6226 by valtlfelipe)
  • [logs] Decrease log level for client related error (#6204 by sylr)
  • [metrics] Add metrics about TLS (#6255 by sylr)
  • [middleware] Add period for rate limiter middleware (#6055 by mpl)
  • [middleware] Let metrics libs handle the atomicity (#5738 by sylr)
  • [middleware] Rework access control origin configuration (#5996 by dtomcej)
  • [middleware] Add serial number certificate to forward headers (#5915 by dkijkuit)
  • [rancher] Duration order consistency when multiplying number by time unit (#5885 by maxifom)
  • [server,udp] UDP support (#6172 by mpl)
  • [service] Use EDF schedule algorithm for WeightedRoundRobin (#6206 by pkumza)
  • [service] Support mirroring request body (#6080 by dmitriyminer)
  • [tls] Allow PreferServerCipherSuites as a TLS Option (#6248 by dtomcej)
  • [tracing] Update APM client. (#6152 by ldez)
  • [tracing] Elastic APM tracer implementation (#5870 by amine7536)
  • [udp,webui] WebUI: add udp pages (#6313 by matthieuh)
  • [webui] Web UI: Polling on tables (#5909 by matthieuh)
  • [webui] Proxy API to Traefik in dev mode (#5980 by sh7dm)
  • [webui] Web UI: Table infinite scroll (#5875 by matthieuh)
  • [webui] Web UI: Take off logic from generic table component (#5910 by matthieuh)
  • [webui] Add dark theme for Web UI (#6036 by sh7dm)
  • Update dependencies (#6359 by ldez)

Bug fixes:

  • [acme] Update go-acme/lego to v3.5.0 (#6491 by ldez)
  • [authentication,middleware] digest auth: use RequireAuthStale when appropriate (#6569 by mpl)
  • [file] Revert “Allow fsnotify to reload config files on k8s (or symlinks)” (#6416 by juliens)
  • [internal] Fix entry point redirect behavior (#6512 by ldez)
  • [internal] Router entry points on reload. (#6444 by ldez)
  • [k8s,k8s/crd] Improve kubernetes external name service support (#6428 by rtribotte)
  • [k8s,k8s/ingress] fix: Ingress TLS support (#6504 by ldez)
  • [k8s,k8s/ingress] Improvement of the unique name of the router for Ingress. (#6325 by ldez)
  • [kv,redis] Update valkeyrie to fix the support of Redis. (#6291 by ldez)
  • [kv] fix: KV flaky tests. (#6300 by ldez)
  • [etcd,kv] fix: etcd provider name. (#6212 by ldez)
  • [middleware] fix: period field name. (#6549 by ldez)
  • [middleware] fix: custom Host header. (#6502 by ldez)
  • [server,udp] udp: replace concurrently reset timer with ticker (#6498 by mpl)
  • [server] Drop traefik from default entry points. (#6477 by ldez)
  • [server] fix: use MaxInt32. (#5845 by ldez)
  • [tracing] Disable default APM tracer. (#6410 by ldez)
  • [udp] Add missing generated element for UDP. (#6309 by ldez)
  • [udp] Build all UDP services on an entrypoint (#6329 by juliens)


  • [authentication,middleware] docs: terminology, replace ‘encoded’ by ‘hashed’ (#6478 by debovema)
  • [acme] Doc: fix wrong name of config format (#6519 by Nek-)
  • [docker] Fix example values for swarmModeRefreshSeconds (#6460 by skjnldsv)
  • [k8s,k8s/crd,sticky-session] docs: clarify multi-levels stickiness (#6475 by mpl)
  • [k8s,k8s/crd] doc: fix terminationDelay word case. (#6532 by ldez)
  • [k8s,k8s/crd] Update the k8s CRD documentation (#6426 by jbdoumenjou)
  • [k8s,k8s/ingress] Improve documentation for kubernetes ingress configuration (#6440 by rtribotte)
  • [k8s/helm] Update traefik install documentation (#6466 by mmatur)
  • [provider] Update supported providers list. (#6190 by ldez)
  • [tcp,tls] Specify passthrough for TCP/TLS in its own section (#6459 by mpl)
  • doc: Use neutral domains. (#6471 by ldez)
  • doc: fix typo. (#6472 by ldez)
  • Improve ping documentation. (#6476 by ldez)
  • Remove @dduportal from the maintainers team (#6464 by emilevauge)
  • Fix wrong copy/pasted with service name warning (#6510 by Nek-)
  • Update migration documentation (#6447 by ldez)
  • Update version references. (#6434 by ldez)
  • Fix broken documentation link (#6430 by pbek)


  • [rancher] Stop using fork of go-rancher-metadata (#6469 by ibuildthecloud)
  • Merge current v2.1 branch into v2.2 (#6564 by ldez)
  • Merge current v2.1 branch into v2.2 (#6525 by ldez)
  • Merge current v2.1 branch into v2.2 (#6516 by ldez)
  • Merge current v2.1 branch into master (#6429 by ldez)
  • Merge current v2.1 branch into master (#6409 by ldez)
  • Merge current v2.1 branch into master (#6302 by ldez)
  • Merge current v2.1 branch into master (#6216 by ldez)
  • Merge current v2.1 branch into master (#6138 by ldez)
  • Merge current v2.1 branch into master (#6004 by ldez)
  • Merge current v2.1 branch into master (#5933 by ldez)