Cloudflare Load Balancing メモ (利用を廃止しました)
Cloudflare LB で WebSocket が突然切断される問題
現時点で Cloudflare LB で WebSocket を利用する場合は問題が起きる場合がある。充分検証為てから採用する事をオススメします。
Cloudflare Status - Billing issues relating to subscription adjustments
サブスクリプションのアップグレードおよびダウングレード時に機能が失われる問題が発生しております
このサブスクリプションのダウングレードをすると機能が停止し、復旧できなくなる問題の影響を受けて、商用環境で Cloudflare LB が完全に復旧できなくなる状況が発生しました。
ビジネスプラン (年 2400 ドル) 程度のサポート契約では、残念ながらビジネスで利用できるレベルではなかったです。もしビジネスで利用される場合は、必ずエンタープライズプランのサポート契約を検討する事をオススメします。
障害発生後は Cloudflare LB の利用を廃止しています。
Cloudflare Load Balancing
普通の LB と何が違うのかというと、WAF やら Cloudflare Workers の後ろに置けるというのが大きい。さらに今話題の Cloudflare Zero Trust も利用できる。
以下のトラフィックシーケンスをみてぐっと来た人は黙って使うべき。
参考
なぜ採用したのか
マルチクラウドを採用したいが、自前で LB を立てるのはめんどくさい、そこで最初は Cloduflare Workers を使おうと考えていたが、 Cloudflare Load Balancing の存在をしり試してみたところ文句ない機能と性能だったので採用した。
費用はどうなのか
転送量での課金は一切ない。2 オリジンまでは $5/月 という安さも魅力だった。1 オリジン追加する毎に $5/月 かかる。
1か月間のDNSリクエスト(「クエリ」)の数をカウントします。 アカウント内のすべてのロードバランサーで共有される最初の500,000件のクエリは無料です:それを超える使用は、500,000クエリあたり50セントで課金され、次の500,000件のクエリに切り上げられます。
実際にどのように利用しているのか
前段に Cloudflare Load Balancing (以下 Cloudflare LB) を置いて、後ろにマルチクラウドのサーバを立てている。 Vultr と Linode で 1 台ずつ立てている。
Cloudflare LB は Edge にいる。Edge 証明書 (自動更新) インストールしておけば後ろに置くサーバは Cloudflare Origin 証明書(15 年)をインストールしておけば良い。
ブラウザ -> Cloudflare DNS -> Cloudflare WAF -> Cloudflare Workers -> Cloudflare LB -> Vultr | Linode
という構成になっている。
Linode と Vultr は Go の Echo フレームワークを利用したサーバで、HTTPS で Listen している。FW を利用し 443 は Cloudflare IP 以外からのアクセスは受け付けないようにしている。
ロードバランサーの設定画面
DNS の画面
採用してみてどうか
不満は特になくむしろ、快適でしかない。WAF と Zero Trust と DNS と Workers と LB を Cloudflare で統一できているのは楽でしかない。ベンダーロック様々。Cloudflare が落ちたらどうしようもないと思うがそれは諦めている。
バックエンドが Go ということもあり LB からの HTTPS の処理で遅くなることもない。性能面での懸念も特にない。
何も考えずに HTTP/2 や HTTP/3 や TLS 1.3 になる。
プール
複数のオリジンを 1 プールとして登録しておき、そのプールすべてがだめになったらフォールバックするプールも用意できる。
モニター
LB によくある機能としてオリジンに対してヘルスチェックを行い、応答がなかったらそのサーバは利用しないという標準的な機能はもちろん入っている。
Zero Downtime Failover
If you have another A or AAAA record in your Cloudflare DNS or your Cloudflare Load Balancer provides another origin in the same pool, Zero-Downtime Failover automatically retries requests to your origin even before a Load Balancing decision is made.
Cloudflare currently retries only once for HTTP 521, 522, and 523 response codes.
Cloudflare DNSに別のAレコードまたはAAAAレコードがある場合、またはCloudflareロードバランサーが同じプールで別のオリジンを提供している場合、Zero-Downtime Failoverはロードバランスの決定がなされる前でも自動的にリクエストをオリジンに再送信します。
Cloudflareは現在、HTTP 521、522、523レスポンスコードに対して1回のみ再試行を行います。
Cloudflare 5XX エラーのトラブルシューティング – Cloudflareヘルプセンター
エラー521: web server is down (Webサーバーがダウンしています)
エラー522: connection timed out (接続のタイムアウト)
エラー523: origin is unreacheable (オリジンに到達できません)
WebSocket の利用
Cloudflare LB は WebSocket にも対応している。問題無く転送してくれる。
ただし Cloudflare プランの契約なしでの利用は できない と考えて良い。無料プランでは 2 回に 1 回は接続が失敗する。少なくとも Pro プランは契約は必須。