設定 DNS 繫結
本頁面說明如何為 Standard VMware Engine Networks 設定 DNS 繫結。
每個私有雲都會部署 Cloud DNS 伺服器,用於解析所有管理機器。您可以設定 DNS 繫結,將這個伺服器設為所有 VMware 工作負載的 DNS 伺服器。如要這樣做,您需要:
- 取得 Private Cloud 的 DNS 伺服器 IP 位址
- 設定 DNS 繫結權限,允許使用者主體繫結至內部網路 VPC
- 為 VMware 工作負載或 NSX-T 區段 DHCP DNS 設定設定 DNS
事前準備
您只能使用 gcloud
工具或 API 設定 DNS 繫結。
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
在 Shell 中執行下列指令,設定 ADC 資訊:
gcloud auth application-default login
或者,使用服務帳戶金鑰檔案:
export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
如要進一步瞭解程式庫,請參閱參考頁面,或查看 GitHub 上的程式碼範例。
取得私人雲端工作負載 DNS 伺服器 IP
主控台
如要取得私有雲端 DNS 伺服器的 IP 位址,請按照下列步驟操作。
前往 Google Cloud 控制台的「Private clouds」頁面。
按一下「選取專案」,然後選取包含要連線的私人雲端的機構、資料夾或專案。
按一下私有雲的名稱。
在私有雲的「摘要」頁面中,點選「私有雲 DNS 伺服器」下方的「複製」,複製私有 Cloud 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
:這項要求的 Private Cloud 名稱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
:這項要求的 Private Cloud 名稱。
設定 DNS 繫結權限
您只能使用 gcloud
工具或直接使用 REST API 來設定及管理 DNS 繫結權限。無法透過控制台設定繫結。
授予 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 Network 的內部網路 VPC 之間建立繫結。VMware Engine 會使用 DNS 對等連線來協助 Cloud DNS 解析。
找出內部網路虛擬私有雲網路網址
您需要網路內部虛擬私有雲網路網址,才能建立新的繫結。您可以列出 VMware Engine 網路的詳細資料,找到 VMware Engine 網路內部網路。
主控台
如要使用 Google Cloud 控制台找出內部網站 VPC 網址,請按照下列步驟操作:
前往 Google Cloud 控制台的「VMware Engine networks」頁面。
按一下「選取專案」,然後選取包含 VMware Engine 網路的機構、資料夾或專案。
找出 VMware Engine 網路,然後按一下「動作」選項,並選取「複製內部網路虛擬私有雲網路網址」。
gcloud
gcloud vmware networks describe VMWARE_ENGINE_NETWORK
將 VMWARE_ENGINE_NETWORK
替換為要說明的網路。gcloud
會在回應中傳回網路的詳細資料,其中包含內部網 VPC 網址。
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
:要描述的網路
繫結
設定繫結權限後,預期的工作流程是將 DNS 對等互連功能新增至 VMware Engine 網路內部網路 VPC,並納入每個區域的標準 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 網路的內部網路虛擬私有雲網路網址EXISTING_VPC
:DOMAIN
已繫結的現有 VPC 網路網址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
:這項要求的專案 IDDOMAIN
:要延伸的網域,例如zone1.example.com
INTRANET_VPC_URL
:VMware Engine 網路的內部網路虛擬私有雲網址。EXISTING_VPC
:DOMAIN 已繫結的現有 VPC 網路網址
DNS 繫結範例
以下列舉一些您可能會使用的 DNS 繫結範例。
權威
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 Private
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 Restricted
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."