区域网络端点组概览

您可以使用区域网络端点组 (NEG) 作为后端服务的后端。此配置的主要使用场景是在虚拟机上部署容器,以便您可以在容器中运行服务。您还可以将流量精确分配到在虚拟机上运行的应用。

本文档讨论如何将区域网络端点组用于以下负载平衡器类型:

不能将地区 NEG 作为以下负载平衡器类型的后端:

如需了解互联网 NEG,请参阅互联网网络端点组概览

如需了解无服务器 NEG,请参阅无服务器网络端点组概览

概览

区域网络端点组 (NEG) 是一种区域资源,由单个子网内 Google Cloud 资源的 IP 地址和端口组合的集合表示。每个 IP 地址和端口组合称为一个“网络端点”

区域网络端点组可用作 HTTP(S)、内部 HTTP(S) 负载平衡、TCP 代理和 SSL 代理负载平衡器的后端服务的后端。不能将区域 NEG 作为内部 TCP/UDP 负载平衡器的后端。由于区域 NEG 后端允许您指定 IP 地址和端口,因此您可以在虚拟机实例中运行的应用或容器之间精确分配流量

端点关系

创建网络端点组时,您需要选择区域、网络和子网。所有端点 IP 地址都必须与区域 NEG 位于同一子网。

如果您选择的网络是自动模式网络,则可以省略指定子网这一操作。但是,仍会有子网与区域 NEG 关联。如果您在创建区域 NEG 时指定了自动模式网络,但未指定子网,则将在您为区域 NEG 选择的区域所属的地区中自动创建所要使用的子网。

网络端点组目前仅支持 GCE_VM_IP_PORT 类型。这意味着每个端点都必须有与 Google Cloud 虚拟机关联的 IP 地址。将端点添加到区域 NEG 时,请注意以下几点:

  • 必须指定虚拟机实例的名称。虚拟机实例必须与区域 NEG 位于同一区域,并且在 VPC 网络中其网络接口必须位于该区域所属同一地区的子网中。

  • 一个区域 NEG 中最多可包含 10000 个端点。这 10000 个端点可以全部位于同一虚拟机上。在将端点添加到现有区域 NEG 时,通过引用虚拟机来创建每个端点。在不同区域 NEG 中创建的端点可以指向同一虚拟机。

    • 除指定虚拟机实例外,您还可以指定 IP 地址或 IP 地址和端口组合。指定的任何 IP 地址都必须是虚拟机的主要内部 IP 地址,或是与区域 NEG 位于同一子网的虚拟机的别名 IP

    • 如果在添加端点时未指定 IP 地址,则系统将使用 VPC 网络中虚拟机的主要内部 IP 地址。

    • 如果在添加端点时未指定端口,则必须已定义了区域 NEG 的默认端口。除非指定了专属端口,否则端点都将使用默认端口。这意味着您必须在创建区域 NEG 时指定默认端口,或为添加到其中的每个端点指定端口。

    • 区域 NEG 中的每个端点都必须是唯一的 IP 地址和端口组合。如果未为 IP 地址指定端口,则系统会使用 IP 和默认端口创建组合。

端点、容器和服务

如需为虚拟机中运行的容器或应用创建唯一的网络端点,您必须使用该虚拟机的主要 IP 地址或分配给该虚拟机的次要 IP(使用别名 IP 地址功能进行分配)。容器中运行的软件或虚拟机中运行的应用应配置为绑定到网络端点使用的 IP 地址。

NEG 对 GKE 尤其有用。如需了解如何将区域 NEG 用于 GKE,请参阅使用容器原生负载平衡

NEG 还允许您创建表示软件服务(而非整个虚拟机)的 IP 地址和端口的逻辑分组,此功能也非常有用。也就是说其端点可以是受 Apache MesosCloud Foundry 等其他编排程序管理的微服务(在 Google Cloud 虚拟机中运行)的 IP 地址。

负载平衡

后端服务

区域 NEG 可用作负载平衡器中后端服务的后端。在将区域 NEG 用作后端服务的后端时,该后端服务中的所有其他后端也必须是区域 NEG。您不能将实例组和区域 NEG 用作同一后端服务的后端。

您可以向多个区域 NEG 添加相同的网络端点(IP 地址和端口组合),并且可以将同一区域 NEG 用作多个后端服务的后端。

使用区域 NEG 作为后端的后端服务只能使用 RATECONNECTION 平衡模式。对于使用区域 NEG 作为后端的后端服务,您不能使用 UTILIZATION 平衡模式。

HTTP(S)、内部 HTTP(S)、TCP 代理和 SSL 代理负载平衡

您可以通过标准或优质网络服务层级在负载平衡器中使用区域网络端点组。

