12
18

More than 5 years have passed since last update.

Traefik を使ってコンテナを自動でリバースプロキシに登録する

Posted at

Traefik とは

Traefik は Go 言語で書かれたリバースプロキシです。設定を動的に変えられることが特徴で、従来のリバースプロキシで行っていたルーティングの登録などを予め設定ファイルで行っていなくてもアプリケーションサーバをリバースプロキシ配下に登録することができます。

試した環境

  • CentOS 7
  • Traefik 1.7.5

インストール

シングルバイナリを使用する方法とコンテナを使用する方法と 2 つあります。

シングルバイナリを使用する場合

GitHub からバイナリをダウンロードしてパスの通ったところに配置して下さい。

コンテナを使用する場合

traefik イメージを pull すれば使用できます。

$ docker pull traefik

使い方

コンテナを使って Traefik を起動した後、コンテナで起動したサーバをバックエンドサーバとして Traefik に自動登録する処理をやってみたいと思います。

Traefik の起動

$ docker run --name traefik -d -p 80:80 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock traefik --api --docker

traefik に渡している各オプションの説明は次のとおりです。

  • --api - ステータスを確認できるダッシュボードを使用可能にする(8080 ポートでアクセス可)
  • --docker - Docker コンテナをバックエンドに登録できるようにする

バックエンドサーバへのルーティング

次にコンテナで動くサーバを Traefik のバックエンドサーバとして登録します。ここでは containous/whoami イメージを使ってみます。

$ docker run --name whoami -d -l "traefik.frontend.rule=PathPrefixStrip:/whoami" containous/whoami

コンテナを起動するときに traefik. から始まるラベルを付与すると Traefik はそのラベルが付いたコンテナが監視対象であることを認識します。さらにラベルを使用してルーティングの設定や HTTP ヘッダの追加などを行うことができます。

  • traefik.frontend.rule

というラベルは Traefik が受信したリクエストをバックエンドサーバに転送するときのルールを定義できるラベルです。

  • PathPrefixStrip:/whoami

というのはルーティングのルールを定義したもので、リクエストが /whoami から始まるものはパスを / に変えてバックエンドサーバに転送するという意味になります。 Traefik の面白いところはこのようなルーティングの設定は従来であればリバースプロキシ側で行っていたのですが、 Traefik はバックエンドサーバ側で設定が可能であるという点です。そのため、新規にバックエンドサーバを登録したいときにわざわざリバースプロキシの設定を変更して再起動するといった作業が不要になります。

バックエンドサーバが正しく Traefik に登録されているかどうかを確認するためにリクエストを投げてみます。

$ curl http://localhost/whoami
Hostname: 79affa961863
IP: 127.0.0.1
IP: 172.17.0.3
GET / HTTP/1.1
Host: localhost
User-Agent: curl/7.29.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 172.17.0.1
X-Forwarded-Host: localhost
X-Forwarded-Port: 80
X-Forwarded-Prefix: /whoami
X-Forwarded-Proto: http
X-Forwarded-Server: 23d2da1e2c95
X-Real-Ip: 172.17.0.1

ルーティングの設定はコンテナのラベルだけでなく TOML ファイルを用いた静的な設定や REST API を使用した設定変更なども可能です。

まとめ

ナビタイムでは Traefik をコンテナで動くサーバのリバースプロキシとして試験的に使用しています。まだ機能面では知らない部分も多いですが、バックエンドサーバへのルーティングはかなり楽になりますのでぜひご活用下さい。

参考

12
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
18