TL;DR

OSS の Application Proxy(L7 のリバースプロキシ、ロードバランサ)。インフラを自動で調べて設定を見つけ、ルーティングする。Go 製のシングルバイナリで、公式の Docker イメージもある。

なぜ必要か

再起動や接続断なしに、構成をリアルタイムで更新できるのが最大の特徴である。サービスを自動で検出して設定するので、コンテナやマイクロサービスの環境で真価を発揮する。

仕組み

コアコンセプト

リクエストがサービスに届くまでの流れを 4 つの概念で説明する。

  • EntryPoints: ネットワーク上の入口。受信ポートと TCP / UDP を定義する
  • Routers: 受信したリクエストを、処理できる Services へつなぐ。途中で Middlewares を適用する
  • Services: 実際のサービスへの到達方法(ロードバランシング)を設定する
  • Providers: Kubernetes、Docker、HashiCorp Consul、Key-Value Store などから設定を取得し、動的に更新する

設定は、起動時の「静的設定」と、実行中の「動的なルーティング設定」に分かれる。

プロトコルは HTTP、TCP、UDP に対応する。Let’s Encrypt にネイティブで対応し、証明書の取得と更新を外部ツールなしで自動化できる。RateLimit、BasicAuth、Headers、ForwardAuth、StripPrefix などの Middlewares を組み込みで持つ(OIDC など一部は Traefik Hub 側の機能)。

Docker のラベルによる自動ルーティング

Traefik は、ルーティングの設定をアプリケーションの側に任せる。Docker では、コンテナに付けた traefik.* ラベルからルーティングのルールを作り、コンテナごとに router と service を自動で生成する。ルールを指定しなければ defaultRule が適用される。

注意点

単純なスループットは nginx や HAProxy に劣る。第三者のベンチマーク(参考値)では、Traefik が約 18,000 RPS で頭打ちになり、nginx と HAProxy は 50,000 RPS を超える。アイドル時のメモリも、nginx の 5〜10 MB に対して Traefik は 50〜80 MB である。xDS やサーキットブレーカなどの高度なトラフィック制御やサービスメッシュには Envoy が向いており、Traefik は Istio などのサイドカーにはなれない。

使い分けの目安は次のとおり。

  • 高トラフィックの公開 API: nginx / HAProxy
  • 自動 TLS、ダッシュボード、組み込みの Middlewares がほしい: Traefik
  • 高度なトラフィック管理、Gateway API: Envoy 系

自分の理解

Application Proxy は本来、ファイアウォールの文脈で使う Proxy Server の一種を指す。Traefik の言う「Application Proxy」は、その古典的なセキュリティ用語というより、「L7 でトラフィックを扱うリバースプロキシ」という製品の位置付けを表す呼び方と解釈するのが自然だと思う。

関連

出典