当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述Cilium DSR (Dircet Server Return)相关的知识,希望能为你提供帮助。
背景:??cilium-dsr??
??cilium-dsr-blog??
Cilium DSR 是一种 南北方向流量的模式,因为如 Cilium Host-Reachable 后边南北流量抓包所发现,其实默认情况下 Cilium NodePort 也是在 SNAT 模式下运行。
也就是说,当外部流量到达时,节点确定后端是在一个远程节点,那么节点就代表他通过执行 SNAT 将请求重定向到远程后端。这种方式不需要额外的封装报文,也就是不会有 MTU 变化,但是代价就是后端的回复需要额外跳回该节点,以便将数据包直接外回给外部客户之前,执行反向 SNAT 转换。
DSR模式的另一个优势是,客户端的源IP被保留下来,因此策略可以在后端节点上进行匹配。在SNAT模式下是不可能的。鉴于一个特定的后端可以被多个服务使用,后端需要知道他们需要回复的服务IP/端口。因此,Cilium在Cilium特定的IPv4选项或IPv6目的地选项扩展头中编码这一信息,代价是公布一个较低的MTU。对于TCP服务,Cilium只对SYN包的服务IP/端口进行编码,而不对后续包进行编码。
DSR 模式不可以在 VXLAN 模式下运行,只可以在 native-routing 模式下运行,因为是 UDP 没有 SYN
握手建立过程。
部署添加如下所示选项
bpf-lb-mode: "dsr"
抓包演示:针对外部主机 192.168.0.50 ens33 网卡抓包
针对集群 master 192.168.0.110 ens33 网卡抓包
针对提供服务的 pod 所在 node 192.168.0.130ens33 网卡抓包
服务环境
root@master:<
sub>
# kubectl get pod
NAMEREADYSTATUSRESTARTSAGE
cni-test-777bbd57c8-vrzjz1/1Running04m17s
root@master:<
/sub>
# kubectl get svc
NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
cni-testNodePort10.100.24.132<
none>
80:30670/TCP2m37s
50 访问 110 NodePortcurl http://192.168.0.110:30670
50.captcpdump -pne -i ens33 -w 50.cap
110.cap我们发现 状态响应报文并没有经过 192.168.0.110
tcpdump -pne -i ens33 -w 110.cap
130.captcpdump -pne -i ens33 -w node.cap
【Cilium DSR (Dircet Server Return)】
推荐阅读
- ubuntu安装cudnn
- Uncaught InvalidArgumentException: Please provide a valid cache path. in /apps/vendor/laravel/framew
- 新作!分布式系统韧性架构压舱石OpenChaos
- CA数字证书包含哪些内容(如何查看SSL证书信息?)
- (0基础学Linux系列)1.02 Linux基础
- NLP教程 - 神经机器翻译seq2seq与注意力机制
- win11系统vmware虚拟机报错“不支持嵌套虚拟化”问题解决方案汇总
- 华为防火墙私网用户通过NAT No-PAT访问Internet(访问明确的目的Server)
- TRON节点验证交易的时间容忍度