設定 DNS 繫結

本頁說明如何設定標準 VMware Engine 網路的 DNS 繫結。

每個私有雲都會部署 Cloud DNS 伺服器,用於解析所有管理裝置。您可以設定 DNS 繫結,將這個伺服器設為所有 VMware 工作負載的 DNS 伺服器。如要這麼做,請按照下列步驟操作:

  1. 取得 Private Cloud 的 DNS 伺服器 IP 位址
  2. 設定 DNS 繫結權限,允許使用者主體繫結至內部網路 VPC
  3. 為 VMware 工作負載或 NSX 區隔 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. 在殼層中執行這些指令,設定 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. 在 Private Cloud 的「Summary」(摘要) 頁面中,按一下「Private Cloud DNS servers」(Private Cloud DNS 伺服器) 下方的「Copy」(複製),複製 Private 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 網路的內部網路 VPC 之間建立繫結。VMware Engine 會使用 DNS 對等互連,協助解析 Cloud DNS。

尋找內部網路虛擬私有雲網址

您需要網路內部網路 VPC 網址,才能建立新的繫結。列出 VMware Engine 網路的詳細資料,即可找到 VMware Engine 網路的內部網路 VPC。

主控台

如要使用 Google Cloud 控制台找出內部網路 VPC 網址,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「VMware Engine networks」(VMware Engine 網路) 頁面

    前往 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 受限

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