このドキュメントでは、DNS ゾーンを使用して Google Distributed Cloud(GDC)エアギャップの新しいドメインの DNS の解決を構成する方法について説明します。DNS ゾーンを使用して、一連の DNS レコードをグループ化し、それらのレコードを GDC の Virtual Private Cloud(VPC)の外部に表示するかどうかを制御します。
このドキュメントは、組織の DNS の解決の管理を担当するプラットフォーム管理者とアプリケーション オペレーターを対象としています。
GDC 環境で、サービスの公開設定とアクセス要件に合わせて、パブリック DNS ゾーンまたはプライベート DNS ゾーンを作成できます。
- 外部ネットワークの可視性とアクセスを必要とするサービスの場合: 一般公開 DNS ゾーンを設定して、ネットワーク外のユーザーとシステムがサービスにアクセスできるようにします。ウェブサイト、一般公開 API、または GDC Cloud 環境の外部からアクセス可能にする必要があるサービスがある場合は、ドメイン名を適切な IP アドレスにマッピングするために、パブリック DNS ゾーンが必要です。
- 内部システムへの安全で制限されたアクセスを必要とするサービスの場合: 限定公開 DNS ゾーンを設定して、内部ドメイン名を非表示にし、内部サービスへのアクセスを制限します。安全なプロトコルとプライベート IP アドレスのみを使用して他の内部サービスと通信する必要がある内部アプリケーション、データベース、マイクロサービスがある場合は、ドメイン名を適切な IP アドレスにマッピングするプライベート DNS ゾーンが必要です。プライベート DNS ゾーンを使用すると、これらのサービスは、外部ネットワークに存在や IP アドレスを公開することなく、内部ドメイン名を使用して相互に検出できます。これにより、セキュリティが強化され、内部ネットワーキングが簡素化されます。
一般公開 DNS ゾーンと限定公開 DNS ゾーンの違いについては、Cloud DNS のゾーンタイプをご覧ください。
始める前に
GDC で DNS ゾーンを構成してレコードを追加するには、次のものが必要です。
- 既存のプロジェクト。詳細については、プロジェクトを作成するをご覧ください。
- 必要な ID とアクセスロール。プロジェクトの DNS ゾーンを管理するには、IAM プロジェクト管理者にマネージド DNS プロジェクト管理者(
managed-dns-project-admin)ロールを付与するよう依頼します。 - gdcloud CLI を使用するには、インストールされていることを確認します。詳細については、gdcloud CLI をインストールするをご覧ください。
kubectlを使用している場合は、グローバル API サーバーの kubeconfig ファイル。このファイルをまだ生成していない場合は、ログインをご覧ください。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。
一般公開 DNS ゾーンを作成する
パブリック DNS ゾーンを作成したら、適切なネームサーバーにリクエストを転送するようにネットワークの DNS リゾルバを構成する必要があります。
ゾーンを作成する
パブリック DNS ゾーンは、gdcloud CLI または Kubernetes API を使用して作成できます。
gdcloud
一般公開 DNS ゾーンを作成するには、gdcloud dns managed-zones create コマンドを使用します。
gdcloud dns managed-zones create DNS_ZONE_NAME \
--dns-name=DOMAIN_NAME \
--visibility=PUBLIC \
--description="DESCRIPTION" \
[--project=PROJECT_NAMESPACE] \
[--async]
次のように置き換えます。
DNS_ZONE_NAME: DNS ゾーンの名前。DOMAIN_NAME: パブリック DNS ゾーンのドメイン名(例:example.com)。DESCRIPTION: DNS ゾーンの説明。例:Public DNS zone for example.comこのフィールドは省略可能です。PROJECT_NAMESPACE: プロジェクトの Namespace。gdcloud config set projectを使用してデフォルトのプロジェクトをグローバルに設定している場合、このフラグは省略可能です。--async: オペレーションの完了を待たずに、コマンドをすぐに返す場合に指定します。describeを使用して、オペレーションのステータスを確認できます。
API
GDC で Kubernetes API を使用して、一般公開 DNS ゾーンを作成します。
ManagedDNSZoneリソースを作成して適用し、GDC の外部からアクセス可能な DNS ゾーンを作成します。kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: DNS_ZONE_NAME namespace: PROJECT_NAMESPACE spec: dnsName: DOMAIN_NAME description: DESCRIPTION visibility: PUBLIC EOF次のように置き換えます。
GLOBAL_API_SERVER: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細をご覧ください。DNS_ZONE_NAME: DNS ゾーンの名前。PROJECT_NAMESPACE: プロジェクトの Namespace。DOMAIN_NAME: パブリック DNS ゾーンのドメイン名(例:example.com)。DESCRIPTION: DNS ゾーンの説明。例:Public DNS zone for example.comこのフィールドは省略可能です。
visibilityでは大文字と小文字が区別され、正確な値PUBLICを指定する必要があります。
DNS リゾルバを構成する
パブリック DNS ゾーンの場合、その DNS ゾーンの DNS リクエストを、その DNS ゾーンをホストする GDC のネームサーバーに転送するように、ネットワーク内の DNS リゾルバを構成する必要があります。
作成した
ManagedDNSZoneのネームサーバーを取得します。この手順ではkubectlを使用する必要があります。kubectl --kubeconfig GLOBAL_API_SERVER get manageddnszones DNS_ZONE_NAME -n PROJECT_NAMESPACE -oyaml次のように置き換えます。
GLOBAL_API_SERVER: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細をご覧ください。DNS_ZONE_NAME: DNS ゾーンの名前。PROJECT_NAMESPACE: プロジェクトの Namespace。gdcloud config set projectを使用してデフォルトのプロジェクトをグローバルに設定している場合、このフラグは省略可能です。
ネームサーバーはステータス出力に表示されます。
apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: DNS_ZONE_NAME namespace: PROJECT_NAMESPACE spec: dnsName: example.com description: "Public DNS zone for example.com" visibility: PUBLIC status: … nameServers: - ns.managed-dns-public.gdc1.staging.gpcdemolabs.comネットワーク内の DNS リゾルバを更新して、新しいゾーンの DNS リクエストを転送します。この例では、
example.comのリクエストをns.managed-dns-public.gdc1.staging.gpcdemolabs.comに転送するように DNS リゾルバを更新する必要があります。この構成では、リゾルバに、GDC のインフラストラクチャ DNS ゾーンgdc1.staging.gpcdemolabs.comの DNS リクエストを適切に転送するために必要な構成がすでに存在することを前提としています。
限定公開 DNS ゾーンを作成する
限定公開 DNS ゾーンは、gdcloud CLI または Kubernetes API を使用して作成できます。
gdcloud
限定公開 DNS ゾーンを作成するには、gdcloud dns managed-zones create コマンドを使用します。
gdcloud dns managed-zones create DNS_ZONE_NAME \
--dns-name=DOMAIN_NAME \
--visibility=PRIVATE \
--description="DESCRIPTION" \
[--project=PROJECT_NAMESPACE] \
[--async]
次のように置き換えます。
DNS_ZONE_NAME: DNS ゾーンの名前。DOMAIN_NAME: 限定公開 DNS ゾーンのドメイン名(例:example.com)。DESCRIPTION: DNS ゾーンの説明。例:Private DNS zone for example.comこのフィールドは省略可能です。PROJECT_NAMESPACE: プロジェクトの Namespace。gdcloud config set projectを使用してデフォルトのプロジェクトをグローバルに設定している場合、このフラグは省略可能です。--async: オペレーションの完了を待たずに、コマンドをすぐに返す場合に指定します。describeを使用して、オペレーションのステータスを確認できます。
API
Kubernetes API を使用して限定公開 DNS ゾーンを作成します。
ManagedDNSZoneリソースを作成して適用し、デフォルトのお客様の VPC 内からのみアクセス可能な DNS ゾーンを作成します。kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: DNS_ZONE_NAME namespace: PROJECT_NAMESPACE spec: dnsName: DOMAIN_NAME description: DESCRIPTION visibility: PRIVATE EOF次のように置き換えます。
GLOBAL_API_SERVER: グローバル API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細をご覧ください。DNS_ZONE_NAME: DNS ゾーンの名前。PROJECT_NAMESPACE: プロジェクトの Namespace。DOMAIN_NAME: 限定公開 DNS ゾーンのドメイン名(例:example.com)。DESCRIPTION: DNS ゾーンの説明。例:Private DNS zone for example.comこのフィールドは省略可能です。
visibilityでは大文字と小文字が区別され、正確な値PRIVATEを指定する必要があります。