Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

エンドポイント向け CNAME flattening

最終更新 Markdown で表示Agent セットアップ

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 レコードを返します。

CNAME flattening を設定する

flatten_cname は、プール内のエンドポイントごとに、nameaddressweight などのエンドポイントフィールドと一緒に設定します。Cloudflare ダッシュボード、API、または Terraform で設定できます。

ダッシュボードでは、この設定はプール内の各エンドポイントにある Flatten CNAME トグルとして表示されます。トグルをオフにすると、エンドポイントのホスト名を CNAME レコードとして返します。

  1. Cloudflare ダッシュボードで Load Balancing ページを開きます。

    Load Balancing を開く ↗
  2. Pools タブを選択します。

  3. 対象エンドポイントを含むプールで Edit を選択します。

  4. Endpoints セクションで、変更するエンドポイントを探します。

  5. Flatten CNAME をオフにします。

  6. 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
Create Poolbash
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_cnamefalse のエンドポイントを選んだ場合、応答セクションにはエンドポイントアドレス(例: origin-a.example.com.)を指す CNAME レコードが含まれます。その CNAME の先の解決はクライアント(またはそのリゾルバー)が行います。
  • ステアリングが flatten_cnametrue のエンドポイント(またはアドレスが IP のエンドポイント)を選んだ場合、応答には解決済みの A/AAAA レコードが含まれます。

応答はステアリングが選ぶエンドポイントに依存するため、プールが flatten_cname: false のホスト名エンドポイントと IP エンドポイントを混在させている場合、同じロードバランサーへの繰り返しの dig クエリで CNAMEA/AAAA の応答が交互に返るのは正当な動きです。

ヘルスモニター

エンドポイントのヘルスモニターはこの設定の影響を受けません。Cloudflare は常にエンドポイントのホスト名を IP に解決し、キャッシュしない DNS ルックアップで背後のサービスをプローブします。flattening をオフにしても変わるのは、DNS クエリ時にクライアントへ返す内容だけです。健全性ステータスは、実際のバックエンド到達性を反映し続けます。

Analytics

エンドポイントごとのリクエスト数とステアリング判断は、エンドポイント名をキーにして 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 を返すエンドポイントが役立つ、アクティブ-アクティブフェイルオーバーなどのパターンです。

役に立ちましたか?