Open7

Cloudflare Load Balancing メモ

voluntasvoluntas

なぜ採用したのか

マルチクラウドを採用したいが、自前で LB を立てるのはめんどくさい、そこで最初は Cloduflare Workers を使おうと考えていたが、 Cloudflare Load Balancing の存在をしり試してみたところ文句ない機能と性能だったので採用した。

費用はどうなのか

転送量での課金は一切ない。2 オリジンまでは $5/月 という安さも魅力だった。1 オリジン追加する毎に $5/月 かかる。

1か月間のDNSリクエスト(「クエリ」)の数をカウントします。 アカウント内のすべてのロードバランサーで共有される最初の500,000件のクエリは無料です:それを超える使用は、500,000クエリあたり50セントで課金され、次の500,000件のクエリに切り上げられます。

https://support.cloudflare.com/hc/ja/articles/115005254367-Cloudflare-Load-Balancingの請求

実際にどのように利用しているのか

前段に Cloudflare Load Balancing (以下 Cloudflare LB) を置いて、後ろにマルチクラウドのサーバを立てている。 Vultr と Linode で 1 台ずつ立てている。

Cloudflare LB は Edge にいる。Edge 証明書 (自動更新) インストールしておけば後ろに置くサーバは Cloudflare Origin 証明書(15 年)をインストールしておけば良い。

Image from Gyazo

Image from Gyazo

Image from Gyazo

ブラウザ -> Cloudflare DNS -> Cloudflare WAF -> Cloudflare Workers -> Cloudflare LB -> Vultr | Linode

という構成になっている。

Linode と Vultr は Go の Echo フレームワークを利用したサーバで、HTTPS で Listen している。FW を利用し 443 は Cloudflare IP 以外からのアクセスは受け付けないようにしている。

IP Ranges | Cloudflare

ロードバランサーの設定画面

Image from Gyazo

DNS の画面

Image from Gyazo

採用してみてどうか

不満は特になくむしろ、快適でしかない。WAF と Zero Trust と DNS と Workers と LB を Cloudflare で統一できているのは楽でしかない。ベンダーロック様々。Cloudflare が落ちたらどうしようもないと思うがそれは諦めている。

バックエンドが Go ということもあり LB からの HTTPS の処理で遅くなることもない。性能面での懸念も特にない。

何も考えずに HTTP/2 や HTTP/3 や TLS 1.3 になる。

Image from Gyazo

voluntasvoluntas

プール

複数のオリジンを 1 プールとして登録しておき、そのプールすべてがだめになったらフォールバックするプールも用意できる。

https://developers.cloudflare.com/load-balancing/understand-basics/pools/

モニター

LB によくある機能としてオリジンに対してヘルスチェックを行い、応答がなかったらそのサーバは利用しないという標準的な機能はもちろん入っている。

https://developers.cloudflare.com/load-balancing/understand-basics/monitors/

voluntasvoluntas

​​Zero Downtime Failover

https://developers.cloudflare.com/fundamentals/get-started/task-guides/origin-health/pro/#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 (オリジンに到達できません)