設定 DNS 繫結
本頁說明如何設定標準 VMware Engine 網路的 DNS 繫結。
每個私有雲都會部署 Cloud DNS 伺服器,用於解析所有管理裝置。您可以設定 DNS 繫結,將這個伺服器設為所有 VMware 工作負載的 DNS 伺服器。如要這麼做,請按照下列步驟操作:
- 取得 Private Cloud 的 DNS 伺服器 IP 位址
- 設定 DNS 繫結權限,允許使用者主體繫結至內部網路 VPC
- 為 VMware 工作負載或 NSX 區隔 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
在殼層中執行這些指令,設定 ADC 資訊:
gcloud auth application-default login
或者,使用服務帳戶金鑰檔案:
export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
如要進一步瞭解程式庫,請造訪參考頁面或查看 GitHub 上的程式碼範例。
取得私有雲工作負載 DNS 伺服器 IP
主控台
如要取得私有雲 DNS 伺服器的 IP 位址,請按照下列步驟操作。
前往 Google Cloud 控制台的「Private clouds」頁面。
按一下「選取專案」,然後選取要連線的私有雲所屬的機構、資料夾或專案。
按一下私有雲的名稱。
在 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
:這項要求的專案 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 網路的內部網路 VPC 之間建立繫結。VMware Engine 會使用 DNS 對等互連,協助解析 Cloud DNS。
尋找內部網路虛擬私有雲網址
您需要網路內部網路 VPC 網址,才能建立新的繫結。列出 VMware Engine 網路的詳細資料,即可找到 VMware Engine 網路的內部網路 VPC。
主控台
如要使用 Google Cloud 控制台找出內部網路 VPC 網址,請按照下列步驟操作:
前往 Google Cloud 控制台的「VMware Engine networks」(VMware Engine 網路) 頁面。
按一下「選取專案」,然後選取包含 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 受限
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."