DNS ゾーンを作成する

このドキュメントでは、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 ゾーンを作成します。

  1. 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 リゾルバを構成する必要があります。

  1. 作成した 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
    
  2. ネットワーク内の 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 を指定する必要があります。

次のステップ