1. はじめに

この Codelab では、完全修飾ドメイン名(FQDN)を転送先として使用して、Cloud DNS アウトバウンド転送ゾーンを設定する方法について説明します。この機能を使用すると、転送ゾーンの構成で IP アドレスをハードコードするのではなく、DNS 名から解決された IP アドレスに DNS トラフィックを転送できます。これは、バックエンド DNS リゾルバの IP アドレスが変更された場合に特に便利です。FQDN の DNS レコードを更新すると、Cloud DNS が自動的に変更を反映します。
この Codelab を完了すると、次のものを使用する Cloud DNS 転送ゾーンを構成できるようになります。
- A/AAAA レコードを含む限定公開ゾーンと一致する FQDN ターゲット。
- リージョン アフィニティまたはトラフィック分散用の Cloud DNS ルーティング ポリシー(位置情報または重み付きラウンドロビン)でバックアップされた FQDN ターゲット。
FQDN 転送の概要
Cloud DNS 転送を使用すると、Google Cloud Platform リソースから Google Cloud Platform の外部(オンプレミスや他のクラウドなど)でホストされている限定公開 DNS 名を解決できます。従来、この機能はターゲット IP アドレスのリストへの転送をサポートしていました。FQDN 転送では、転送ゾーンで FQDN を転送ターゲットとして指定できます。
FQDN が指定されると、Cloud DNS は内部ルックアップを使用して IP アドレスに解決します。この内部ルックアップでは、送信元ネットワークの解決ロジックが使用されます。つまり、FQDN ターゲットは、限定公開ゾーン、DNS ルーティング ポリシー(位置情報または重み付きラウンドロビン)、さらにはインターネットのパブリック ドメイン名にも一致できます。Cloud DNS は、解決された宛先 IP にクエリを転送します。
作成するアプリの概要
新しい限定公開ゾーンを使用したリージョン FQDN 転送
DNS トラフィックのリージョン アフィニティを実現する設定を構築します。これには、限定公開 DNS ゾーンを作成して、そのゾーン内に地理位置情報ルーティング ポリシーを構成し、転送ゾーンをこの FQDN ターゲットにリンクすることが含まれます。これにより、特定のリージョン(us-east1 など)からのトラフィックが対応するリージョン DNS サーバーに転送されます。
既存の限定公開ゾーンを使用した FQDN 転送
このチュートリアルでは、既存のプライベート DNS ゾーン内の A レコードまたは AAAA レコードでバックアップされた FQDN をターゲットとする転送ゾーンを作成する方法について説明します。これは、FQDN 転送ターゲットを使用して解決された静的に定義された IP アドレスにクエリを転送する方法を示しています。
学習内容
FQDN 転送のコンセプト
FQDN 転送は、送信クエリの転送先として IP アドレスだけでなく FQDN 転送先を指定できるようにすることで、DNS 転送を拡張するものです。
FQDN 転送のメリット
この機能により、バックエンド DNS リゾルバの IP アドレスが変更されたときに手動で更新する必要がなくなります。Cloud DNS は、FQDN の DNS レコードから変更を自動的に取得します。また、DNS サーバーを共有名の背後に配置したり、動的にスケーリングしたりできるため、DNS インフラストラクチャのスケーリングをより柔軟に行うことができます。
Cloud DNS ルーティング ポリシーとの統合
FQDN 転送を Cloud DNS ルーティング ポリシー(位置情報または重み付きラウンドロビン)と組み合わせて、リージョン アフィニティを実現し、地理的に分散したデプロイのパフォーマンスを最適化し、構成された重みに基づいてトラフィックを分散する方法について説明します。
Google Cloud CLI コマンド構文
FQDN 転送ゾーンの設定に使用する gcloud dns managed-zones create コマンドと関連するフラグ(--forwarding-targets、--private-forwarding-targets)について説明します。
前提条件
この Codelab を完了するには、次のものが必要です。
- Google アカウント
- 課金を有効にした Google Cloud プロジェクト
- gcloud コマンドライン ツールがインストールされ、構成されている
- Cloud DNS と DNS のコンセプトに関する基礎知識
2. 設定方法
FQDN 転送のシナリオについて
Cloud DNS FQDN 転送は、次のようないくつかのユースケースをサポートしています。
- A/AAAA レコードを含む限定公開ゾーン: FQDN が限定公開ゾーンの A/AAAA レコードと一致する場合、解決された IP アドレスが転送リストに追加され、ターゲット IP アドレスに直接転送する場合と同じ動作になります。
- 位置情報ポリシーを含む限定公開ゾーン: 位置情報ポリシーを使用すると、送信元の位置情報を指定して対応する回答を提供し、地域に基づくトラフィック分布を検証できます。これは、リージョン DNS 転送とアフィニティの鍵となります。
- 重み付きラウンドロビン(WRR)ポリシーを使用した限定公開ゾーン: WRR ポリシーを使用すると、DNS 名の IP アドレスごとに異なる重みを指定し、構成された重みに従ってトラフィックが分散されることを確認できます。
- A/AAAA レコードを含むパブリック ゾーン: FQDN が同じネットワークに表示されるプライベート名と一致しない場合、Cloud DNS はパブリック インターネットを使用して解決を試みます。
FQDN 転送の Google Cloud CLI コマンドについて
gcloud CLI コマンドを使用して FQDN 転送ターゲットを含む転送ゾーンを作成するには、gcloud dns managed-zones create コマンドを使用します。FQDN ターゲットを指定するためのキーフラグは --forwarding-targets または --private-forwarding-targets です。標準ルーティングと限定公開ルーティングの方法の詳細については、ドキュメントをご覧ください。
--forwarding-targets: ゾーンがクエリを転送するターゲット ネームサーバーの IPv4/IPv6 アドレスのリストまたは 1 つのドメイン名。公開設定では無視されます。RFC1918 以外のアドレスは、インターネット経由で転送先に転送されます。RFC1918 アドレスは VPC 経由で転送されます。--private-forwarding-targets: ゾーンがクエリを転送するターゲット ネームサーバーの IPv4/IPv6 アドレスのリストまたは 1 つのドメイン名。公開設定では無視されます。このパラメータに指定されたすべてのアドレスは、VPC を介して到達します。
構文例:
gcloud dns managed-zones create NAME \
--description=DESCRIPTION \
--dns-name=DNS_SUFFIX \
--networks=VPC_NETWORK_LIST \
--forwarding-targets=DEFAULT_FQDN_TARGET \
--visibility=private
--forwarding-targets の代わりに --private-forwarding-targets を指定できます。
Google Cloud Platform プロジェクトを設定する
gcloud CLI にログインします。
gcloud auth login
プロジェクトを作成する。
gcloud projects create my-codelab-project
Cloud DNS API を有効にします。この設定が有効になるまで数分かかることがあります。
gcloud services enable dns.googleapis.com
この Codelab では、新しいプロジェクトで作成されるデフォルトの VPC ネットワークを使用します。代わりに新しいネットワークを作成することもできます。
3. リージョン FQDN 転送を設定する(新しい限定公開ゾーンを使用)
このシナリオでは、特定のリージョンからのトラフィックが同じリージョン内の DNS サーバーに転送されるように、リージョン DNS 転送を実現する方法を示します。
限定公開 DNS ゾーンを作成する
まず、FQDN とそれに関連付けられた地理位置情報ルーティング ポリシーをホストする限定公開 DNS ゾーン(foo.com など)を作成します。このゾーンはデフォルト ネットワークから見える必要があります。
gcloud dns managed-zones create my-zone \
--description="Private Zone for FQDN outbound DNS forwarding." \
--dns-name=foo.com. \
--networks=default \
--visibility=private
限定公開ゾーン内に位置情報に基づくルーティング ポリシー レコード セットを作成する
次に、my-zone 内にレコードセット(geo.foo.com など)を作成し、位置情報ルーティング ポリシーを適用します。この例では、asia-east1 と asia-west1 の IP アドレスを構成します。
gcloud dns record-sets create geo.foo.com. \
--ttl="30" \
--type="A" \
--zone="my-zone" \
--routing-policy-type="GEO" \
--routing-policy-data="asia-east1=192.168.0.1;us-central1=192.168.0.2"
注: ジオフェンシングが無効になっている場合(デフォルトで推奨)、元のリージョンのターゲットが異常な場合は、最も近い正常なリージョンにクエリが送信されます。
FQDN ターゲットを使用して転送ゾーンを作成する
同じデフォルト ネットワークで表示される転送ゾーン(geo.test.com.)を作成し、転送先として geo.foo.com.(地理位置情報ルーティング ポリシーを含む FQDN)を設定します。
gcloud dns managed-zones create my-geo-fwd-zone \
--description="Forwarding zone for FQDN outbound DNS forwarding for routing policy." \
--dns-name=geo.test.com. \
--networks=default \
--private-forwarding-targets=geo.foo.com. \
--visibility=private
geo.test.com に一致する DNS クエリは、クエリの送信元リージョンに基づいて、geo.foo.com の解決済み IP(192.168.0.1 や 192.168.0.2 など)に転送されます。
4. FQDN 転送を設定する(既存のプライベート ゾーンを使用)
既存の限定公開 DNS ゾーンがある
default ネットワークに表示される my-zone(foo.com.)という名前の限定公開 DNS ゾーンがすでにあるとします。
この限定公開ゾーン内に DNS リソース レコードを作成する
既存の my-zone 内に a.foo.com. の A タイプレコードを作成します。
gcloud dns record-sets create a.foo.com. \
--ttl="30" \
--type="A" \
--zone="my-zone" \
--rrdatas=1.2.3.4
転送ゾーンを作成し、FQDN ターゲットを指定する
リージョン FQDN のシナリオと同様に、転送ゾーンを作成し、転送ターゲットとして a.foo.com. を指定します。
gcloud dns managed-zones create my-a-fwd-zone \
--description="Forwarding zone for FQDN outbound DNS forwarding for A record." \
--dns-name=a.test.com. \
--networks=default \
--private-forwarding-targets=a.foo.com. \
--visibility=private
a.test.com. に一致する DNS クエリは、a.foo.com. の解決済み IP アドレス 1.2.3.4 に転送されます。
5. クリーンアップ
限定公開ゾーンを削除する前に、限定公開ゾーン内のすべての ResourceRecordSet を削除する必要があります(NS レコードと SOA レコードは自動的に生成され、常に限定公開ゾーンに存在する必要があるため、例外です)。
限定公開ゾーンの地理位置情報ルーティング ポリシーを削除します。
gcloud dns record-sets delete "geo.foo.com." --type="A" --zone="my-zone"
限定公開ゾーンの A レコードを削除します。
gcloud dns record-sets delete "a.foo.com." --type="A" --zone="my-zone"
プライベート ゾーンを削除します。
gcloud dns managed-zones delete "my-zone"
位置情報ルーティング ポリシーの転送ゾーンを削除します。
gcloud dns managed-zones delete "my-geo-fwd-zone"
A レコードの転送ゾーンを削除します。
gcloud dns managed-zones delete "my-a-fwd-zone"
6. 完了
お疲れさまでした。これで、FQDN アウトバウンド DNS 転送の使用方法を学習しました。