このドキュメントでは、DNS ゾーンを使用して、Google Distributed Cloud(GDC)エアギャップ内の新しいドメインの DNS の解決を構成する方法について説明します。DNS ゾーンを使用して、一連の DNS レコードをグループ化し、これらのレコードが GDC の Virtual Private Cloud(VPC)の外部に表示されるかどうかを制御します。
このドキュメントは、組織の DNS の解決の管理を担当するプラットフォーム管理者とアプリケーション オペレーターを対象としています。
GDC 環境で一般公開またはプライベート DNS ゾーンを作成して、サービスの可視性とアクセス要件に合わせることができます。
- 外部ネットワークの可視性とアクセスを必要とするサービスの場合: 一般公開 DNS ゾーンを設定して、ネットワーク外のユーザーとシステムがサービスにアクセスできるようにします。ウェブサイト、一般公開 API、または GDC Cloud 環境の外部から到達可能にする必要があるサービスがある場合は、ドメイン名を適切な IP アドレスにマッピングするための一般公開 DNS ゾーンが必要です。
- 内部システムへの安全で制限されたアクセスを必要とするサービスの場合: プライベート DNS ゾーンを設定して、内部ドメイン名を非表示にし、内部サービスへのアクセスを制限します。安全なプロトコルとプライベート IP アドレスのみを使用して他の内部サービスと通信する必要がある内部アプリケーション、データベース、またはマイクロサービスがある場合は、ドメイン名を適切な IP アドレスにマッピングするためのプライベート DNS ゾーンが必要です。プライベート DNS ゾーンを使用すると、これらのサービスは内部ドメイン名を使用して相互に検出できます。存在や IP アドレスを外部ネットワークに公開することはありません。これにより、セキュリティが強化され、内部ネットワークが簡素化されます。
一般公開 DNS ゾーンとプライベート DNS ゾーンの違いについては、 Cloud DNS のゾーンタイプをご覧ください。
始める前に
GDC で DNS ゾーンを構成してレコードを追加するには、次のものが必要です。
- 既存のプロジェクト。詳細については、プロジェクトを 作成するをご覧ください。
- 必要な ID とアクセスロール。プロジェクトの DNS ゾーンを管理するには、プロジェクト IAM 管理者 に Managed 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である必要があります。