DNS-only(グレークラウド) のロードバランサーが、アドレスがホスト名(例: origin.example.com)のエンドポイントを選ぶと、Cloudflare はそのホスト名を IP アドレスに解決し、クライアントへ A/AAAA レコードを返します。これが CNAME flattening であり、Cloudflare DNS の CNAME flattening と同じ動きです。
サードパーティのエンドポイントが独自の DNS ベースのステアリングを行う場合など、一部の用途では、解決済み IP ではなく CNAME レコードそのものを返す必要があります。プールエンドポイントの flatten_cname プロパティで、エンドポイントごとに flattening をオフにできます。
エンドポイントで flatten_cname をオフにする(flatten_cname: false)のは、次の場合です。
- クライアントに、サードパーティの SaaS プロバイダーまたはクラウドエンドポイント(例:
origin-b.example.com)を指すCNAME応答を返したいとき。 - エンドポイントが、下流で動的、地理対応、またはクライアント対応のアドレスに解決されるとき。
- 2 つのホスト名エンドポイント間でフェイルオーバーし、クライアントに各プロバイダーのホスト名を直接解決させたいとき。
通常の IP ベースまたはホスト名エンドポイントで、高速な A/AAAA 応答だけが必要な場合は、flatten_cname をオンのまま(flatten_cname: true、デフォルト)にします。
flatten_cname がリゾルバーの出力を変えるのは、次のすべてが当てはまる場合だけです。
| 条件 | 必要な値 |
|---|---|
| ロードバランサーの プロキシモード | DNS-only(グレークラウド)。プロキシ済みのロードバランサーは Cloudflare の anycast IP を返す必要があるため、この設定は無視されます。 |
| エンドポイントアドレス | ホスト名(CNAME の参照先)。生の IPv4/IPv6 エンドポイントアドレスでは、この設定は効果がありません。 |
| ロードバランサーのホスト名 | ゾーン apex ではないこと。ゾーン apex に CNAME レコードは置けないため、apex ではロードバランサーは flattening にフォールバックします。 |
| 選ばれたエンドポイント | ステアリングがこのエンドポイントを選んだこと。同じプールでステアリングがエンドポイント B を選んだ場合、エンドポイント A の flatten_cname: false は効果がありません。 |
選ばれたエンドポイントが flatten_cname: false でも、上の表のいずれかの条件を満たさない場合、ロードバランサーは CNAME を flatten し、トグルがオンであるかのように A/AAAA レコードを返します。
flatten_cname は、プール内のエンドポイントごとに、name、address、weight などのエンドポイントフィールドと一緒に設定します。Cloudflare ダッシュボード、API、または Terraform で設定できます。
ダッシュボードでは、この設定はプール内の各エンドポイントにある Flatten CNAME トグルとして表示されます。トグルをオフにすると、エンドポイントのホスト名を CNAME レコードとして返します。
-
Cloudflare ダッシュボードで Load Balancing ページを開きます。
Load Balancing を開く ↗ -
Pools タブを選択します。
-
対象エンドポイントを含むプールで Edit を選択します。
-
Endpoints セクションで、変更するエンドポイントを探します。
-
Flatten CNAME をオフにします。
-
Save を選択します。
Flatten CNAME は、アドレスがホスト名のエンドポイントでのみ使えます。IP アドレスを使うエンドポイントではオフにできません。
Create Pool または Edit Pool を使い、origins 配列の各エンドポイントで flatten_cname を設定します。
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" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "primary-pool",
"origins": [
{
"name": "origin-a",
"address": "origin-a.example.com",
"enabled": true,
"weight": 1,
"flatten_cname": false
},
{
"name": "origin-b",
"address": "origin-b.example.com",
"enabled": true,
"weight": 1,
"flatten_cname": false
},
{
"name": "fallback-ip",
"address": "203.0.113.10",
"enabled": true,
"weight": 1
}
]
}'flatten_cname を省略するとデフォルトは true になり、既存のプールとエンドポイントの現在の動作を維持します。
cloudflare_load_balancer_pool リソース内の各エンドポイントに属性を設定します。
resource "cloudflare_load_balancer_pool" "primary" {
account_id = var.account_id
name = "primary-pool"
origins = [
{
name = "origin-a"
address = "origin-a.example.com"
enabled = true
weight = 1
flatten_cname = false
},
{
name = "origin-b"
address = "origin-b.example.com"
enabled = true
weight = 1
flatten_cname = false
},
{
name = "fallback-ip"
address = "203.0.113.10"
enabled = true
weight = 1
}
]
}dig でロードバランサーのホスト名を問い合わせます。
dig lb.example.com A +short- ステアリングが
flatten_cnameがfalseのエンドポイントを選んだ場合、応答セクションにはエンドポイントアドレス(例:origin-a.example.com.)を指すCNAMEレコードが含まれます。そのCNAMEの先の解決はクライアント(またはそのリゾルバー)が行います。 - ステアリングが
flatten_cnameがtrueのエンドポイント(またはアドレスが IP のエンドポイント)を選んだ場合、応答には解決済みのA/AAAAレコードが含まれます。
応答はステアリングが選ぶエンドポイントに依存するため、プールが flatten_cname: false のホスト名エンドポイントと IP エンドポイントを混在させている場合、同じロードバランサーへの繰り返しの dig クエリで CNAME と A/AAAA の応答が交互に返るのは正当な動きです。
エンドポイントのヘルスモニターはこの設定の影響を受けません。Cloudflare は常にエンドポイントのホスト名を IP に解決し、キャッシュしない DNS ルックアップで背後のサービスをプローブします。flattening をオフにしても変わるのは、DNS クエリ時にクライアントへ返す内容だけです。健全性ステータスは、実際のバックエンド到達性を反映し続けます。
エンドポイントごとのリクエスト数とステアリング判断は、エンドポイント名をキーにして Load Balancing Analytics で確認できます。CNAME を返すエンドポイント間でトラフィックがどう分散されているかを追跡できます。
- プロキシ済み(オレンジクラウド)のロードバランサー:
flatten_cnameは無視されます。プロキシ済みのロードバランサーは、Cloudflare の HTTP/HTTPS プロキシ機能を提供するため、Cloudflare の anycast IP に解決する必要があります。 - ゾーン apex のロードバランサー: ゾーン apex に
CNAMEレコードは置けないため、flatten_cnameは無視されます。 - IP エンドポイント:
flatten_cnameは効果がありません。flatten または返す対象のCNAMEがありません。 - DNS リゾルバーのキャッシュ: ほかの DNS-only ロードバランサーと同様に、下流のリゾルバーは返されたレコードを TTL の間キャッシュする場合があります。TTL を無視するクライアントは、以前キャッシュした
CNAMEまたはA応答を使い続けることがあります。 - プラン要件: Load Balancing アドオンを利用する Enterprise のお客様向けです。
- DNS の CNAME flattening — ロードバランサー以外の DNS レコード向けの同等機能です。
- プロキシモード — DNS-only とプロキシ済みのロードバランシングの使い分けです。
- 一般的な構成 — CNAME を返すエンドポイントが役立つ、アクティブ-アクティブフェイルオーバーなどのパターンです。