配置 DNS 绑定
本页面介绍如何为标准 VMware Engine 网络配置 DNS 绑定。
每个私有云部署一个 Cloud DNS 服务器,用于解析所有管理设备。您可以通过设置 DNS 绑定将此服务器配置为所有 VMware 工作负载的 DNS 服务器。为此,您需要:
- 获取私有云的 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 控制台。
- 在主导航栏中,点击私有云。
- 点击要连接到的私有云的名称。
- 在私有云的摘要页面的私有云 DNS 服务器下,点击复制以复制专用 Cloud DNS 服务器 IP 地址。
gcloud
如需使用 Google Cloud CLI 获取私有云的 DNS 服务器的 IP 地址,请使用 gcloud vmware private-clouds describe
命令:
gcloud vmware private-clouds describe \ --private-cloud=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 绑定权限
您只能使用 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
替换为此请求的项目。
将专用 Cloud DNS 区域与 VMware Engine 网络内网 VPC 绑定
向用户主帐号授予配置 DNS 绑定的权限后,用户可以在 Cloud DNS 中的专用 DNS 区域与 VMware Engine 网络的内网 VPC 之间创建绑定。VMware Engine 使用 DNS 对等互连来帮助 Cloud DNS 解析。
查找内网 VPC 网址
您需要该网络内网 VPC 网址才能创建新绑定。您可以通过列出 VMware Engine 网络的详细信息找到 VMware Engine 网络内网 VPC。
控制台
如需使用 Google Cloud 控制台查找内网 VPC 网址,请按以下步骤操作:
- 访问 Google Cloud 控制台。
- 在主导航栏中,点击 VMware Engine 网络。
- 找到 VMware Engine 网络,点击操作选项,然后选择复制内网 VPC 网络网址。
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
:要描述的网络
绑定
配置完绑定权限后,预期工作流是将指向 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 网址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 网络的内网 VPC 网址。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 专用
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."