DNS ルーティング ポリシーを管理する

DNS ルーティング ポリシーは、クエリ(ラウンドロビンや位置情報など)に基づいてトラフィックを制御します。特別なルーティング ポリシー値を使用して特別な ResourceRecordSets を(コレクションで)作成することで、ルーティング ポリシーを構成できます。

このページでは、Cloud DNS を使用して DNS ルーティング ポリシーを作成、編集、削除する方法について説明します。このページを使用する前に、DNS ポリシーの概要を理解しておいてください。

DNS ルーティング ポリシーを使用するには、ResourceRecordSet を作成して、ResourceRecordSet に適用する次のいずれかの DNS ルーティング ポリシーを選択します。

  • 重み付きラウンドロビン(WRR)ルーティング ポリシー: WRR を使用して、DNS 名に ResourceRecordSet ごとに異なる重みを指定します。DNS ルーティング ポリシーにより、構成済みの重みに従ってトラフィックが分散されます。WRR ルーティング ポリシーと位置情報ルーティング ポリシーを組み合わせて使用することはできません。

  • 位置情報(GEO)ルーティング ポリシー: GEO を使用してソースの位置情報を指定し、その位置情報に対応する回答を提供します。位置情報ルーティング ポリシーは、トラフィックのソースがどのポリシー項目とも完全に一致しない場合、送信元のロケーションに最も近い一致を適用します。

    GEO は、次のように一般公開 DNS と限定公開 DNS のソースをマッピングします。

    • 公開 DNS の場合: クエリの送信元 IP アドレスまたは DNS の拡張機能メカニズム(EDNS)クライアント サブネットを使用します。
    • 限定公開 DNS の場合: クエリを受け取ったロケーション(クエリ VM のリージョン、受信転送クエリが受信されたロケーションなど)。

    受信転送では、クエリは送信元として受信フォワーダーの IP アドレスに関連付けられたロケーションではなく、Virtual Private Cloud(VPC)ネットワークに入るロケーションを使用します。

    たとえば、us-west1 のフォワーダー IP アドレスにクエリが送信されたときに、このクエリが us-east1 に到着するようにルーティングが構成されているとします。us-west1 フォワーダー アドレスが存在する場合でも、Cloud DNS はソース リージョンとして us-east1 を使用します。

DNS ルーティング ポリシーは、地理的位置ごとに複数の IP アドレスをサポートします。特定の地理的位置に指定された場合は、重みが等しい WRR ポリシーに従って、複数の IP アドレスが返されます。位置情報ベースのルーティング ポリシーとカスタム重み付けの WRR ポリシーを組み合わせることはできません。

始める前に

すでにマネージド ゾーンを作成しており、ゾーンを作成するための前提条件を完了している必要があります。

DNS ルーティング ポリシーを作成する

ResourceRecordSet を作成してルーティング ポリシーを適用する手順は次のとおりです。

