traefikのinsecureなし・BASIC認証ありのダッシュボードを使う。
最後にymlファイルの関係個所全体を掲載。
使うオプション
insecureをtrueにしないで、dashboardをtrueにする。といってもデフォルトでtrueになっているようだ。しかし、明示しておいたほうがいい:
api:
dashboard: true
これを静的設定に加える。
そしてルータルールで捕捉できるように動的設定を追加する、ための準備を行う。その準備がfile providerの設定。
動的設定はその後に行う。
file provider
file providerは、動的設定をymlファイルなどから定義できるようにするもの。ファイルの指定方法は2つあり:
filenameを使用して、ファイルパスを直に指定するdirectoryを使用して、ファイルを含むディレクトリを指定する
のいずれかで指定できる。
dashboardのルータルールは動的設定で行うので、ymlファイルを作成してfile providerを設定して読み込むという流れが最適だと思われる。
そのfile providerの定義は静的設定にて:
providers:
# 既存のproviderは省略
file:
directory: /etc/traefik/conf
と定義するだけ。/etc/traefik/confディレクトリのファイルを調べて動的設定として扱ってくれる。
必要ならファイルの変更を監視するためにwatch: trueを指定できる。そのほかの設定は公式ドキュメントにて: File - Traefik
file providerを定義出来たらあとはdashboardの動的設定を行えばいい。
dashboardの動的設定
公式ドキュメントのものをほぼそのまま定義した:
# Dynamic Configuration
http:
routers:
dashboard:
rule: Host(`dashboard.example.com`)
service: api@internal
middlewares:
- bAuth
tls:
certresolver: someresolver
middlewares:
bAuth:
basicAuth:
users:
- "admin:$2y$05$bU/fW6ZqK8tZc87PQ4lspO1KT0X0Fea3akP06W7YnJ3xSMJw3olGy"
ruleで指定したパターン(自由)にマッチするリクエストがserviceで指定したapi@internal(固定)にルーティングされる。
一方で、誰にでもアクセス可能なのは困る。そのためbasic認証を行うようにする。ミドルウェアのbAuthを使用するようにして、bAuthでbasic認証の設定を行う。平文で送られるが、httpsの通信路なら安全なので、httpはhttpsにリダイレクトさせる。
basicAuthのusersに記述するのは、basic認証のユーザ情報であり、これは、htpasswdを使って生成しろとドキュメントにあるので生成する。
ローカルのhtpasswdがある場合は特に問題なく生成できるが、もしない環境でかつdockerは使えるならば:
$ docker run --rm -it alpine sh -c 'apk -q update && apk -q --no-cache add apache2-utils && htpasswd -n -B admin'
New password:
Re-type new password:
admin:$2y$05$EXCvjKkhCdSuAqSX0yvya.zTHJxc.bOy7Pr1akBbu3OVtsOi.yHQS
などで、サクッと生成できる。ユーザ名adminやhtpasswdのオプションは必要に応じて調整する。
また、basic認証を使うときはTLSを使うのでcertresolverを設定している。Let's encryptを使っていれば大体設定済みなので省略。以前書いたcertresolverの設定: リバースプロキシとしてnginx-proxyの代わりにtraefikを導入 | ikapblog
全体
以上のことを踏まえて必要なymlファイルは以下のようになる。
静的設定
まずは静的設定から:
# Static configuration
# /etc/traefik/traefik.yml
# 関連性が薄いものは省略
providers:
# other providers...
file:
directory: /etc/traefik/conf
entrypoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
certificatesresolvers:
someresolver:
acme:
# 省略
api:
dashboard: true
dashboardの動的設定
続いて、dashboardの動的設定:
# Dynamic Configuration
# /etc/traefik/conf/dashboard.yml
http:
routers:
dashboard:
rule: Host(`dashboard.example.com`)
service: api@internal
middlewares:
- bAuth
tls:
certresolver: someresolver
middlewares:
bAuth:
basicAuth:
users:
- "admin:$2y$05$bU/fW6ZqK8tZc87PQ4lspO1KT0X0Fea3akP06W7YnJ3xSMJw3olGy"
おわり
わかれば簡単。file providerがあんまり分かってなかったが実際使ってみるとよくわかる。
コンテナが正しく認識されているかどうか調べたかったのでダッシュボードが使えて助かった。
前調べたときはinsecureしかなかったかと思っていたが、どうやら隅まで見ていなかったのかも知れない。
ホスト名をパターンマッチで使うときは、DNSの設定を忘れずに。
以上です。
広告


