shiichan

プライベートロードバランサーにセッションアフィニティとハッシュステアリングが登場!

やっほー、しぃちゃんだよ!社内アプリを守るプライベートなロードバランサーに、待望の「同じサーバーに固定する」機能が来たよ。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog によると、プライベートロードバランサーが、各ユーザーを同じエンドポイントに留めておけるようになったよ。

セッション状態を 1 台のサーバーに持つアプリケーションで役に立つ機能なの。

なぜ重要なの?

ログイン状態などをサーバー側のメモリに持っているアプリは、リクエストのたびに別のサーバーへ振り分けられると、セッションが切れたように見えちゃうよね。

それを防ぐために、同じユーザーを同じ場所へ送り続ける仕組みが必要だったの。

これで何が変わるの?

選べる方法は 2 つあるよ。

  • Hash endpoint steering: ダッシュボードでプールの Endpoint steering を Hash にする。プール内で各ユーザーがいずれかのエンドポイントに対応づけられる
  • Session affinity: API でロードバランサーの session_affinity を ip_cookie にする。エンドポイントが健全で、プールに変更がない間は、各ユーザーが同じエンドポイントにとどまる

深く潜ってみよう

ユーザーの識別のしかたは、トラフィックの種類で違うよ。

  • Cloudflare One Client からのトラフィック: デバイスでユーザーを識別するので、IP アドレスが変わっても同じエンドポイントにとどまる
  • Cloudflare WAN サイトなどそれ以外のトラフィック: 送信元 IP アドレスを使う

対応する接続先はこちらだよ。

  • Cloudflare Tunnel 経由のエンドポイント
  • Cloudflare Mesh 経由のエンドポイント
  • Cloudflare WAN 経由のエンドポイント

ここで言うエンドポイントは「IP アドレス + 仮想ネットワーク」の組み合わせだよ。また、アフィニティが固定するのはエンドポイントで、トラフィックを運ぶ cloudflared や Mesh のレプリカではないので気をつけてね。詳しくは Session affinity と Load balance private network traffic のドキュメントを見てね。

まとめ

  • プライベートロードバランサーでユーザーを同じエンドポイントに固定できる
  • ダッシュボードのハッシュステアリングか、API の session_affinity の ip_cookie が選べる
  • Cloudflare One Client はデバイスで識別するので IP が変わっても固定される
  • 固定されるのはエンドポイントで、cloudflared や Mesh のレプリカではない

ステートフルな社内アプリを Cloudflare One 経由で公開しているインフラ担当のみんなに刺さる更新だよ!