Console

  1. Google Cloud Console で、Cloud DNS の [ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. レコードを追加するマネージド ゾーンの名前をクリックします。

  3. [ゾーンの詳細] ページで、[レコードセットを追加] をクリックします。

  4. [レコードセットの作成] ページの [DNS 名] フィールドに、DNS ゾーンのサブドメインを入力します(例: mail)。末尾にドットが自動的に追加されます。

  5. リソース レコードのタイプ(例: A)を選択します。

  6. [TTL] フィールドに、リソース レコードの有効期間を数値で入力します。これはキャッシュに保存できる時間です。この値は正の整数である必要があります

  7. [TTL ユニット] メニューから、時間の単位(例: 30 minutes)を選択します。

  8. [ルーティング ポリシー] を選択します。[重み付きラウンドロビン] または [地域ベース] を選択できます。レコードにルーティング ポリシーを接続しない場合は、[デフォルトのレコードタイプ] を選択します。

  9. [重み付きラウンドロビン] を選択した場合は、[マネージド rrdata の追加] セクションで、次の操作を行います。

    1. リソース レコード(RR)データのサブセクションに対応する重みを入力します。この重みは 0.0~1,000.0 の範囲内の正の数字でなければなりません。ターゲットにルーティングされるトラフィックの割合は、すべての重みの合計に対する個々の重みの比率から計算されます。
    2. 選択したレコードタイプに基づいて、次のフィールドに関連情報を入力します。たとえば、レコードタイプが A の場合は、[IPv4 アドレス] フィールドにホストの数値 IP アドレス(203.0.113.1 など)を入力します。AAAA レコードの場合は、ホストの IPv6 アドレスを入力します。
  10. [地域ベース] を選択した場合は、[マネージド rrdata の追加] セクションで次の操作を行います。

    1. 有効な Google Cloud ソース リージョンを入力してください(例: asia-east1)。
    2. 選択したレコードタイプに基づいて、次のフィールドに関連情報を入力します。たとえば、レコードタイプが A の場合は、[IPv4 アドレス] フィールドにホストの数値 IP アドレス(203.0.113.1 など)を入力します。AAAA レコードの場合は、ホストの IPv6 アドレスを入力します。
  11. 選択したレコードタイプに応じて追加のデータを入力するには、[項目を追加] をクリックします。次の表に、レコードタイプと入力可能な追加データを示します。

    レコードタイプ 入力する追加データ
    A IPv4 アドレス
    AAAA IPv6 アドレス
    CNAME 正規名
    MX Mail Exchange レコード
    SRV ホスト/ポート(<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="fbj0fi6rS3pPqxfn3YD3etONK6A9Q8tQ5MUfKCg7jl5ONxJ2KV+27oDWYJ43g//U">RFC 2782)</aclass="external">
    TXT テキストデータ
  12. 追加のマネージド RR データを入力するには、[マネージド rrdata の追加] をクリックします。

  13. [作成] をクリックします。

gcloud

gcloud beta dns record-sets create コマンドを実行します。

gcloud beta dns record-sets create RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing_policy_type=ROUTING_POLICY_TYPE \
    --routing_policy_data=ROUTING_POLICY_DATA

次のように置き換えます。

  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

    サポートされているレコードタイプの一覧については、リソース レコードのタイプの選択をご覧ください。

  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。

  • ROUTING_POLICY_TYPE: ルーティング ポリシーのタイプ

    重み付きラウンドロビンの場合は WRR、位置情報の場合は GEO を入力します。選択されたタイプがポリシーになった後は、このフィールドを変更できません。ポリシーを削除して、別のタイプの新しいポリシーを追加することのみ可能です。

  • ROUTING_POLICY_DATA: ルーティング ポリシーのデータ

    • --routing_policy_type=WRR${weight_percent}=${rrdatas} 形式のセミコロン区切りリストを入力します(例: .8=10.128.1.1;.2=10.130.1.1)。重みは正の小数で指定します。
    • --routing_policy_type=GEO${region}=${rrdatas} 形式のセミコロン区切りリストを入力します(例: asia-east1=10.128.1.1;us-central1=10.130.1.1)。リージョンを繰り返すことで、単一のリージョンに複数の IP アドレスを指定できます。

API

resourceRecordSets.create メソッドを使用します。

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
        "name": "RRSET_NAME.",
        "type": "RRSET_TYPE",
        "ttl": TTL,
        "routingPolicy": {
          "geoPolicy": {
              "item": [
                    {
                        "location": "LOCATION",
                        "rrdatas": ["RR_DATA"]
                    },
                    {
                        "location": "LOCATION",
                        "rrdatas": ["RR_DATA"]
                     }
               ],
               "failover": [
                     {
                         "location": "LOCATION",
                         "rrdatas": ["RR_DATA"]
                     },
                     {
                         "location": "LOCATION",
                         "rrdatas": ["RR_DATA"]
                     }
               ],

            }
      }
}

次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID
  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。
  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • LOCATION: ポリシーを作成する必要がある位置情報(asia-east など)
  • RR_DATA: リソース レコードセットに関連付けられた任意の値(例: 198.51.100.5)。rrdata1 rrdata2 rrdata3 のように、複数の値を入力することもできます(例: 198.51.100.1 203.0.113.1...)。

