配置 DNS 绑定

本页面介绍了如何为 标准 VMware Engine 网络配置 DNS 绑定。

每个私有云都会部署一个用于所有管理设备解析的 Cloud DNS 服务器。您可以通过设置 DNS 绑定,将此服务器配置为所有 VMware 工作负载的 DNS 服务器。为此,您需要执行以下操作:

  1. 获取私有云的 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. 通过在 shell 中执行这些命令来配置 ADC 信息:

    gcloud auth application-default login
    

    或者,使用服务账号密钥文件:

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

如需详细了解该库,请访问参考页面或查看GitHub 上的代码示例

获取私有云工作负载 DNS 服务器 IP

控制台

如需获取私有云 DNS 服务器的 IP 地址,请按以下步骤操作。

  1. 在 Google Cloud 控制台中,前往 私有云 页面。

    前往“私有云”页面

  2. 点击选择项目 ,然后选择包含您要连接的私有云的组织、文件夹或项目 。

  3. 点击私有云的名称。

  4. 在私有云的摘要 页面上的私有云 Cloud 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:此请求的私有云名称
  • 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:此请求的私有云名称。

设置 DNS 绑定权限

您只能使用 gcloud 工具或直接使用 REST API 设置和管理 DNS 绑定权限。无法通过控制台设置绑定。

授予 DNS 绑定权限

为了让用户能够配置 DNS 绑定,您必须向用户正文授予绑定到内网 VPC 的权限。在这种情况下,用户正文是将私有 DNS 区域与内网 VPC 绑定的用户的电子邮件地址。

gcloud

gcloud vmware dns-bind-permission grant \
  --user=USER \
  --project=PROJECT_ID

替换以下内容:

  • USER:将专用 DNS 区域与内网 VPC 绑定的用户的电子邮件地址;例如 example1@gmail.com
  • PROJECT_ID:此请求的项目 ID

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 \
  --project=PROJECT_ID

替换以下内容:

  • USER:您要为其撤消权限的用户的电子邮件地址;例如 example1@gmail.com
  • PROJECT_ID:此请求的项目 ID

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 \
--project=PROJECT_ID

PROJECT_ID 替换为此请求的项目 ID。

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 网址

您需要网络内网 VPC 网址才能创建新绑定。您可以列出 VMware Engine 网络的详细信息,以找到 VMware Engine 网络内网 VPC。

控制台

如需使用 Google Cloud 控制台查找内网 VPC 网址,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 VMware Engine 网络 页面。

    前往 VMware Engine 网络

  2. 点击选择项目 ,然后选择包含 VMware Engine 网络的组织、文件夹或项目。

  3. 找到 VMware Engine 网络,点击操作 选项,然后选择复制内网 VPC 网络网址

gcloud

gcloud vmware networks describe VMWARE_ENGINE_NETWORK \
--project=PROJECT_ID

替换以下内容:

  • VMWARE_ENGINE_NETWORK:要描述的网络
  • PROJECT_ID:此请求的项目 ID

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 网络的内网 VPC 网址
  • 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 网络的内网 VPC 网址。
  • 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 私有

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