内部负载均衡和 DNS 名称

DNS 地址记录(称为“A 记录”)用于将 DNS 名称映射到 IP 地址。为内部负载均衡器创建转发规则时,您可以选择指定服务标签,以便 Google Cloud 为该负载均衡器创建一个唯一的 Compute Engine 内部 DNS 名称。此内部 DNS 名称由您的项目 ID、转发规则名称和您指定的服务标签构成。

规格

  • 这些负载均衡器的转发规则支持以下功能:

  • 如需详细了解 Google Cloud 为负载均衡器创建的 DNS 名称的格式,请参阅 DNS 记录格式。由于 DNS 名称包含转发规则的名称,因此即使您对多个转发规则使用相同的服务标签,每个 DNS 名称也是独一无二的。

  • 除非配置了备用域名服务器,否则同一项目和 VPC 网络中任何区域的客户端虚拟机都可以为负载均衡器的内部 DNS 名称执行 DNS 查找。如需访问负载均衡器,客户端虚拟机必须位于相同区域(除非提供全球访问权限且此权限已启用)。如果您启用全球访问权限,则任何区域的客户端都可以访问负载均衡器。

  • 您只能在创建转发规则时指定服务标签,而不能为现有的转发规则添加服务标签。不过,您可以将现有的转发规则替换为带有服务标签的新转发规则。替换规则可以使用与原来的规则相同的内部 IP 地址,但前提是您先删除原来的转发规则。

  • 基于服务标签创建的内部 DNS 名称具有以下限制:

    • 不会创建相应的反向 (PTR) 记录。
    • 每个转发规则只能有一个服务标签。
    • 除了服务标签和转发规则名称以外,您不能更改内部 DNS 名称的其他任何部分,包括其格式和域名 (.internal)。

    如果您的内部负载平衡器需要更灵活的 DNS 名称,您可以在 Cloud DNS 专用托管地区中创建自定义记录。

DNS 记录格式

当您向转发规则添加服务标签后,Google Cloud 会使用以下某种格式创建 Compute Engine 内部 DNS A 记录:

  • 对于内部直通式网络负载均衡器:

    SERVICE_LABEL.FORWARDING_RULE_NAME.il4.REGION.lb.PROJECT_ID.internal

  • 对于区域级内部应用负载均衡器:

    SERVICE_LABEL.FORWARDING_RULE_NAME.il7.REGION.lb.PROJECT_ID.internal

SERVICE_LABEL 是您指定的转发规则的服务标签。它必须遵循以下格式:

  • 长度不超过 63 个字符,可使用小写字母(az)、数字(09)或短划线 (-)。
  • 服务标签必须以小写字母开头。
  • 服务标签必须以小写字母或数字结尾。

FORWARDING_RULE_NAME 是您要创建的转发规则的名称。

REGION 是负载均衡器的地区。

PROJECT_ID项目 ID。系统会将 organization:project-id 格式的项目 ID 转换为 project-id.organization 格式。例如,如果您的项目 ID 为 example.com:example-marketing-prod,则 Google Cloud 将使用 example-marketing-prod.example.com

创建带有服务标签的转发规则

以下过程演示了如何为内部直通网络负载均衡器或内部应用负载均衡器创建带有服务标签的转发规则。

此过程仅重点介绍如何创建带有服务标签的转发规则。此处省略了负载均衡器后端配置的属性和前端配置的其他属性。如果您不熟悉内部直通式网络负载均衡器或内部应用负载均衡器,请参阅以下页面获取完整示例:

控制台

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 完成向导的步骤,以创建内部直通网络负载平衡器或内部应用负载平衡器,然后点击配置
  4. 为该负载均衡器指定一个名称。
  5. 点击继续
  6. 填写后端配置
  7. 点击前端配置。填写前端配置,并在该部分底部指定一个服务标签

  8. 点击完成,然后点击检查并最终确定

gcloud

如需为内部直通网络负载均衡器创建带有服务标签的转发规则,请运行以下命令:

gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --load-balancing-scheme=INTERNAL \
    --region=REGION \
    --backend-service-region=REGION \
    --backend-service=BACKEND_SERVICE_NAME \
    --network=NETWORK \
    --subnet=SUBNET \
    --address=INTERNAL_IP \
    --ip-protocol=PROTOCOL \
    --ports=PORTS \
    --service-label=SERVICE_LABEL

