IPIP模式仅适用于底层不支持BGP直连路由的跨三层环境,如云厂商VPC或隔离子网;需满足节点间物理IP可达但Pod子网未被识别的条件,典型表现为Pod能通宿主机IP却无法通对方Pod IP、路由表缺失via node-ip条目、底层设备不学习容器网段,且日志报no route to host;启用时须显式配置Calico IPPool并重启calico-node,同时调优MTU至1480、按需启用CrossSubnet模式、验证ipip0隧道状态;若在可管环境中,应优先采用BGP直连以获得更低延迟与更高吞吐。
直接启用IPIP模式就能解决跨三层网络下容器不通或卡顿的问题,但关键在于它只应在底层不支持BGP直连路由的环境中使用——比如云厂商VPC、隔离子网、或无法配置BGP的交换机环境。盲目开启反而会引入封装开销和延迟。
不是所有“跨网段”都需要IPIP。只有当节点间物理IP可达,但Pod子网路由未被底层网络识别时,才真正需要它。典型信号包括:
ip route show | grep calico发现目标Pod网段没有对应via <node-ip>路由条目no route to host或Network is unreachable而非连接超时Calico默认可能禁用IPIP,需显式创建或更新IPPool资源。注意:修改后必须重启calico-node Pod才能生效。
calicoctl get ippool -o wide
apiVersion: projectcalico.org/v3kind: IPPoolmetadata: name: default-ippoolspec: cidr: 192.168.0.0/16 ipipMode: Always natOutgoing: true
calicoctl apply -f ipip-pool.yaml
kubectl delete pod -n kube-system -l k8s-app=calico-node
IPIP本身会增加20字节封装、影响MTU、并消耗CPU解包。以下三点不调,性能可能比BGP还差:
1480(1500 − 20),并在calico-node DaemonSet中通过IP_AUTODETECTION_METHOD和FELIX_IPINIPMTU环境变量固化CrossSubnet模式,仅对跨子网链路启用IPIP,减少全局封装ip tunnel show,确认有ipip0设备;再用tcpdump -i ipip0抓包,观察是否有持续重传或ICMP Fragmentation Needed报文如果已部署在私有机房或可管理交换机环境,优先考虑BGP直连: