Private Network Load Balancing を使うと、Cloudflare Tunnel 経由で接続したプライベートホスト名と IP へ、Cloudflare One Client のトラフィックを振り分けられます。
たとえば、内部アプリケーションが 2 つのデータセンターで稼働しており、Cloudflare One Client のユーザーが地理的に最も近いデータセンターからそのアプリケーションへアクセスできるようにしたい場合を考えます。一般的な負荷分散の構成は、次の図のとおりです。
graph LR
W[WARP クライアント] --> C{プライベートロードバランサー <br> 100.112.0.0}
C -- トンネル 1 --> cf1
C -- トンネル 2 --> cf2
subgraph D2[データセンター 2]
cf2@{ shape: processes, label: "cloudflared" }
subgraph F[プール 2]
S3["エンドポイント <br> 10.0.0.1 (VNET-2)"]
S4["エンドポイント <br> 10.0.0.2 (VNET-2)"]
end
cf2-->S3
cf2-->S4
end
subgraph D1[データセンター 1]
cf1@{ shape: processes, label: "cloudflared" }
subgraph E[プール 1]
S1["エンドポイント <br> 10.0.0.1 (VNET-1)"]
S2["エンドポイント <br> 10.0.0.2 (VNET-1)"]
end
cf1-->S1
cf1-->S2
end
style E stroke-width:2px,stroke-dasharray: 5 5
style F stroke-width:2px,stroke-dasharray: 5 5
図の構成要素は次のとおりです。
- cloudflared: 各データセンターは、それぞれ独自の Cloudflare Tunnel で Cloudflare に接続します。
cloudflaredは、ネットワーク内の 1 台または複数 のホストマシンにインストールします。 - プライベートロードバランサー IP: エンドユーザーは、ロードバランサーの IP アドレスを使ってアプリケーションに接続します。
100.112.0.0/16内の Cloudflare 割り当て IP、または RFC 1918 ↗ 範囲のカスタム/32IP のいずれかを使えます。 - ロードバランサープール: ロードバランサーは、トンネルごとに 1 つの プール を設定します。
- ロードバランサーエンドポイント: プールには 1 つ以上のエンドポイントが含まれます。各エンドポイントは、
cloudflaredの背後でアプリケーションを実行しているサーバーです。サーバーの IP が重複している場合は、トンネルごとに別の 仮想ネットワーク(VNET) を割り当てると、Load Balancer が正しいエンドポイントへ確実にリクエストをルーティングできます。
- エンドポイントの IP アドレスが Cloudflare Tunnel 経由でルーティングされること。プライベートネットワークの接続方法は、IP/CIDR を接続する を参照してください。
ロードバランサープールは、エンドポイントの論理グループです。通常は物理データセンターや地理的なリージョン単位でまとめます。プール内のエンドポイントが、トラフィックの最終的な送信先です。
プールは Cloudflare ダッシュボードまたは API で作成できます。
ダッシュボードでプールを作成する手順は、プールを作成する を参照してください。
現在の仮想ネットワーク一覧を取得するには、仮想ネットワークを一覧する API 操作を使います。
API リクエストの origins に virtual_network_id フィールドを追加すると、仮想 / プライベート IP のサポートが有効になります。API でプールを作成する方法は、Cloudflare Load Balancer API のドキュメント を参照してください。
次の例は、既存の Load Balancer プールに Cloudflare Tunnel エンドポイントを追加します。
Required API token permissions
At least one of the following token permissions is required:Load Balancing: Monitors and Pools Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/load_balancers/pools/$POOL_ID" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"origins": [
{
"name": "server-1",
"address": "10.0.0.1",
"enabled": true,
"weight": 1,
"virtual_network_id": "a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
}
]
}'-
Cloudflare ダッシュボードで Load Balancing ページを開きます。
Load Balancing を開く ↗ -
Create a Load Balancer を選択します。
-
Private Load Balancer を選択します。
-
次のステップで、このロードバランサーを次のいずれかと関連付けます。
100.112.0.0/16範囲から Cloudflare が割り当てる IP- RFC 1918 ↗ 範囲のカスタム
/32IP
-
ロードバランサーを識別できるわかりやすい名前を追加します。
-
セットアップを進めます。
セットアップが完了すると、Load Balancing ダッシュボードへ戻ります。検索バー、または Private ロードバランサーで絞り込んで、作成したロードバランサーを探せます。以降の手順で使うため、ロードバランサー IP を控えておきます。
Cloudflare One Client がロードバランサーへ接続するには、ロードバランサーの IP アドレスを Split Tunnel 設定 の WARP トンネル経由でルーティングする必要があります。
- Cloudflare ダッシュボード ↗ で Zero Trust > Team & Resources > Device profiles を開きます。
- 変更したい デバイスプロファイル を見つけ、Edit を選択します。
- Split Tunnels で、Split Tunnels モード が Exclude か Include かを確認します。
- Manage を選択します。モードに応じて次を行います。
- Exclude モード: ロードバランサー IP を含む IP 範囲を削除します。たとえば、ロードバランサーが Cloudflare 割り当ての CGNAT IP を使う場合は、
100.64.0.0/10を削除します。ロードバランサーで使っていない IP は 戻して追加する ことを推奨します。 - Include モード: ロードバランサー IP を追加します。
- Exclude モード: ロードバランサー IP を含む IP 範囲を削除します。たとえば、ロードバランサーが Cloudflare 割り当ての CGNAT IP を使う場合は、
これで、Cloudflare One Client のトラフィックがプライベートロードバランサーに到達できます。たとえば、ロードバランサーが Web アプリケーションを指している場合は、デバイス上で curl <load-balancer-IP> を実行して確認できます。このトラフィックは、設定したステアリング方式に従って、Cloudflare Tunnel 経由でプライベートエンドポイントへ振り分けられます。
ロードバランサーとそのエンドポイントを、ホスト名でユーザーから透過的に使えるようにしたい場合は、ホスト名をロードバランサーの IP アドレスへ対応付ける Gateway DNS Override ポリシー を作成できます。これにより、そのホスト名宛てのトラフィックが正しい IP に名前解決されます。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Traffic policies > Firewall policies > DNS を開きます。
-
Add a policy を選択します。
-
Traffic で、Selector が
Host、Operator がis、Value がロードバランサーに関連付けたいホスト名になる式を作成します。例:セレクター 演算子 値 Host is app.internal.local -
Action を Override に設定します。
-
Override Hostname に、プライベートロードバランサー IP を入力します(例:
100.112.0.0)。
これで、ホスト名へのリクエストはプライベートロードバランサーに名前解決されます。