./traefik bug
A Scalable and Highly Available Edge Router
Browse the slides: Use the arrows
Change chapter: Left/Right arrows
Next or previous slide: Top and bottom arrows
Overview of the slides: keyboard’s shortcut "o"
Speaker mode (and notes): keyboard’s shortcut "s"
Emile vauge
🇫🇷 Developer
Creator of Træfik, Founder of Containous
We Believe in Open Source
We Deliver Traefik
Commercial Support for Traefik
20 people, 90% tech
Why, Mr Anderson?
That You Don’t Have to Write This Configuration File…?
MIT License
21,000+ ⭐
600M+ ⬇️
2000+ LGTM
350+ 👷
Ecosystem (Docker, Kubernetes, Etcd, Consul…)
Fast & "low level"
Fat binary
OSS friendly (Easy to learn/read)
./traefik bug
Autofills the issue template (environment, configuration files, …)
Keep It Simple
With Docker:
entrypoint:
image: traefik:v1.7
command:
- "--docker"
- "--docker.domain=mycompany.org"
- "--acme.email=ssl-admin@mycompany.org"
- "--acme.httpChallenge.entryPoint=http"
# Or you could use a TOML file with "--configFile=/etc/traefik/traefik.toml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# https://www.mycompany.org
webserver:
image: nginx:alpine
labels:
- "traefik.frontend.rule=Host:www.mycompany.org"
# https://mycompany.org/webterminal
webterminal:
image: tsl0922/ttyd
labels:
- "traefik.frontend.rule=PathPrefixStrip:/webterminal"
expose:
- "7681"
# http://mycompany.org/jenkins
jenkins:
image: jenkins/jenkins:lts
labels:
- "traefik.frontend.rule=PathPrefix:/jenkins"
- "traefik.port=8080" # Because 50000 is also exposed
environment:
- JENKINS_OPTS=--prefix=/jenkins
# http://mycompany.org/gitserver
gitserver:
image: gitea/gitea:1.5
labels:
- "traefik.frontend.rule=PathPrefixStrip:/gitserver"
- "traefik.port=3000" # Because 22 is also exposed
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
# kubernetes.io/ingress.class: 'nginx'
kubernetes.io/ingress.class: 'traefik'
spec:
rules:
- host: mycompany.org
http:
paths:
- path: "/whoami"
backend:
serviceName: whoami
servicePort: 80
$ traefikeectl install \
--licensekey="j1fIw4wmYHsnuTM6VUmiHAKnVzLtaQHX" \
--dashboard \
--kubernetes
# Send both requests to backend service:
# https://api.mycompany.com/v2
# https://api-v2.mycompany.com
rule=(Host('api.mycompany.com') && PathPrefix('/v2')) || Host('api-v2.mycompany.com')
New WebUI
Newmetrics
UDP
YAML
TLS stores & options
Canary
stickers!
docker run -it containous/jobs