配置负载均衡网络模式

本文档介绍了用于负载均衡的两种 Dataplane V2 网络模式,以及如何为 GKE on Bare Metal 启用它们。在 GKE on Bare Metal 版本 1.16.0 之前,用于负载均衡的 Dataplane V2 网络模式不可配置。Dataplane V2 仅支持来源网络地址转换 (SNAT) 负载均衡。使用集群版本 1.16.0 及更高版本,您可以在创建集群时将负载均衡网络模式配置为 SNAT(默认)或直接服务器返回 (DSR)。

SNAT 负载均衡

来源网络地址转换 (SNAT) 是 Dataplane V2 负载均衡的默认网络模式。但是,在 SNAT 模式下,系统不会为后端 Pod 保留客户端 IP 地址。当来自客户端的数据包到达负载均衡器节点时,它会进行转换并转发到具有后端 Pod 的目标工作器节点。后端 Pod 看到请求来自负载均衡器节点,而不是客户端位置。因此,回复会返回到负载均衡器节点,然后进行反向转换并发送回客户端。

SNAT 的数据包流

使用 Dataplane V2 负载均衡的 SNAT 网络模式时,从外部客户端到后端 Pod 的数据包流如下所示:

  • 系统会将 LoadBalancer 类型的 Service 分配给负载均衡器节点,并且其 IP 地址 172.16.20.16 由该节点上运行的 MetalLB speaker 通告。

  • Dataplane V2 会将使用 SNAT 的源 IP 地址和端口转换为 <LB_NODE_IP>:52000,并将数据包转发到工作器节点。

  • 响应会发送回负载均衡器节点,目标地址将进行反向转换。

下图显示了 SNAT 模式的数据包流:

SNAT 模式下 Dataplane V2 负载均衡的数据包流

DSR 负载均衡

直接服务器返回 (DSR) 可以解决 SNAT 负载均衡问题。在 DSR 模式下,负载均衡器节点使用 IP 选项来保存客户端来源地址。 工作器节点可以恢复原始数据包并将其转发到后端 Pod。后端 Pod 可以查看数据包来自客户端 IP 地址,而不是负载均衡器节点 IP 地址。因此,返回数据包直接返回客户端 IP 地址,而不是返回负载均衡器节点。

此模式不仅可以解决客户端 IP 地址可见性问题,还可以节省负载均衡器节点的带宽。返回流量不必经过负载均衡器节点,负载均衡器节点也不再需要执行连接跟踪。这种方法可以节省内存并释放转发端口。对于下载流量远远高于请求流量的非对称工作负载,DSR 流程会大幅减少带宽。

DSR 的数据包流

使用 Dataplane V2 负载均衡的 DSR 网络模式时,从外部客户端到后端 Pod 的数据包流如下所示:

  • 系统会将 LoadBalancer 类型的 Service 分配给负载均衡器节点,并且其 IP 地址 172.16.20.16 由该节点上运行的 MetalLB speaker 通告。

  • Dataplane V2 将数据包转发到工作器节点,并使用 IP 选项保存原始客户端来源 IP 地址和端口。

  • 工作器节点上的 Dataplane V2 将数据包转发到后端 Pod。

  • 后端 Pod 会恢复来源 IP 地址和端口,并回复客户端。

下图显示了 DSR 模式的数据包流:

SNAT 模式下 Dataplane V2 负载均衡的数据包流

DSR 限制

只有非隧道模式支持 DSR,这意味着必须启用平面模式网络模型。如需了解如何启用平面模式网络模型,请参阅实现平面 IPv4 模式网络模型。如果未启用平面模式网络模型,则如果您尝试启用 DSR,预检检查应该会失败。

启用 DSR 模式

如前所述,SNAT 模式默认处于启用状态。如需启用 DSR 模式,请在创建集群之前将以下注解添加到集群配置文件。在预览版中,此功能使用注解 preview.baremetal.cluster.gke.io/dpv2-lbmode-dsr: enable 来启用 DSR 模式。如需停用 DSR 模式,请移除注解或将其设置为 disable。其他值不接受,并且会引发验证错误。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: bm
  namespace: cluster-bm
  annotations:
    preview.baremetal.cluster.gke.io/dpv2-lbmode-dsr: enable  # valid options: enable or disable
spec:
...

集群创建后,该值便无法修改。在创建集群之前,请确保已经根据您的需求配置了正确的选项。