Cilium Hybrid 模式分析
Hybrid DSR and SNAT Mode 详细分析
一、核心原理
Hybrid(混合)模式是 Cilium 负载均衡的一种特殊配置,其核心逻辑是:
- 对 TCP 连接使用 DSR(Direct Server Return,直接服务器返回
- 对 UDP 连接使用 SNAT(Source Network Address Translation,源网络地址转换)
实现两种模式的差异化应用。
-
DSR 原理:TCP 流量通过负载均衡器转发到后端 Pod 时,仅修改数据包的目标地址(不修改源地址),后端 Pod 直接向客户端回复响应,无需经过负载均衡器中转,回程减少“额外一跳”。
-
SNAT 原理:UDP 流量通过负载均衡器时,会修改数据包的源地址为负载均衡器自身地址,后端 Pod 的响应需先返回负载均衡器,再由负载均衡器转发给客户端。
这种混合模式的设计基于 TCP 和 UDP 的协议特性差异:
-
TCP 是面向连接的可靠协议,适合通过 DSR 降低延迟;
-
UDP 是无连接的,使用 SNAT 可避免 DSR 可能带来的网络配置复杂性(如 MTU 调整)。
二、使用方式
Hybrid 模式通过 Cilium 的 Helm 配置启用,具体步骤如下:
-
环境要求:需在无 kube-proxy 的环境中使用(
kubeProxyReplacement=true),并采用原生路由模式(routingMode=native)。 -
Helm 安装命令:
-
helm install cilium cilium/cilium --version 1.18.3 \ --namespace kube-system \ --set routingMode=native \ --set kubeProxyReplacement=true \ --set loadBalancer.mode=hybrid \ # 启用混合模式 --set k8sServiceHost=${API_SERVER_IP} \ --set k8sServicePort=${API_SERVER_PORT}
-
-
核心配置项:
-
loadBalancer.mode=hybrid:指定负载均衡模式为混合模式,TCP 自动使用 DSR,UDP 自动使用 SNAT,无需额外配置服务注解。
-
三、优势
-
减少延迟,提升性能:对 TCP 流量使用 DSR,避免响应数据包经过负载均衡器的“额外一跳”,降低网络延迟,尤其适合以 TCP 为主要传输协议的工作负载(如 HTTP、数据库等)。
-
避免手动调整 MTU:DSR 模式可能因数据包封装(如 Geneve)导致 MTU(最大传输单元)不匹配,需手动调整网络配置;而混合模式中 UDP 使用 SNAT 可规避这一问题,减少网络配置复杂度。
-
兼顾协议特性:针对 TCP(可靠连接)和 UDP(无连接)的不同特性选择最优转发方式:TCP 受益于 DSR 的低延迟,UDP 受益于 SNAT 的配置简洁性。
-
无缝集成 Kubernetes 服务:无需修改 Kubernetes Service 定义,通过全局 Helm 配置即可生效,对业务代码和服务配置无侵入性。
总结
Hybrid 模式是 Cilium 针对 TCP 和 UDP 协议特性设计的优化方案,通过“TCP 用 DSR 降延迟,UDP 用 SNAT 避麻烦”的组合,在提升性能的同时降低网络配置成本,尤其适合以 TCP 为主、需兼顾 UDP 的 Kubernetes 环境。