設定 DNS 繫結

本頁面說明如何為 Standard VMware Engine Networks 設定 DNS 繫結。

每個私有雲都會部署 Cloud DNS 伺服器,用於解析所有管理機器。您可以設定 DNS 繫結,將這個伺服器設為所有 VMware 工作負載的 DNS 伺服器。如要這樣做,您需要:

  1. 取得 Private Cloud 的 DNS 伺服器 IP 位址
  2. 設定 DNS 繫結權限,允許使用者主體繫結至內部網路 VPC
  3. 為 VMware 工作負載或 NSX-T 區段 DHCP DNS 設定設定 DNS

事前準備

您只能使用 gcloud 工具或 API 設定 DNS 繫結。

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. 在 Shell 中執行下列指令,設定 ADC 資訊:

    gcloud auth application-default login
    

    或者,使用服務帳戶金鑰檔案:

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

如要進一步瞭解程式庫,請參閱參考頁面,或查看 GitHub 上的程式碼範例

取得私人雲端工作負載 DNS 伺服器 IP

主控台

如要取得私有雲端 DNS 伺服器的 IP 位址,請按照下列步驟操作。

  1. 前往 Google Cloud 控制台的「Private clouds」頁面。

    前往 Private Cloud

  2. 按一下「選取專案」,然後選取包含要連線的私人雲端的機構、資料夾或專案。

  3. 按一下私有雲的名稱。

  4. 在私有雲的「摘要」頁面中,點選「私有雲 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:這項要求的專案 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:這項要求的 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 網址,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「VMware Engine networks」頁面。

    前往 VMware Engine 網路

  2. 按一下「選取專案」,然後選取包含 VMware Engine 網路的機構、資料夾或專案。

  3. 找出 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_VPCDOMAIN 已繫結的現有 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:這項要求的專案 ID
  • DOMAIN:要延伸的網域,例如 zone1.example.com
  • INTRANET_VPC_URL:VMware Engine 網路的內部網路虛擬私有雲網址。
  • EXISTING_VPCDOMAIN 已繫結的現有 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."