DNS バインディングの構成
このページでは、標準の VMware Engine ネットワークの DNS バインディングを構成する方法について説明します。
各プライベート クラウドは、すべての管理アプライアンスの解決に使用される Cloud DNS サーバーをデプロイします。DNS バインディングを設定することで、すべての VMware ワークロードの DNS サーバーとしてこのサーバーを構成できます。そのためには、次のことを行う必要があります。
- プライベート クラウドの DNS サーバーの IP アドレスを取得する
- ユーザー プリンシパルがイントラネット VPC にバインドできるように DNS バインド権限を設定する
- VMware ワークロードまたは NSX-T セグメントの DHCP DNS 設定に DNS を構成する
始める前に
DNS バインディングの構成には、gcloud
ツールまたは API を使用する必要があります。
gcloud と API の要件
gcloud
コマンドライン ツールまたは API を使用して VMware Engine リソースを管理するには、以下で説明するようにツールを構成することをおすすめします。
gcloud
デフォルトのプロジェクト ID を設定します。
gcloud config set project PROJECT_ID
デフォルトのリージョンとゾーンを設定します。
gcloud config set compute/region REGION
gcloud config set compute/zone ZONE
gcloud vmware
ツールの詳細については、Cloud SDK リファレンス ドキュメントをご確認ください。
API
このドキュメント セットの API の例では、cURL
コマンドライン ツールを使用して API がクエリされています。cURL
リクエストには、有効なアクセス トークンが必要です。有効なアクセス トークンを取得するにはさまざまな方法があります。次の手順では、gcloud
ツールを使用してアクセス トークンを生成します。
Google Cloud にログインします。
gcloud auth login
アクセス トークンを生成して TOKEN にエクスポートします。
export TOKEN=`gcloud auth print-access-token`
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 と通信します。このアプローチを使用するには、ライブラリをインストールし、アプリケーションのデフォルト認証情報を構成する必要があります。
Python ライブラリをダウンロードしてインストールします。
pip install google-cloud-vmwareengine
シェルで次のコマンドを実行して、ADC 情報を構成します。
gcloud auth application-default login
または、サービス アカウント キー ファイルを使用します。
export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
ライブラリの詳細については、リファレンス ページまたは GitHub のコードサンプルをご覧ください。
プライベート クラウド ワークロードの DNS サーバー IP を取得する
コンソール
プライベート クラウドの DNS サーバーの IP アドレスを取得する手順は次のとおりです。
Google Cloud コンソールで、[プライベート クラウド] ページに移動します。
接続するプライベート クラウドの名前をクリックします。
プライベート クラウドの [概要] ページの [プライベート クラウド 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
: このリクエストのプロジェクト IDREGION
: プライベート クラウドのリージョン。拡張されたプライベート クラウドの場合は、このプライベート クラウドのゾーンを指定します
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
: このリクエストのプロジェクト IDREGION
: プライベート クラウドのリージョン。拡張されたプライベート クラウドの場合は、このプライベート クラウドのゾーンを指定します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 を確認する手順は次のとおりです。
Google Cloud コンソールで、[VMware Engine ネットワーク] ページに移動します。
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 ネットワークの URLPROJECT_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
: このリクエストのプロジェクト IDDOMAIN
: 拡張するドメイン(例: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."