コンテナを使わない場合でもTraefikを見ておくべき理由
Traefikでよく知られている点
- Traefikは、マイクロサービスの世界を支援することを目的としている
- 多くのYouTuberが、DockerやKubernetesなどのコンテナインフラを使っていることを共有している
- Traefikはコンテナとして実行され、TraefikコンテナにDockerソケットをマウントすることで、Traefik経由で公開したい他のコンテナを自動検出できる
- ラベルを使って特定のコンテナのプロキシ動作を構成できる
- TraefikはLet's EncryptからTLS証明書を自動的に取得し、新しいコンテナの存在を検知するとすぐにサービスを利用可能にする
コンテナを使わない場合でもTraefikが有用な理由
一般的な誤解: コンテナエンジンは必要ない
- Traefikはコンテナエンジンで実行する必要はなく、サービス側もコンテナエンジン上で実行する必要はない
- TraefikはGolangで書かれており、単一の実行ファイルとしてコンパイルされている
- Golangで書かれ、単一バイナリとしてコンパイルされるソフトウェアは、実際に触ってみるとかなり快適に感じる
- 配備が簡単で、完全なコントロールを維持できる
一般的な誤解: 設定ファイルもサポートしている
- コンテナを使わない場合、コンテナラベルを使うことはできないが、ラベルは分かりにくく読みづらい
- Traefikは設定ファイルでも構成できる
- Traefikは、証明書プロバイダ(例: Let's Encrypt)とエントリポイント(Traefikが待ち受けるポート)を含む「静的」構成と、ルーター、サービス、ミドルウェアを含む「動的」構成に分けている
- Traefikはファイルシステムイベントを受信し、動的部分をホットリロードできる
ドキュメントが充実している
- Traefikがベースにする概念が明確に説明されている
- 関連ページの冒頭に、選択したインスタンス構成方法の設定例がある
- ドキュメントはほとんどの要件をカバーしている
- サイドバーが役立つ
Traefikは堅牢で設計が良いように見える
- Traefikは構成が正しくない場合に警告を出し、まだランダムな問題は発生していない
- Traefikはデフォルトで大量のログを記録していないようだが、リクエスト処理の仕組みは理解しやすく、イライラせずに素早く使い始められる
とても気に入った機能
TLSパススルーとPROXYプロトコル
- TraefikはTLSパススルーとHAProxyのPROXYプロトコル(受信と送信)をサポートする
- TLSパススルーとは、独自のTLS証明書を提供するウェブサービスへトラフィックを転送できることを意味する
- プロキシでTLSを終端せずに、サービス側から直接Let's Encryptへ要求させることができる
- PROXYプロトコルは、ユーザーがまずプロキシに到達した際に失われやすい情報をより安全に転送する方法だ
- PROXYプロトコルは、対象サービス側でもサポートされている必要がある。Apache2とNginx(つまりPHP)ではサポートされており、プロトコルをサポートするサービス一覧は増えつつある
Traefik使用時の不満点
認証
- NGINXではVouch Proxyを使ってAzure ADで特定のサービスを保護している
- TraefikはNGINXの認証と同様のForwardAuthをサポートするが、Vouch ProxyはまだTraefikでは動作しない
- Keycloakインスタンスを展開してAADと統合し、ForwardAuthに使用することはできるが、そのKeycloakインスタンスを安全かつ最新の状態で維持し先に設定しておく必要がある
- traefik-forward-authはよく推奨されるが、最後のアップデートは2020年6月で、開発者はGitHubから姿を消しており依存関係の更新が必要
- 過去にoauth2-proxyで問題のあった経験がある
- HTTP2/3、タイムアウト、本文サイズ、WebSocketなどはユーザーとサービスの間のすべてのプロキシで設定が必要なため、プロキシをまたぐ運用は非常にエラーが起きやすい
- Traefik ForwardAuthはシンプルに見えるので、AADと統合するための自作ツールを作るか、traefik-forward-authをフォークして監査し、依存関係を更新する必要がある
ユーザーエージェントとIPアドレスのブロック
- archive.orgで内部サービスをアーカイブされることは望まない
- robots.txtや同様のヘッダはArchive.orgのブロックには効果がないため、クローラをブロックする方法は、
archive.org_botユーザーエージェントをブロックするかIP範囲をブロックすることだけ
- Traefikでは、サードパーティのプラグイン経由でのみユーザーエージェントまたはIPアドレスをブロックできる
- サードパーティのプラグインは更新時に考慮が必要で、セキュリティ脆弱性を引き起こす可能性があるため好ましくない
- IPAllowListミドルウェアを使えば、ブロックしたいIPを除くすべてを許可できる
- IP範囲を計算することができ、直接ブロックするよりは悪くないが、許可された側しか見えないため正確にどのサブネットがブロックされたかは分かりづらく、あまり洗練されているとは言えない
GN+の意見
- Traefikはコンテナを使うかどうかに関わらず、魅力的なリバースプロキシソリューションとして見える。特に、Golangで書かれ、単一の実行ファイルとしてコンパイルされる点が、導入と管理の容易さという大きな利点になる
- ドキュメントも整備されており、Traefikの概念理解や設定例の参照に役立つだろう
- TLSパススルーやPROXYプロトコル対応などの高度な機能も、十分にサポートされているように見える
- 一方、認証の面ではまだ満足できるソリューションがないようで、独自の認証基盤を作るか、既存プロジェクトを改修する取り組みが必要に思える
- ユーザーエージェントやIPアドレスのブロック機能もデフォルトで提供されると良いが、外部プラグインを使う以外では洗練された方法がないようだ
- NGINXの代替としてTraefikを検討する価値は十分にある。特にNGINXの設定が複雑に感じるユーザーには、Traefikの簡潔さが魅力的だろう
1件のコメント
Hacker Newsの意見