3 ポイント 投稿者 GN⁺ 2024-05-06 | 1件のコメント | WhatsAppで共有

コンテナを使わない場合でも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件のコメント

 
GN⁺ 2024-05-06
Hacker Newsの意見
  • Traefikの長所と短所の比較
    • 長所: Let's Encryptの自動統合により、NGINXからTraefikへ移行
    • 短所: ドキュメント化が十分ではなく、ログも不足しており、証明書の再生成が断続的に失敗して本番環境で障害を起こした
    • 結果的に再びNGINXへ戻った
  • TraefikよりCaddyを使うことを好む意見
    • CaddyfileはTraefikのYAML設定より管理がはるかに簡単
    • CaddyのCoraza WAFなど、さまざまなプラグイン対応
  • TraefikがNGINXに対して優位性を持つユースケースの議論
    • 数十個規模のコンテナを持つ小規模なDockerホスト環境では、NGINX Proxy Managerで十分
    • K3sではデフォルトでTraefikが設定されており、K8sクラスターを検証用にすばやく構築するのに有利
  • CaddyからTraefikへ移行を検討する場合
    • Caddyの長所: Dockerラベルベースの自動設定、TLS証明書管理、DNSの自動設定など
    • Caddyの短所: ワークロード再起動時にCaddyが完全に再起動され、一時的にサービスが停止し、ワイルドカード証明書の設定が複雑
    • K8s環境でTraefikを使った経験が良かったため、個人プロジェクトでも適用を検討中
  • Traefikの動的設定とデバッグの難しさから、Caddyへ移行した体験談
    • Caddyは構成が簡潔でレイヤーが少ないため、設定がはるかに容易
  • Traefikを長期間使用して静的設定の長所を実感
    • Dockerラベルを用いた動的設定の難しさとデバッグの手間
    • テンプレートエンジンを使って、ホスト/ターゲット/ポートの組み合わせによるシンプルな静的設定ファイルを生成
    • Ansibleで設定ファイルの生成と配布を自動化
  • HAProxyとの比較
    • 10年以上HAProxyを使用しており、ランタイムAPIによる動的設定などクラウド時代に合わせて近代化
  • Traefik使用時の最大の長所と短所
    • 長所: コンテナラベルを通じて設定を渡せるため、Traefikの設定自体をほぼ変更する必要がない
    • 短所: Traefikの正しい発音が難しい("trey-feek"などと呼びたくなる)