NCP 将为每个服务端口创建一个第 4 层负载均衡器虚拟服务器和池。

有关此功能的详细信息:
  • TCP 和 UDP 均受支持。
  • 每个服务都将有一个唯一的 IP 地址。
  • 根据 LoadBalancer 定义中的 loadBalancerIP 字段,将从外部 IP 池中为服务分配一个 IP 地址。loadBalancerIP 字段可以为空,具有 IP 地址或具有 IP 池的名称或 ID。如果 loadBalancerIP 字段为空,则从 ncp.ini[nsx_v3] 部分中的 external_ip_pools_lb 选项指定的外部 IP 池中分配 IP。如果 external_ip_pools_lb 选项不存在,则使用 external_ip_pools 指定的池。将在此 IP 地址和服务端口上公开 LoadBalancer 服务。
  • 可以通过更改配置并重新启动 NCP 来更改为不同的 IP 池。
  • loadBalancerIP 指定的 IP 池必须具有标记 scope: ncp/owner, tag: cluster:<cluster_name>

  • 在策略模式下,支持不具有选择器的类型为 LoadBalancer 的服务。对于此类服务,NSX 负载均衡器的 SNAT IP 将是类型为 LoadBalancer 的服务的 IP。如果更新类型为 LoadBalancer 的服务的 IP,NSX 负载均衡器的 SNAT IP 也将更新。请注意,无法将不具有选择器的服务配置为另一个不具有选择器的服务的端点。
  • 在策略模式下,您可以将注释 ncp/transparent-lb 设置为 true,以在负载均衡器池上禁用 SNAT。仅在单层拓扑中支持此功能。
  • 默认情况下,NSX 限制负载均衡器的虚拟服务器、服务器池和池成员数量。您可以将 [nsx_v3] relax_scale_validation 设置为 true 以绕过这些限制。
  • 默认情况下,NCP 不会对任何负载均衡器的池成员数量实施限制。您可以使用 [nsx_v3] ncp_enforced_pool_member_limit 参数以更改该行为。仅在策略模式下支持该功能,并且该功能要求将 [nsx_v3] l4_lb_auto_scaling 设置为 false。对于 ncp_enforced_pool_member_limit,可以使用以下选项:
    • DEACTIVATE - NCP 不实施池成员限制。
    • ACTIVATE - NCP 实施池成员限制,以防止任何负载均衡器使用过多的 CPU 或内存。请注意,如果 relax_scale_validation 设置为 false,并且 members_per_small_lbsmembers_per_medium_lbs 设置为高于 NSX 范围限制的值,将实施 NSX 范围,从而无需进行该配置。
  • 错误作为注释添加到服务中。错误键为 ncp/error.loadbalancer。可能的错误包括:
    • ncp/error.loadbalancer: IP_POOL_NOT_FOUND

      该错误表示指定了 loadBalancerIP: <nsx-ip-pool>,但 <nsx-ip-pool> 不存在。服务将处于非活动状态。要解决此错误,请指定有效的 IP 池,然后删除并重新创建该服务。

    • ncp/error.loadbalancer: IP_POOL_EXHAUSTED

      该错误表示指定了 loadBalancerIP: <nsx-ip-pool>,但 IP 池已用尽其 IP 地址。服务将处于非活动状态。要解决此错误,请指定包含可用 IP 地址的 IP 池,然后删除并重新创建该服务。

    • ncp/error.loadbalancer: IP_POOL_NOT_UNIQUE

      此错误表示多个 IP 池具有 loadBalancerIP: <nsx-ip-pool> 指定的名称。服务将处于非活动状态。

    • ncp/error.loadbalancer: POOL_ACCESS_DENIED

      此错误表示 loadBalancerIP 指定的 IP 池不具有标记 scope: ncp/owner, tag: cluster:<cluster_name>,或标记中指定的集群与 Kubernetes 集群的名称不匹配。

    • ncp/error.loadbalancer: LB_VIP_CONFLICT

      此错误表示 loadBalancerIP 字段中的 IP 与活动服务的 IP 相同。服务将处于非活动状态。

  • 第 4 层负载均衡器支持自动调整。如果创建或修改 Kubernetes LoadBalancer 服务以便需要更多的虚拟服务器,而现有的第 4 层负载均衡器没有足够的容量,将创建新的第 4 层负载均衡器。NCP 也将删除不再连接虚拟服务器的第 4 层负载均衡器。默认情况下,将启用该功能。如果要禁用此功能,必须在 NCP ConfigMap 中将 l4_lb_auto_scaling 设置为 false
  • 在创建 LoadBalancer 类型的服务时,您可以指定 loadBalancerSourceRanges 参数。仅在策略模式下支持此功能。例如:
    kind: Service
    metadata:
      name: nginx-service-lb
      labels:
        app: nginx
    spec:
      type: LoadBalancer
      loadBalancerSourceRanges:
        - "10.30.88.116/24"
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
          name: tcp
    ...

    创建的 NSX 负载均衡器将仅允许来自指定源 IP 地址的流量。您可以在 NSX Manager 中查看虚拟服务器的访问列表控制以验证这一点。它将允许特定的组进行访问。该组将包含 loadBalancerSourceRanges 中指定的 IP 地址。您可以导航到清单 > 以查看该组。