企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] 默认情况下,Cilium 的 eBPF NodePort 实现在 SNAT 模式下运行。 也就是说,当节点外部流量到达并且节点确定 LoadBalancer、NodePort 或具有外部 IP 的服务的后端位于远程节点时,节点将通过执行 SNAT 代表其将请求重定向到远程后端。 这不需要任何额外的 MTU 更改。 代价是来自后端的回复需要额外的一跳回到该节点,以在该节点执行反向 SNAT 转换,然后再将数据包直接返回到外部客户端。 可以通过 dsr 的 loadBalancer.mode Helm 选项更改此设置,以便让 Cilium 的 eBPF NodePort 实现在 DSR 模式下运行。 在这种模式下,后端直接回复外部客户端,而不需要额外的一跳,这意味着后端以服务IP/端口作为源进行回复。 # DSR模式优劣势 cilium设置DSR模式优点: - 保留客户端的源 IP - 网络链路更短 cilium设置DSR模式缺点: - 增大 MTU 开销 # 设置DSR必要条件 - [cilium 已替换 kube-proxy](kubeproxy-free.md) - [cilium 开启主机路由](./network_routing.md) # DSR模式变更步骤 ```shell # 获取当前版本号 cilium_version=$(helm -n kube-system ls | awk '/cilium/ {print $NF}') echo $cilium_version # 备份上一次安装的参数 helm -n kube-system get values cilium > cilium_custom.yaml sed -i '1d' cilium_custom.yaml # 添加参数 cat <<EOF | tee -a cilium_custom.yaml >> /dev/null loadBalancer: mode: dsr EOF # 修改参数 helm -n kube-system upgrade cilium cilium/cilium --version $cilium_version -f cilium_custom.yaml # 重启cilium kubectl -n kube-system rollout restart daemonset cilium kubectl -n kube-system rollout status daemonset cilium # 验证 crictl logs `crictl ps --name cilium-agent -q` 2>&1 | egrep lb-mode ```