本文档介绍了用于负载均衡的两种 Dataplane V2 转发模式,以及如何为 Google Distributed Cloud 启用这些模式。Dataplane V2 支持两种负载均衡转发模式:
- 来源网络地址转换 (SNAT)
- 直接服务器返回 (DSR)
您只能在创建集群时配置用于负载均衡的转发模式。
SNAT 负载均衡
来源网络地址转换 (SNAT) 是 Dataplane V2 负载均衡的默认转发模式。但是,在 SNAT 模式下,系统不会为后端 Pod 保留客户端 IP 地址。当来自客户端的数据包到达负载均衡器节点时,它会进行转换并转发到具有后端 Pod 的目标工作器节点。后端 Pod 看到请求来自负载均衡器节点,而不是客户端位置。因此,回复会返回到负载均衡器节点,然后进行反向转换并发送回客户端。
SNAT 的数据包流
使用 Dataplane V2 负载均衡的 SNAT 转发模式时,从外部客户端到后端 Pod 的数据包流如下所示:
LoadBalancer 类型的服务分配给了负载均衡器节点,并且其 IP 地址
172.16.20.16
由该节点上运行的 MetalLB 扬声器通告。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 以及从外部客户端到后端 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
值便无法修改。在创建集群之前,请确保已经根据您的需求配置了正确的选项。