如需为内部 HTTPS 负载均衡器创建带有服务标签的转发规则,请运行以下命令:

gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --region=REGION \
    --target-https-proxy-region=REGION \
    --target-https-proxy=TARGET_PROXY_NAME \
    --network=NETWORK \
    --subnet=SUBNET \
    --address=INTERNAL_IP \
    --ip-protocol=TCP \
    --ports=443 \
    --service-label=SERVICE_LABEL

如需为内部 HTTP 负载均衡器创建带有服务标签的转发规则,请运行以下命令:

gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --region=REGION \
    --target-http-proxy-region=REGION \
    --target-http-proxy=TARGET_PROXY_NAME \
    --network=NETWORK \
    --subnet=SUBNET \
    --address=INTERNAL_IP \
    --ip-protocol=TCP \
    --ports=PORT \
    --service-label=SERVICE_LABEL

请将占位符替换为适当的值:

  • FORWARDING_RULE_NAME 是负载均衡器的转发规则的名称。
  • REGION 是负载均衡器的地区。
  • BACKEND_SERVICE_NAME 是负载均衡器的后端服务的名称。
  • TARGET_PROXY_NAME 是目标 HTTPS 代理(用于内部 HTTPS 负载均衡器)或目标 HTTP 代理(用于内部 HTTP 负载均衡器)的名称。
  • NETWORK 是在其中创建负载均衡器的 VPC 网络的名称。
  • SUBNET 是 VPC 网络中子网的名称。子网必须与负载均衡器的后端服务或目标代理位于同一区域。
  • INTERNAL_IP 是所选子网的主要 IP 地址范围内的一个内部 IP 地址。您可以省略 --address 标志,让 Google Cloud 为您选择一个可用的 IP 地址。
  • 对于内部直通式网络负载均衡器,PROTOCOLTCPUDP,与负载均衡器的后端服务的协议匹配。对于内部应用负载均衡器,协议必须为 TCP
  • 对于内部直通式网络负载均衡器,PORTS 是一个最多包含五个端口(按编号)或单词 ALL 的数组。对于内部 HTTPS 负载均衡器,您必须对端口使用 443;对于内部 HTTP 负载均衡器,您可以对 PORT 使用 808080。如需了解详情,请参阅转发规则概念中的端口规范
  • SERVICE_LABEL 是您所需的服务标签。该标签必须遵循命名惯例

API

以下示例使用 forwardingRules.insert 方法创建转发规则

如需为内部直通网络负载均衡器创建带有服务标签的转发规则,请运行以下命令:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules

{
  "name": "FORWARDING_RULE_NAME",
  "loadBalancingScheme": "INTERNAL",
  "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/backendServices/BACKEND_SERVICE_NAME",
  "network": "https://www.googleapis.com/compute/v1/projects/PROJECT/global/networks/NETWORK",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET",
  "IPAddress": "INTERNAL_IP",
  "IPProtocol": "PROTOCOL",
  "ports": PORTS,
  "serviceLabel": "SERVICE_LABEL"
}

如需为内部 HTTPS 负载均衡器创建带有服务标签的转发规则,请运行以下命令:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules

{
  "name": "FORWARDING_RULE_NAME",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/targetHttpsProxies/TARGET_PROXY_NAME",
  "network": "https://www.googleapis.com/compute/v1/projects/PROJECT/global/networks/NETWORK",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET",
  "IPAddress": "INTERNAL_IP",
  "IPProtocol": "TCP",
  "ports": 443,
  "serviceLabel": "SERVICE_LABEL"
}

如需为内部 HTTP 负载均衡器创建带有服务标签的转发规则,请运行以下命令:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules

{
  "name": "FORWARDING_RULE_NAME",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/targetHttpProxies/TARGET_PROXY_NAME",
  "network": "https://www.googleapis.com/compute/v1/projects/PROJECT/global/networks/NETWORK",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET",
  "IPAddress": "INTERNAL_IP",
  "IPProtocol": "TCP",
  "ports": PORT,
  "serviceLabel": "SERVICE_LABEL"
}

请将占位符替换为适当的值:

  • FORWARDING_RULE_NAME 是负载均衡器的转发规则的名称。
  • REGION 是负载均衡器的地区。
  • BACKEND_SERVICE_NAME 是内部直通式网络负载均衡器的后端服务名称。
  • TARGET_PROXY_NAME 是目标 HTTPS 代理(用于内部 HTTPS 负载均衡器)或目标 HTTP 代理(用于内部 HTTP 负载均衡器)的名称。
  • NETWORK 是在其中创建负载均衡器的 VPC 网络的名称。
  • SUBNET 是 VPC 网络中子网的名称。子网必须与负载均衡器的后端服务或目标代理位于同一区域。
  • INTERNAL_IP 是所选子网的主要 IP 地址范围内的一个内部 IP 地址。您可以省略 IPAddress 键,让 Google Cloud 为您选择一个可用的 IP 地址。
  • 对于内部直通式网络负载均衡器,PROTOCOLTCPUDP,与负载均衡器的后端服务的协议匹配。对于内部应用负载均衡器,协议必须为 TCP
  • 对于内部直通式网络负载均衡器,PORTS 是一个最多包含五个端口(按编号)或单词 ALL 的数组。对于内部 HTTPS 负载均衡器,您必须对端口使用 443;对于内部 HTTP 负载均衡器,您可以对 PORT 使用 808080。如需了解详情,请参阅转发规则概念中的端口规范
  • SERVICE_LABEL 是您所需的服务标签。该标签必须遵循命名惯例

查看服务标签

控制台

您可以查看内部负载均衡器的每个内部转发规则的 Compute Engine 内部 DNS 名称(基于服务标签创建):

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击内部负载均衡器的名称以查看其详情页面。

  3. 分配给负载均衡器的内部转发规则会列在“前端”部分。DNS 名称列显示分配给各转发规则的 Compute Engine 内部 DNS 名称。服务标签是该名称的第一个部分(即第一个英文句点之前的部分)。如果没有显示任何名称,则说明转发规则没有定义服务标签。

gcloud

  1. 列出项目中内部直通式网络负载均衡器或内部应用负载均衡器使用的转发规则。找到所需的转发规则,记下其名称和区域供下一步使用。

    gcloud compute forwarding-rules list \
        --filter="loadBalancingScheme=SCHEME"
    

    SCHEME 的值取决于您需要列出的转发规则:

    • 对于内部直通式网络负载均衡器,请使用 INTERNAL
    • 对于内部应用负载均衡器,请使用 INTERNAL_MANAGED
  2. 描述转发规则,将 FORWARDING_RULE_NAMEREGION 分别替换为其名称和区域:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
        --region=REGION \
        --format="get(serviceLabel)"
    

API

使用 forwardingRules.get 方法查看转发规则和服务标签

对 API 请求的响应包含服务标签 (serviceLabel) 和 Compute Engine 内部 DNS 名称 (serviceName)。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules/FORWARDING_RULE_NAME

TCP/UDP 响应:

{
  ...
  "serviceLabel": "SERVICE_LABEL",
  "serviceName": "SERVICE_LABEL.FORWARDING_RULE_NAME.il4.REGION.lb.PROJECT.internal",
  ...
}

HTTP(S) 响应:

{
  ...
  "serviceLabel": "SERVICE_LABEL",
  "serviceName": "SERVICE_LABEL.FORWARDING_RULE_NAME.il7.REGION.lb.PROJECT.internal",
  ...
}

示例

以下过程演示了如何将转发规则替换为带有服务标签的转发规则。此过程适用于内部直通式网络负载均衡器和内部应用负载均衡器。

如果您尚未为内部负载均衡器创建转发规则,请跳过此示例并参考创建带有服务标签的转发规则

  1. 请描述您的负载均衡器的现有转发规则,并注明转发规则的内部 IP 地址:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
        --region=REGION \
        --format="get(IPAddress)"
    
  2. 删除转发规则:

    gcloud compute forwarding-rules delete FORWARDING_RULE_NAME \
        --region=REGION
    
  3. 创建名称和内部 IP 地址相同且带有服务标签的替换转发规则。如需查看说明,请参阅创建带有服务标签的的转发规则

后续步骤