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_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:revokePOST リクエストを行い、リクエスト本文にユーザーのメールアドレスを指定します。

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 コンソールで、[VMware Engine ネットワーク] ページに移動します。

    VMware Engine ネットワークに移動

  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."