1. Calico IPIP模式深度解析
在容器网络方案选型中,Calico的IPIP模式因其独特的隧道机制成为跨子网通信的经典解决方案。不同于BGP协议的直接路由宣告,IPIP通过创建虚拟隧道网络,将原始数据包封装在宿主机的IP报文中传输。这种设计在Kubernetes集群节点位于不同二层网络时尤为实用,比如公有云多可用区部署或混合云场景。
注意:IPIP全称为IP in IP,是RFC 2003定义的隧道协议,其包头开销仅20字节,远低于VXLAN的50字节,这也是其性能优势的关键所在。
1.1 IPIP工作原理拆解
当Pod A(10.244.1.5)尝试访问跨子网的Pod B(10.244.2.10)时,数据包会经历以下处理流程:
-
出站封装:
- Pod A的eth0网卡发出原始IP包(src:10.244.1.5, dst:10.244.2.10)
- 源节点calico-node通过路由表识别目标需走IPIP隧道
- 内核IPIP模块添加外层IP头(src:192.168.1.100, dst:192.168.2.100)
-
网络传输:
- 封装后的包经物理网络到达目标节点
- 中间网络设备仅能看到宿主机IP,对Pod网络完全透明
-
入站解封:
- 目标节点识别IPIP协议类型(协议号4)
- 剥离外层IP头,将原始包递交给calico-node
- 最终通过veth pair将包送入Pod B
bash复制# 查看节点路由表示例(关键字段说明)
ip route show
default via 192.168.0.1 dev eth0
10.244.1.0/24 dev cali123 proto kernel scope link src 10.244.1.1
10.244.2.0/24 via 192.168.2.100 dev tunl0 proto bird onlink
1.2 与Flannel host-gw的对比
许多用户在Calico BGP和Flannel host-gw之间犹豫不决,实际上两者在同类场景下的差异显著:
| 特性 | Calico IPIP
