本文档介绍了两种用于负载均衡的 Dataplane V2 转发模式,以及如何为 Google Distributed Cloud 启用它们。Dataplane V2 支持两种负载均衡转发模式:
- 来源网络地址转换 (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 模式的数据包流:
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 模式的数据包流:
启用 DSR 模式
如需启用 DSR 模式,请将 spec.clusterNetwork.forwardMode 字段添加到集群配置文件,并将其设置为 dsr。如前所述,SNAT 模式默认处于启用状态。您可以通过将 forwardMode 设置为 snat 来明确指定 SNAT 模式。只有在创建集群时才能配置 Dataplane V2 负载均衡的转发模式。
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: lb-mode
namespace: cluster-lb-mode
...
spec:
clusterNetwork:
forwardMode: dsr # valid options are dsr or snat
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/20
...
集群创建后,forwardMode 值便无法修改。在创建集群之前,请确保已经根据您的需求配置了正确的选项。