DNS ルーティング ポリシーを更新する

ResourceRecordSet のルーティング ポリシーを更新するには、次の手順を行います。

Console

  1. Cloud Console で、Cloud DNS の [ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. ResourceRecordSet のルーティング ポリシーを更新するゾーンをクリックします。

  3. [ゾーンの詳細] ページで、更新する ResourceRecordSet の横にある [編集] をクリックします。

  4. 必要な更新を行った後、[保存] をクリックします。

gcloud

gcloud beta dns record-sets update コマンドを実行します。

gcloud beta dns record-sets update RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing_policy_type=ROUTING_POLICY_TYPE \
    --routing_policy_data=ROUTING_POLICY_DATA

次のように置き換えます。

  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

    サポートされているレコードタイプの一覧については、リソース レコードのタイプの選択をご覧ください。

  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。

  • ROUTING_POLICY_TYPE: ポリシーのタイプ

    重み付きラウンドロビンの場合は WRR を入力します。位置情報の場合は GEO を入力します。ポリシーのタイプを選択した後に、このフィールドを変更することはできません。ポリシーを削除して、別のタイプの新しいポリシーを追加することのみ可能です。

  • ROUTING_POLICY_DATA: ルーティング ポリシーのデータ

    • --routing_policy_type=WRR${weight_percent}:${rrdatas} 形式のセミコロン区切りリストを入力します(例: .8=203.0.113.1;.2=198.51.100.1)。重みは正の小数で指定します。
    • --routing_policy_type=GEO${region}=${IP_address} 形式のセミコロン区切りリストを入力します(例: asia-east1=198.51.100.1;us-central1=203.0.113.1)。リージョンを繰り返すことで、単一のリージョンに複数の IP アドレスを指定できます。

API

resourceRecordSets.patch メソッドを使用します。rrset.rrdatas または rrset.routingPolicy のいずれかを指定します。routingPolicy を指定する場合は、新しい routingPolicy フィールド全体を指定する必要があります。

PATCH https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
        "name": "RRSET_NAME.",
        "type": "RRSET_TYPE",
        "ttl": TTL,
        "routingPolicy": {
          "geoPolicy": {
              "item": [
                    {
                        "location": "LOCATION",
                        "rrdatas": ["RR_DATA"]
                    },
                    {
                        "location": "LOCATION",
                        "rrdatas": ["RR_DATA"]
                     }
               ],
               "failover": [
                     {
                         "location": "LOCATION",
                         "rrdatas": ["RR_DATA"]
                     },
                     {
                         "location": "LOCATION",
                         "rrdatas": ["RR_DATA"]
                     }
               ],

            }
      }
}

次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID
  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。
  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • LOCATION: ポリシーを作成する必要がある位置情報(asia-east など)
  • RR_DATA: リソース レコードセットに関連付けられた任意の値(例: 198.51.100.5)。rrdata1 rrdata2 rrdata3 のように、複数の値を入力することもできます(例: 198.51.100.5 203.0.113.1...)。

DNS ルーティング ポリシーを削除する

ルーティング ポリシーを削除するには、ルーティング ポリシーを含む ResourceRecordSet を削除する必要があります。方法は次のとおりです。

Console

  1. Cloud Console で、Cloud DNS の [ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. ResourceRecordSet を削除するゾーンをクリックします。

  3. [ゾーンの詳細] ページで、削除する ResourceRecordSet の DNS 名の横にあるチェックボックスをオンにします。

  4. [レコードセットを削除] をクリックします。

gcloud

gcloud beta dns record-sets delete コマンドを実行します。

gcloud beta dns record-sets delete RRSET_NAME
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \

次のように置き換えます。

  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

    サポートされているレコードタイプの一覧については、リソース レコードのタイプの選択をご覧ください。

  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。

API

resourceRecordSets.delete メソッドを使用します。

DELETE https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets/RRSET_NAME/RRSET_TYPE

次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID
  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(my-zone-name など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。
  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: test.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

次のステップ