You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于使用Cilium替代kube-proxy的Kubernetes集群NAT iptables规则及Cilium CNI数据包流向的技术咨询

关于使用Cilium替代kube-proxy的Kubernetes集群NAT iptables规则及Cilium CNI数据包流向的技术咨询

嘿,我来帮你拆解下你这个用Cilium替代kube-proxy的K8s集群里的NAT iptables规则,还有Cilium处理数据包的大致逻辑,先看你贴出来的iptables NAT表规则:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
CILIUM_PRE_nat  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_PRE_nat */
LIMADNS    all  --  anywhere             anywhere            

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
CILIUM_OUTPUT_nat  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_OUTPUT_nat */
LIMADNS    all  --  anywhere             anywhere            

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
CILIUM_POST_nat  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_POST_nat */

Chain CILIUM_OUTPUT_nat (1 references)
target     prot opt source             ...

接下来给你逐个解析这些链的作用,还有Cilium替代kube-proxy后数据包的流转逻辑:

  • PREROUTING链:所有入站数据包都会先经过这里,Cilium插入的CILIUM_PRE_nat链主要负责处理ClusterIP类型服务的入站流量DNAT——也就是把发往ClusterIP的流量转发到后端Pod的IP上,这部分直接替代了传统kube-proxy在iptables里实现的ClusterIP DNAT规则。另外还有个LIMADNS链,应该是你集群里本地DNS相关的自定义NAT规则,和Cilium本身的逻辑无关。

  • OUTPUT链:Pod或者节点本地进程发起的出站流量会走到这里,CILIUM_OUTPUT_nat链承担两个核心作用:一是处理Pod访问ClusterIP时的DNAT(逻辑和PREROUTING类似,但针对本地发起的流量);二是给Pod访问外部服务的流量打标记,后续在POSTROUTING链里完成最终的SNAT操作。这里的LIMADNS链同样是负责DNS流量的特殊处理。

  • POSTROUTING链:数据包离开节点前会经过这里,CILIUM_POST_nat链主要负责SNAT操作——比如Pod访问外部网络时,把源IP替换成节点的公网/集群出口IP;还有Pod之间跨节点通信时的源IP转换(如果你的Cilium开启了相关SNAT配置的话),这部分替代了kube-proxy的kube-postrouting链功能。

  • CILIUM_OUTPUT_nat链:你贴的内容没写完,但从命名和引用关系能看出来,这个链是专门处理节点本地(包括Pod内)发起的出站流量的NAT规则。要重点说的是,Cilium会用eBPF程序在这里做高效的规则匹配,比传统iptables的线性匹配性能好太多,这也是Cilium能替代kube-proxy的核心优势之一。

另外要提醒你,Cilium替代kube-proxy后,大部分服务转发逻辑是通过eBPF程序实现的,你看到的这些CILIUM_*链其实是Cilium用来把流量导入eBPF处理的“引流入口”,真正的转发、NAT逻辑都在eBPF程序里完成,iptables只是起到流量引导的作用,这也是Cilium性能碾压传统kube-proxy的关键原因。

备注:内容来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:14:49