负载平衡中的网络端点组概念

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

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

不能将 NEG 作为后端用于以下负载平衡器类型:

概览

网络端点组 (NEG) 是表示单个子网中 GCP 资源的 IP 地址和端口组合集合的地区资源。每个 IP 地址和端口组合称为“网络端点”

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

端点关系

创建网络端点组时,您需要选择地区、网络和子网。每个端点 IP 地址必须位于 NEG 所在的子网中。

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

网络端点组目前仅支持 GCE_VM_IP_PORT 类型。这意味着各个端点必须具有与 GCP 虚拟机关联的 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 地址和端口的逻辑分组,因此 NEG 也很有用。由 Apache MesosCloud Foundry 等其他编排程序管理的微服务(在 GCP 虚拟机中运行)的 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 最多可以包含 10000 个端点。
  • 每个项目可以具有的最大 NEG 数至少为 100。如果您需要提高此限制,请与您的 GCP 销售团队联系。
  • 将 NEG 用作后端的后端服务不能同时将实例组用作后端。
  • 每个后端服务最多可以具有 50 个 NEG。这些 NEG 可以位于同一地区,也可以位于不同地区。
  • 目前只能将内部 (RFC 1918) IP 地址添加到 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 --zone=ZONE

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
负载平衡