可用区级网络端点组概览

网络端点组 (NEG) 是一个配置对象,用于指定一组后端端点或服务。可用区级 NEG 是可用区级资源,表示单个子网内 Google Cloud 资源 IP 地址的集合或 IP 地址/端口组合的集合。

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

如需了解其他 NEG 类型,请参阅:

可用区级 NEG 有两种类型,具体取决于构成 NEG 的网络端点类型。这两种类型的可用区级 NEG 支持不同的用例和负载平衡器类型。

您不能将可用区级 NEG 用作网络负载平衡的后端。

GCE_VM_IP NEG

这些可用区级 NEG 包含一个或多个解析为 Compute Engine 虚拟机主要 IP 地址的内部网络端点。您不能指定具有此类可用区级 NEG 的端口。

这些端点只能用作内部 TCP/UDP 负载平衡器的后端服务的后端。

使用 GCE_VM_IP NEG,您只能在 NEG 的 VPC 网络中连接属于虚拟机的主要内部 IP 地址的端点。只要 NEG 使用与 NIC 相同的 VPC 网络,您就可以将多 NIC 虚拟机的任意 NIC 的主要内部 IP 添加到 NEG 中。

GCE_VM_IP_PORT NEG

这些可用区级 NEG 包含一个或多个内部网络端点,这些端点会解析为虚拟机的主要内部 IP 地址或者某个别名 IP 范围内的 IP 地址。例如,GKE 使用此类型的 NEG,其端点是节点的别名 IP 范围内的一个 IP 地址再加上一个端口(即 Pod IP 地址和容器端口)。每个网络端点都是使用 IP 地址和端口的组合指定的。

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

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

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

端点关系

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

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

您创建的可用区级 NEG 的类型是在创建 NEG 时指定的(GCE_VM_IPGCE_VM_IP_PORT)。这决定了 NEG 支持的端点类型。

对于 GCE_VM_IPGCE_VM_IP_PORT 可用区级 NEG:

  • 您必须指定每个虚拟机端点的名称。

  • 每个端点虚拟机必须与 NEG 位于同一可用区。

  • NEG 中的每个端点都必须是唯一的 IP 地址和端口的组合。一个唯一的端点 IP 地址和端口的组合可由多个 NEG 引用。

  • 每个端点虚拟机都必须拥有一个与 NEG 位于同一 VPC 网络中的网络接口 (NIC)。端点 IP 地址必须与在 NEG 中指定的同一子网相关联。

  • 每个 NEG 最多支持每个 NEG 的端点数上限。这些端点可以分布在多个唯一虚拟机或所有虚拟机中。

对于 GCE_VM_IP_PORT NEG,在添加端点时,您可以选择指定 IP 地址和端口,也可以选择仅指定 IP 地址,也可以两者都不指定:

  • 如果您指定了 IP 地址和端口,则 IP 地址可以是虚拟机 NIC 的主要内部 IP 地址,也可以是 NIC 上的别名 IP。端口由您自行选择。

  • 如果您仅指定了 IP 地址,则 IP 地址可以是虚拟机 NIC 的主要内部 IP 地址,也可以是 NIC 中的别名 IP。使用的端口是 NEG 的默认端口。

  • 如果同时省略两者,则 Google Cloud 会选择 NIC 的主要内部 IP 地址,并使用 NEG 的默认端口。

使用可用区级 NEG 实现负载平衡

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

您可以将同一网络端点添加到多个可用区级 NEG。您可以将同一可用区级 NEG 用作多个后端服务的后端。

GCE_VM_IP_PORT 可用区级 NEG 可以使用 RATE 平衡模式CONNECTION 平衡模式,具体取决于后端服务的协议。支持的负载平衡器需要定义目标容量

GCE_VM_IP 可用区级 NEG 必须使用 CONNECTION 平衡模式,您不能定义目标容量,因为内部 TCP/UDP 负载平衡器不支持目标容量设置。

对于可用区级 NEG 后端,无法使用 UTILIZATION 平衡模式。

内部 TCP/UDP 负载平衡

具有 GCE_VM_IP 端点的可用区级 NEG 只能用作内部 TCP/UDP 负载平衡器的后端服务。

具有 GCE_VM_IP 端点的 NEG 的主要使用场景如下:

简化内部 TCP/UDP 负载平衡器的虚拟机管理