下图显示了区域 NEG 为后端的 HTTP(S) 负载平衡器、TCP/SSL 代理负载平衡器以及内部 HTTP(S) 负载平衡器的配置组件:

  • 每个优质层级 - HTTP(S)、SSL 代理和 TCP 代理负载平衡器都有专属的全球外部转发规则,用于将流量定向到相应的目标代理对象。

  • 每个标准层级 - HTTP(S)、SSL 代理和 TCP 代理负载平衡器都有专属的地区外部转发规则,用于将流量定向到相应的目标代理对象。

  • 每个内部 HTTP(S) 负载平衡器都有自己的地区内部托管转发规则,用于将流量定向到相应的目标代理对象。

  • 对于目标 HTTP(S) 代理,所使用的后端服务通过检查网址映射中的请求主机名和路径来确定。外部 HTTP(S) 和内部 HTTP(S) 负载平衡器可以有多个从网址映射引用的后端服务。

  • 对于目标 TCP 或目标 SSL 代理,只能定义一个后端服务。

  • 后端服务将流量定向到其后端区域 NEG。对于每个请求,负载平衡器会从某个区域 NEG 中选择一个网络端点,并将流量发送到此处。

负载平衡中的区域网络端点组(点击放大)
负载平衡中的区域网络端点组(点击放大)

使用容器实现负载平衡

以下示例演示了如何在虚拟机容器中运行的微服务之间分配流量。这些虚拟机配置为使用其子网中的别名 IP 地址范围,并且这些范围是这些容器使用的地址。本示例使用了 HTTP(S)、内部 HTTP(S)、TCP 代理或 SSL 代理负载平衡。

使用容器对区域网络端点组进行负载平衡(点击放大)
使用容器对区域网络端点组进行负载平衡(点击放大)

此示例可进行如下设置:

  1. 在虚拟机上配置容器或服务。如果每个虚拟机上应运行多个容器,或者您需要容器的 IP 地址,请配置虚拟机的别名 IP 地址。如果要配置服务,则您需要在同一虚拟机上运行两项或多项服务,确保至少端口号不同。
  2. 创建区域网络端点组。如果您使用 Kubernetes 或 Google Kubernetes Engine,则无需执行此步骤,因为 Ingress 控制器会创建区域 NEG。
  3. 将网络端点添加到区域网络端点组。
  4. 创建运行状况检查。
  5. 创建后端服务
  6. 对于 HTTP(S) 负载平衡,创建一个网址映射,并将后端服务连接到该映射。
  7. 创建相应类型的目标代理,例如目标 HTTP 代理、目标 HTTPS 代理、目标 SSL 代理或目标 TCP 代理。将目标代理链接到网址映射(适用于 HTTP(S) 负载平衡)或后端服务(适用于 TCP 代理和 SSL 代理负载平衡)。
  8. 创建转发规则并将其链接到目标代理。

如需了解使用 gcloud 命令行工具配置的示例,请参阅负载平衡网络端点组示例

限制

  • 不能将区域 NEG 用于旧式网络。
  • 网络端点的 IP 地址必须是属于指定虚拟机实例的主要或别名 IP。

限制

  • 区域 NEG 只能用作负载平衡器的后端。以下负载平衡器类型支持区域 NEG:外部 HTTP(S)、内部 HTTP(S)、TCP 代理和 SSL 代理。
  • 区域 NEG 仅支持 RATE 平衡模式实现 HTTP(s) 负载平衡,同时支持 CONNECTION 实现 TCP/SSL 负载平衡。不支持基于利用率的负载平衡。
  • 将 NEG 用作后端的后端服务不能同时将实例组用作后端。
  • 目前只能将内部 (RFC 1918) IP 地址添加到区域 NEG 中。
  • 如需了解 NEG 配额(例如每个项目的 NEG、每个后端服务的 NEG 和每个 NEG 的端点),请参阅负载平衡配额页面

问题排查

流量未到达端点

配置服务后,如果新端点能够响应运行状况检查,那么在将新端点附加到区域 NEG 后,通常就可以访问新端点。

如果流量无法到达端点,从而导致出现 HTTP(s) 的 502 错误代码或 TCP/SSL 负载平衡器的连接被拒,请检查以下内容:

  • 验证防火墙规则是否允许传入的 TCP 流量传输到以下范围内的端点:130.211.0.0/2235.191.0.0/16
  • 验证您的端点是否运行正常,方法是使用 gcloud(如下所示),或调用后端服务资源上的 getHealth API 或 showHealth 参数设置为 SHOW 的区域 NEG 上的 listEndpoints API。以下 gcloud 命令按网络端点显示运行状况信息:
gcloud compute network-endpoint-groups list-network-endpoints NAME \
    --zone=ZONE

后续步骤