内部负载平衡和 DNS 名称

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

规格

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

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

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

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

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

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

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

  • 您不能在引用共享内部 IP 地址的内部转发规则上定义服务标签。这意味着无法为具有 --purpose=SHARED_LOADBALANCER_VIP 标志的内部 IP 地址自动创建 Compute Engine 内部 DNS A 记录,因为该地址由两个或多个内部转发规则使用。

DNS 记录格式

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

  • 对于内部 TCP/UDP 负载平衡:

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

  • 对于内部 HTTP(S) 负载平衡:

    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

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

以下过程演示了如何为内部 TCP/UDP 或内部 HTTP(S) 负载平衡器创建带有服务标签的转发规则。

此过程仅重点介绍如何创建带有服务标签的转发规则。此处省略了负载平衡器后端配置的属性和前端配置的其他属性。如果您刚接触内部 TCP/UDP 负载平衡或内部 HTTP(S) 负载平衡,请参阅以下页面获取完整示例:

控制台

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击创建负载平衡器
  3. HTTP(S) 负载平衡TCP 负载平衡UDP 负载平衡下,点击开始配置
  4. 面向互联网或仅限内部下,选择仅在我的虚拟机之间,然后点击继续
  5. 为该负载平衡器指定一个名称
  6. 填写后端配置
  7. 点击前端配置。填写前端配置,并在该部分底部指定一个服务标签
  8. 点击完成,然后点击检查并最终确定

gcloud

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

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

API

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

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

POST https://www.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://www.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://www.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 是该内部 TCP/UDP 负载平衡器的后端服务名称。
  • TARGET_PROXY_NAME 是目标 HTTPS 代理(用于内部 HTTPS 负载平衡器)或目标 HTTP 代理(用于内部 HTTP 负载平衡器)的名称。
  • NETWORK 是在其中创建负载平衡器的 VPC 网络的名称。
  • SUBNET 是 VPC 网络中子网的名称。子网必须与负载平衡器的后端服务或目标代理位于同一区域。
  • INTERNAL_IP 是所选子网的主要 IP 地址范围内的一个内部 IP 地址。您可以省略 IPAddress 键,让 Google Cloud 为您选择一个可用的 IP 地址。
  • 对于内部 TCP/UDP 负载平衡器,PROTOCOLTCPUDP,与负载平衡器的后端服务的协议匹配。对于内部 HTTP(S) 负载平衡器,协议必须为 TCP
  • 对于内部 TCP/UDP 负载平衡器,PORTS 是由最多五个端口(按数字)或字词 ALL 组成的数组。对于内部 HTTPS 负载平衡器,您必须对端口使用 443;对于内部 HTTP 负载平衡器,您可以对 PORT 使用 808080。如需了解详情,请参阅转发规则概念中的端口规范
  • SERVICE_LABEL 是您所需的服务标签。该标签必须遵循命名惯例

查看服务标签

控制台

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

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击内部负载平衡器的名称以查看其详情页面。
  3. 分配给负载平衡器的内部转发规则会列在“前端”部分。DNS 名称列显示分配给各转发规则的 Compute Engine 内部 DNS 名称。服务标签是该名称的第一个部分(即第一个英文句点之前的部分)。如果没有显示任何名称,则说明转发规则没有定义服务标签。

gcloud

  1. 列出内部 TCP/UDP 负载平衡或内部 HTTP(S) 负载平衡所用项目中的转发规则。找到所需的转发规则,记下其名称和区域供下一步使用。

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

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

    • 对于内部 TCP/UDP 负载平衡器,请使用 INTERNAL
    • 对于内部 HTTP(S) 负载平衡器,请使用 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://www.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",
  ...
}

示例

以下过程演示了如何将转发规则替换为带有服务标签的转发规则。此过程适用于内部 TCP/UDP 负载平衡和内部 HTTP(S) 负载平衡。

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

  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 地址相同且带有服务标签的替换转发规则。如需查看说明,请参阅创建带有服务标签的的转发规则

后续步骤