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 は内部ルックアップを使用して FQDN を IP アドレスに解決します。このルックアップでは、ソース ネットワークの解決ロジックが使用されます。つまり、FQDN ターゲットは、限定公開ゾーン、DNS ルーティング ポリシー(位置情報または重み付きラウンドロビン)、インターネットのパブリック ドメイン名と一致する可能性があります。Cloud DNS は、解決された宛先 IP にクエリを転送します。
作成するアプリの概要
新しい限定公開ゾーンを使用したリージョン FQDN 転送
DNS トラフィックのリージョン アフィニティを実現する設定を構築します。これには、限定公開 DNS ゾーンを作成し、その中に位置情報ルーティング ポリシーを構成してから、転送ゾーンをこの FQDN ターゲットにリンクすることが含まれます。これにより、特定のリージョン(us-east1 など)からのトラフィックが、対応するリージョン DNS サーバーに転送されます。
既存の限定公開ゾーンを使用した FQDN 転送
既存の限定公開 DNS ゾーン内の A/AAAA レコードでサポートされている FQDN をターゲットとする転送ゾーンの作成方法について学習します。ここでは、FQDN 転送ターゲットを使用して解決された静的に定義された IP アドレスにクエリを転送する方法を示します。
学習内容
FQDN 転送のコンセプト
FQDN 転送は DNS 転送を拡張したもので、送信クエリの転送先として IP アドレスだけでなく FQDN 転送先を指定できます。
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 ゾーンがある
my-zone(foo.com.)という名前の限定公開 DNS ゾーンがすでに存在し、default ネットワークに表示されていることを前提とします。
この限定公開ゾーン内に 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 転送の使用方法を学習しました。