Ist traefik erst einmal wie in unserem Blog-Post beschrieben als Reverse Proxy aufgesetzt, dann bieten sich durch die dynamischen Konfigurationsmöglichkeit viele Optionen, so auch die schnelle Umsetzung von BasicAuth.
In unserem Besipiel steuern wir Traefik wieder über docker service-labels:
labels:
- "traefik.backend=restapi"
- "traefik.frontend.rule=Host:api.intertech.de"
- "traefik.enable=true"
- "traefik.port=8080"
- "traefik.docker.network=reverseproxy"
- "traefik.frontend.auth.basic=testuser:$$apr1$$oQPKJJuG$$GLUGkFH1WkLN.D68SoXJQ."
Die in der Zeile - "traefik.frontend.auth.basic=..."
verwendeten
Zugangsdaten erzeugen wir am einfachsten auf der Kommandozeile:
[ff@docker01 ~]$ printf "testuser:$(openssl passwd -apr1 pass0815word)\n"
testuser:$apr1$z5asup9D$ZbeDP8zpnIm9ATNJuVGN50
Eine Besonderheit ist bei der Verwendung von docker-compose zu beachten:
Das Zeichen $
wird in docker-compose zu Interpolation von Variabeln
genutzt und muss deshalb mit einem Vorangestellten $
maskiert werden:
[ff@docker01 ~]$ printf "testuser:$(openssl passwd -apr1 pass0815word)\n" |sed 's/\$/\$\$/g'
testuser:$$apr1$$oQPKJJuG$$GLUGkFH1WkLN.D68SoXJQ.
Nachdem wir die label-Parameter in unserem docker-compose.yml mit dem zu schützenden Webservice entsprechend angepasst haben, können wir prüfen, ob alles wie gewünscht funtioniert:
[user@demo ~]$ curl -i http://docker01.cloud.intertech.de/
HTTP/1.1 401 Unauthorized
Content-Type: text/plain
Www-Authenticate: Basic realm="traefik"
Date: Tue, 03 Apr 2018 08:46:42 GMT
Content-Length: 17
401 Unauthorized
[user@demo ~]$ curl --user testuser:pass0815word -i https://docker01.cloud.intertech.de/
HTTP/1.1 200 OK
Content-Length: 401
Content-Type: text/plain; charset=utf-8
Date: Tue, 03 Apr 2018 09:36:57 GMT
Hostname: 87419ba09e2b
IP: 127.0.0.1
IP: 172.18.0.4
GET / HTTP/1.1
Host: docker01.cloud.intertech.de
User-Agent: curl/7.29.0
Accept: */*
Accept-Encoding: gzip
Authorization: Basic dGVzdHVzZXI6cGFzczA4MTV3b3Jk
X-Forwarded-For: 87.119.200.32
X-Forwarded-Host: docker01.cloud.intertech.de
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 38078126ebcc
X-Real-Ip: 87.119.200.32
docker-compose.yml:
version: '2'
services:
proxy:
image: traefik
command: --logLevel=DEBUG
networks:
- reverseproxy
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $PWD/conf/traefik.toml:/etc/traefik/traefik.toml
- TraefikAcme:/etc/traefik/acme
app:
image: emilevauge/whoami
networks:
- reverseproxy
labels:
- "traefik.backend=restapi"
- "traefik.frontend.rule=Host:docker01.cloud.intertech.de"
- "traefik.enable=true"
- "traefik.port=8080"
- "traefik.docker.network=reverseproxy"
- "traefik.frontend.auth.basic=testuser:$$apr1$$oQPKJJuG$$GLUGkFH1WkLN.D68SoXJQ."
networks:
reverseproxy:
driver: bridge
volumes:
TraefikAcme: