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 のリージョン、受信転送クエリが受信されたロケーションなど)。
オンプレミス システムが受信サーバー ポリシー エントリ ポイントを介して DNS クエリを Cloud DNS に送信する場合、Cloud DNS は、受信パケットを処理した VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)を含むリージョンとして送信元の場所を定義します。送信元の場所は、受信サーバー ポリシー エントリ ポイントとして機能する内部 IP アドレスのリージョンに関係なく、この方法で定義されます。
たとえば、オンプレミス システムから、IP アドレスが
us-west1
リージョンにある受信サーバー ポリシー エントリ ポイントにクエリが送信されても、パケットがus-east1
リージョンにある Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)によって処理される場合、送信元のリージョンはus-east1
になります。これは、受信パケットが処理されたリージョンであるためです。
DNS ルーティング ポリシーは、地理的位置ごとに複数の IP アドレスをサポートします。特定の地理的位置に指定された場合は、重みが等しい WRR ポリシーに従って、複数の IP アドレスが返されます。位置情報ベースのルーティング ポリシーとカスタム重み付けの WRR ポリシーを組み合わせることはできません。
始める前に
すでにマネージド ゾーンを作成しており、ゾーンを作成するための前提条件を完了している必要があります。
DNS ルーティング ポリシーを作成する
ResourceRecordSet
を作成してルーティング ポリシーを適用する手順は次のとおりです。
コンソール
Google Cloud Console で、Cloud DNS の [ゾーン] ページに移動します。
レコードを追加するマネージド ゾーンの名前をクリックします。
[ゾーンの詳細] ページで、[レコードセットを追加] をクリックします。
[レコードセットの作成] ページの [DNS 名] フィールドに、DNS ゾーンのサブドメインを入力します(例:
mail
)。末尾にドットが自動的に追加されます。リソース レコードのタイプ(例:
A
)を選択します。[TTL] フィールドに、リソース レコードの有効期間を数値で入力します。これはキャッシュに保存できる時間です。この値は正の整数である必要があります
[TTL ユニット] メニューから、時間の単位(例:
30 minutes
)を選択します。[ルーティング ポリシー] を選択します。[重み付きラウンドロビン] または [地域ベース] を選択できます。レコードにルーティング ポリシーを接続しない場合は、[デフォルトのレコードタイプ] を選択します。
[重み付きラウンドロビン] を選択した場合は、[マネージド rrdata の追加] セクションで、次の操作を行います。
- リソース レコード(RR)データのサブセクションに対応する重みを入力します。この重みは 0.0~1,000.0 の範囲内の正の数字でなければなりません。ターゲットにルーティングされるトラフィックの割合は、すべての重みの合計に対する個々の重みの比率から計算されます。
- 選択したレコードタイプに基づいて、次のフィールドに関連情報を入力します。たとえば、レコードタイプが
A
の場合は、[IPv4 アドレス] フィールドにホストの数値 IP アドレス(203.0.113.1
など)を入力します。AAAA
レコードの場合は、ホストの IPv6 アドレスを入力します。
[地域ベース] を選択した場合は、[マネージド rrdata の追加] セクションで次の操作を行います。
- 有効な Google Cloud ソース リージョンを入力してください(例:
asia-east1
)。 - 選択したレコードタイプに基づいて、次のフィールドに関連情報を入力します。たとえば、レコードタイプが
A
の場合は、[IPv4 アドレス] フィールドにホストの数値 IP アドレス(203.0.113.1
など)を入力します。AAAA
レコードの場合は、ホストの IPv6 アドレスを入力します。
- 有効な Google Cloud ソース リージョンを入力してください(例:
選択したレコードタイプに応じて追加のデータを入力するには、[項目を追加] をクリックします。次の表に、レコードタイプと入力可能な追加データを示します。
レコードタイプ 入力する追加データ 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 テキストデータ 追加のマネージド RR データを入力するには、[マネージド rrdata の追加] をクリックします。
[作成] をクリックします。
gcloud
gcloud dns record-sets create
コマンドを実行します。
gcloud 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
メソッドを使用します。
GEO
ポリシーの場合は、次のメソッドを使用します。
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"] } ], } } }
WRR
ポリシーの場合は、次のメソッドを使用します。
POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets { "name": "RRSET_NAME.", "type": "RRSET_TYPE", "ttl": TTL, "routingPolicy": { "wrrPolicy": { "item": [ { "weight": "WEIGHT", "rrdatas": ["RR_DATA"] }, { "weight": "WEIGHT", "rrdatas": ["RR_DATA"] } ], } } }
次のように置き換えます。
PROJECT_ID
: プロジェクトの IDMANAGED_ZONE
: このResourceRecordSet
が関連付けられているマネージド ゾーン(service-zone
など)。このResourceRecordSet
の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。RRSET_NAME
: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例:service.example.com
)RRSET_TYPE
: このResourceRecordSet
のリソース レコードタイプ(A
など)TTL
: リゾルバがこのResourceRecordSet
をキャッシュに保存する秒単位の TTL(例:30
)LOCATION
:GEO
ポリシーの場合に、ポリシーを作成する位置情報(asia-east
など)WEIGHT
:WRR
ポリシーの場合に、${weight_percent}=${rrdatas}
の形式のデータをセミコロン区切りリストで指定します(例:.8=10.128.1.1;.2=10.130.1.1
)。重みは正の小数で指定します。RR_DATA
: リソース レコードセットに関連付けられた任意の値(例:198.51.100.5
)。rrdata1
rrdata2
rrdata3
のように、複数の値を入力することもできます(例:198.51.100.1
203.0.113.1
...)。
DNS ルーティング ポリシーを更新する
ResourceRecordSet
のルーティング ポリシーを更新するには、次の手順を行います。
コンソール
Cloud Console で、Cloud DNS の [ゾーン] ページに移動します。
ResourceRecordSet
のルーティング ポリシーを更新するゾーンをクリックします。[ゾーンの詳細] ページで、更新する
ResourceRecordSet
の横にある [edit編集] をクリックします。必要な更新を行った後、[保存] をクリックします。
gcloud
gcloud dns record-sets update
コマンドを実行します。
gcloud 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
フィールド全体を指定する必要があります。
GEO
ポリシーの場合は、次のメソッドを使用します。
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"] } ], } } }
WRR
ポリシーの場合は、次のメソッドを使用します。
PATCH https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets { "name": "RRSET_NAME.", "type": "RRSET_TYPE", "ttl": TTL, "routingPolicy": { "wrrPolicy": { "item": [ { "weight": "WEIGHT", "rrdatas": ["RR_DATA"] }, { "weight": "WEIGHT", "rrdatas": ["RR_DATA"] } ], } } }
次のように置き換えます。
PROJECT_ID
: プロジェクトの IDMANAGED_ZONE
: このResourceRecordSet
が関連付けられているマネージド ゾーン(service-zone
など)。このResourceRecordSet
の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。RRSET_NAME
: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例:service.example.com
)RRSET_TYPE
: このResourceRecordSet
のリソース レコードタイプ(A
など)TTL
: リゾルバがこのResourceRecordSet
をキャッシュに保存する秒単位の TTL(例:30
)LOCATION
:GEO
ポリシーの場合に、ポリシーを作成する位置情報(asia-east
など)WEIGHT
:WRR
ポリシーの場合に、${weight_percent}=${rrdatas}
の形式のデータをセミコロン区切りリストで指定します(例:.8=10.128.1.1;.2=10.130.1.1
)。重みは正の小数で指定します。RR_DATA
: リソース レコードセットに関連付けられた任意の値(例:198.51.100.5
)。rrdata1
rrdata2
rrdata3
のように、複数の値を入力することもできます(例:198.51.100.5
203.0.113.1
...)。
DNS ルーティング ポリシーを削除する
ルーティング ポリシーを削除するには、ルーティング ポリシーを含む ResourceRecordSet
を削除する必要があります。方法は次のとおりです。
コンソール
Cloud コンソールで、Cloud DNS の [ゾーン] ページに移動します。
ResourceRecordSet
を削除するゾーンをクリックします。[ゾーンの詳細] ページで、削除する
ResourceRecordSet
の DNS 名の横にあるチェックボックスをオンにします。[レコードセットを削除] をクリックします。
gcloud
gcloud dns record-sets delete
コマンドを実行します。
gcloud 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
: プロジェクトの IDMANAGED_ZONE
: このResourceRecordSet
が関連付けられているマネージド ゾーン(my-zone-name
など)。このResourceRecordSet
の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。RRSET_NAME
: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例:test.example.com
)RRSET_TYPE
: このResourceRecordSet
のリソース レコードタイプ(A
など)
次のステップ
- マネージド ゾーンの作成、更新、一覧表示、削除については、ゾーンを管理するをご覧ください。
- Cloud DNS の使用時に発生する可能性のある一般的な問題の解決策については、トラブルシューティングをご覧ください。
- Cloud DNS の概要については、Cloud DNS の概要をご覧ください。