与实例组一样,您可以将同一 NEG 用作多个内部 TCP/UDP 负载平衡器的后端。与实例组不同的是,一个虚拟机端点可以是多个 NEG 的成员,并且每个 NEG 都可用作一个或多个内部 TCP/UDP 负载平衡器的后端。

具有重叠“GCE_VM_IP”可用区级 NEG 的内部 TCP/UDP 负载平衡器
具有重叠可用区级 NEG 的内部 TCP/UDP 负载平衡器

GKE 子集

GKE 使用 GCP_VM_IP 可用区级 NEG 和子集,以下列方式提高内部 TCP/UDP 负载平衡器的可扩缩性:

在不建立子集的情况下,GKE 会为每个可用区创建一个非代管式实例组,其中包含该可用区内所有节点池的集群节点。这些可用区级实例组用作一个或多个内部 LoadBalancer 服务(以及不使用 NEG 本身的外部 Ingress)的后端。

通过建立子集,GKE 会为每个内部 LoadBalancer 服务创建 GCE_VM_IP 个可用区级 NEG。此端点可以是多个可用区级 NEG 的成员。与实例组不同,Google Cloud 可以将负载平衡到包含相同端点的多个可用区级 NEG 中。

通过建立子集,可以更有效地将流量分配到包含超过 250 个节点的集群中的内部 LoadBalancer 服务。例如,300 节点 GKE 集群可能在一个 NEG 中具有 25 个节点的内部 LoadBalancer 服务,因为该服务具有 25 个服务 Pod。并非所有 300 个节点都需要添加到此服务的实例组后端。

请注意,NEG、转发规则、后端服务和其他 Google Cloud 网络资源的配额仍然适用。

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

具有 GCE_VM_IP_PORT 端点的可用区级 NEG 可用作以下类型的负载平衡器的后端服务的后端:外部 HTTP(S)、内部 HTTP(S)、TCP 代理和 SSL 代理负载平衡。

GCE_VM_IP_PORT NEG 可用区级 NEG 的主要用例是容器原生负载平衡,因此您可以将流量直接分配到虚拟机上运行的容器,例如分配到 GKE 集群中的 Pod IP 地址。

以下示例演示了负载平衡器如何在虚拟机上的容器中运行的微服务之间分配流量。虚拟机配置为使用其子网中的别名 IP 地址范围,并且这些范围是该容器使用的地址。

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

下图显示了区域 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 中选择一个网络端点,并将流量发送到此处。

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

使用场景:容器原生负载平衡

利用容器原生负载平衡,负载平衡器能够直接定位 Pod,并在 Pod 级层(而不是虚拟机级层)做出负载分配决策。您可以通过两种方法配置容器原生负载平衡:使用由 GKE Ingress 管理的 NEG,或使用独立 NEG。

将 Kubernetes Ingress 与 NEG 搭配使用(推荐)

将 NEG 与 Ingress 搭配使用时,Ingress 控制器会协助创建 L7 负载平衡器的所有方面。这包括创建虚拟 IP 地址、转发规则、运行状况检查、防火墙规则等。如需了解如何对此进行配置,请参阅通过 Ingress 配置容器原生负载平衡

建议借助 Ingress 来使用 NEG 进行容器原生负载平衡,因为 Ingress 的许多功能都可简化 NEG 的管理。如果 Ingress 管理的 NEG 不符合您的使用场景,则可以使用独立 NEG。

如需了解如何通过 Ingress 设置负载平衡器,请参阅通过 Ingress 配置容器原生负载平衡

独立 NEG

如果没有使用由 GKE Ingress 预配的负载平衡器来部署可用区级 NEG,则会被视为独立 NEG。独立可用区级 NEG 通过 NEG 控制器部署和管理,但转发规则、运行状况检查和其他负载平衡组件手动进行部署。

如需查看将独立可用区级 NEG 与 GKE 搭配使用的示例,请参阅:

限制

  • 不能将可用区级 NEG 用于旧版网络。
  • 将 NEG 用作后端的后端服务不能同时将实例组用作后端。

GCE_VM_IP 可用区级 NEG 的限制:

  • GCE_VM_IP 可用区级 NEG 不支持 default-port 属性
  • 您无法使用 Cloud Console 来创建或管理 GCE_VM_IP NEG。使用 gcloud 或 REST API。

配额

  • 如需了解 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

后续步骤