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の設定を忘れずに。
以上です。
広告