DNS バインディングの構成

このページでは、標準の VMware Engine ネットワークの DNS バインディングを構成する方法について説明します。

各プライベート クラウドは、すべての管理アプライアンスの解決に使用される Cloud DNS サーバーをデプロイします。DNS バインディングを設定することで、すべての VMware ワークロードの DNS サーバーとしてこのサーバーを構成できます。そのためには、次のことを行う必要があります。

  1. プライベート クラウドの DNS サーバーの IP アドレスを取得する
  2. ユーザー プリンシパルがイントラネット VPC にバインドできるように DNS バインド権限を設定する
  3. VMware ワークロードまたは NSX-T セグメントの DHCP DNS 設定に DNS を構成する

準備

DNS バインディングの構成には、gcloud ツールまたは API を使用する必要があります。

gcloud と API の要件

gcloud コマンドライン ツールまたは API を使用して VMware Engine リソースを管理するには、以下で説明するようにツールを構成することをおすすめします。

gcloud

  1. デフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID
    
  2. デフォルトのリージョンとゾーンを設定します。

    gcloud config set compute/region REGION
    
    gcloud config set compute/zone ZONE
    

gcloud vmware ツールの詳細については、Cloud SDK リファレンス ドキュメントをご確認ください

API

このドキュメント セットの API の例では、cURL コマンドライン ツールを使用して API がクエリされています。cURL リクエストには、有効なアクセス トークンが必要です。有効なアクセス トークンを取得するにはさまざまな方法があります。次の手順では、gcloud ツールを使用してアクセス トークンを生成します。

  1. Google Cloud にログインします。

    gcloud auth login
    
  2. アクセス トークンを生成して TOKEN にエクスポートします。

    export TOKEN=`gcloud auth print-access-token`
    
  3. TOKEN が正しく設定されていることを確認します。

    echo $TOKEN
    

API へのリクエストで認証トークンを使用します。例:

curl -X GET -H "Authorization: Bearer \"$TOKEN\"" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

このドキュメントの Python コードサンプルは、VMware Engine ライブラリを使用して API と通信します。このアプローチを使用するには、ライブラリをインストールし、アプリケーションのデフォルト認証情報を構成する必要があります。

  1. Python ライブラリをダウンロードしてインストールします。

    pip install google-cloud-vmwareengine
    
  2. シェルで次のコマンドを実行して、ADC 情報を構成します。

    gcloud auth application-default login
    

    または、サービス アカウント キー ファイルを使用します。

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

ライブラリの詳細については、リファレンス ページまたは GitHub のコードサンプルをご覧ください。

プライベート クラウド ワークロードの DNS サーバー IP を取得する

コンソール

プライベート クラウドの DNS サーバーの IP アドレスを取得する手順は次のとおりです。

  1. Google Cloud コンソールにアクセスします。
  2. メイン ナビゲーションから [プライベート クラウド] をクリックします。
  3. 接続するプライベート クラウドの名前をクリックします。
  4. プライベート クラウドの [概要] ページの [プライベート クラウド DNS サーバー] で、[コピー] をクリックして、プライベート クラウド DNS サーバーの IP アドレスをコピーします。

gcloud

Google Cloud CLI を使用してプライベート クラウドの DNS サーバーの IP アドレスを取得するには、gcloud vmware private-clouds describe コマンドを使用します。

gcloud vmware private-clouds describe \
  --private-cloud=PRIVATE_CLOUD_ID \
  --project=PROJECT_ID \
  --location=REGION

次のように置き換えます。

  • PRIVATE_CLOUD_ID: このリクエストのプライベート クラウドの名前
  • PROJECT_ID: このリクエストのプロジェクト ID
  • REGION: プライベート クラウドのリージョン。拡張されたプライベート クラウドの場合は、このプライベート クラウドのゾーンを指定します

API

VMware Engine API を使用してプライベート クラウドの DNS サーバーの IP アドレスを取得するには、GET リクエストを実行します。

curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/privateCloud/PRIVATE_CLOUD_ID"

次のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト ID
  • REGION: プライベート クラウドのリージョン。拡張されたプライベート クラウドの場合は、このプライベート クラウドのゾーンを指定します
  • PRIVATE_CLOUD_ID: このリクエストのプライベート クラウドの名前。

DNS バインド権限を設定する

DNS バインド権限の設定と管理は、gcloud ツールを使用するか、REST API を直接使用してのみ行うことができます。コンソールからバインディングを設定することはできません。

DNS バインド権限を付与する

ユーザーが DNS バインディングを構成できるようにするには、イントラネット VPC にバインドする権限をユーザー プリンシパルに付与する必要があります。この場合、ユーザー プリンシパルは、限定公開 DNS ゾーンをイントラネット VPC にバインドするユーザーのメールアドレスです。

gcloud

gcloud vmware dns-bind-permission grant \
  --user=USER

USER は、プライベート DNS ゾーンをイントラネット VPC にバインドするユーザーのメールアドレスに置き換えます。例: example1@gmail.com

API

dnsBindPermissions:grant メソッドに対して POST リクエストを行い、リクエスト本文にユーザーのメールアドレスを指定します。

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dnsBindPermission:grant -d '
{
"principal": {
  "user": "USER"
}
}'

次のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト。
  • USER: 権限を取り消すユーザーのメールアドレス。例: example1@gmail.com

DNS バインド権限を取り消す

以前にユーザーに付与された DNS バインド権限を取り消します。

gcloud

gcloud vmware dns-bind-permission revoke \
  --user=USER

USER は、権限を取り消すユーザーのメールアドレスに置き換えます。例: example1@gmail.com

API

dnsBindPermissions:revoke に対して POST リクエストを行い、リクエスト本文にユーザーのメールアドレスを指定します。

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dnsBindPermission:revoke -d '
{
"principal": {
  "user": "USER"
}
}'

次のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト。
  • USER: 権限を取り消すユーザーのメールアドレス。例: example1@gmail.com

DNS バインド権限の説明を取得する

プロジェクトの DNS バインディング権限と、DNS バインディングを構成するためのアクセス権を持つユーザー プリンシパルについての説明を取得します。

gcloud

gcloud vmware dns-bind-permission describe

API

dnsBindPermissions リソースに対して GET リクエストを行います。

curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dnsBindPermission

PROJECT_ID は、このリクエストのプロジェクトに置き換えます。

プライベート クラウド DNS ゾーンを VMware Engine ネットワーク イントラネット VPC にバインドする

DNS バインディングを構成する権限をユーザー プリンシパルに付与すると、ユーザーは Cloud DNS のプライベート DNS ゾーンと VMware Engine ネットワークのイントラネット VPC 間にバインディングを作成できます。VMware Engine は、DNS ピアリングを使用して Cloud DNS の解決を容易にします。

イントラネット VPC の URL の特定

新しいバインディングを作成するには、ネットワーク イントラネット VPC の URL が必要です。VMware Engine ネットワーク イントラネット VPC は、VMware Engine ネットワークの詳細を一覧表示することで確認できます。

コンソール

Google Cloud コンソールを使用してイントラネット VPC の URL を確認する方法は次のとおりです。

  1. Google Cloud コンソールにアクセスします。
  2. メイン ナビゲーションから、[VMware Engine ネットワーク] をクリックします。
  3. VMware Engine ネットワークを見つけて、[アクション] オプションをクリックし、[イントラネット VPC ネットワークの URL をコピー] を選択します。

gcloud

gcloud vmware networks describe VMWARE_ENGINE_NETWORK

VMWARE_ENGINE_NETWORK は、記述するネットワークに置き換えます。レスポンスの一部として、gcloud はイントラネット VPC の URL を含むネットワークの詳細を返します。

API

vmwareEngineNetworks リソースに GET リクエストを送信し、ネットワークの名前を指定します。

curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/vmwarenEngineNetworks/NETWORK_ID

次のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト
  • NETWORK_ID: 記述するネットワーク

バインディング

バインド権限が構成されたら、VMware Engine ネットワーク イントラネット VPC への DNS ピアリングを各ゾーンの標準の Cloud DNS ゾーン管理プロセスに追加する必要があります。

gcloud

gcloud dns managed-zones create peering-DOMAIN  \
--dns-name="DOMAIN" \
--visibility="private" \
--networks="INTRANET_VPC_URL" \
--target-project="PROJECT_ID" \
--target-network="EXISTING_VPC" \
--description="DESCRIPTION"

次のように置き換えます。

  • DOMAIN: 拡張するドメイン(例: zone1.example.com)。
  • INTRANET_VPC_URL: VMware Engine ネットワークのイントラネット VPC URL。
  • EXISTING_VPC: DOMAIN がすでにバインドされている既存の VPC ネットワークの URL
  • PROJECT_ID: このリクエストのプロジェクト ID

API

managedZones リソースに PATCH リクエストを送信し、ゾーンの名前を指定します。

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://dns.googleapis.com/v1/projects/PROJECT_ID/managedZones -d "{
"name": "peering-DOMAIN",          
"description": "",
"dnsName": DOMAIN,
"peeringConfig": {
    "targetNetwork": {
        "networkUrl": EXISTING_VPC
    }
  },
  "privateVisibilityConfig": {
    "networks": [
      {
        "networkUrl": INTRANET_VPC_URL
      }
    ]
  }  
}"

次のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト ID
  • DOMAIN: 拡張するドメイン(例: zone1.example.com)。
  • INTRANET_VPC_URL: VMware Engine ネットワークのイントラネット VPC の URL。
  • EXISTING_VPC: DOMAIN がすでにバインドされている既存の VPC ネットワークの URL

DNS バインディングの例

使用可能な DNS バインディングの例を次に示します。

Authoritative

gcloud dns managed-zones create zone1 \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --description="DESCRIPTION" \
  --networks="EXISTING_VPC"
gcloud dns managed-zones create peering-zone1 \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"

条件付き転送

gcloud dns managed-zones create zone1 \
  --description="DESCRIPTION" \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --networks=EXISTING_VPC \
  --forwarding-targets="DNS_SERVER_IP1","DNS_SERVER_IP2"
gcloud dns managed-zones create peering-zone1 \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"

すべてを転送

gcloud dns managed-zones create forward-all \
  --description="" --dns-name="." \
  --visibility="private" \
  --networks="EXISTING_VPC" \
  --forwarding-targets="DNS_SERVER_IP1","DNS_SERVER_IP2"
gcloud dns managed-zones create peering-forward-all \
  --dns-name="." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"

限定公開 Google API

gcloud dns managed-zones create googleapis \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --description="Direct GCVE traffic to Private IPs for Google API Access" \
  --networks="EXISTING_VPC"
gcloud dns managed-zones create peering-googleapis  \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"
gcloud dns record-sets create private.googleapis.com. \
  --zone="googleapis" \
  --type="A" \
  --ttl="300" \
  --rrdatas="199.36.153.8,199.36.153.9,199.36.153.10,199.36.153.11"
gcloud dns record-sets create *.googleapis.com. \
  --zone="googleapis" \
  --type="CNAME" \
  --ttl="300" \
  --rrdatas="private.googleapis.com."

Google API 制限付き

gcloud dns managed-zones create googleapis \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --description="Direct GCVE traffic to Private IPs for Google API Access" \
  --networks="EXISTING_VPC"
gcloud dns managed-zones create peering-googleapis \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"
gcloud dns record-sets create restricted.googleapis.com. \
  --zone="googleapis" \
  --type="A" \
  --ttl="300" \
  --rrdatas="199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7"
gcloud dns record-sets create *.googleapis.com. \
  --zone="googleapis" \
  --type="CNAME" \
  --ttl="300" \
  --rrdatas="restricted.googleapis.com."