一、前置知识
calico的IPIP模式使用到了tun设备,先来了解下什么是tun设备,它的作用是什么,以及使用到tun设备的IPIP隧道是如何工作的。
1.1 tun设备
tun是网络层的虚拟网络设备,可以收发第三层数据报文包,如IP封包,因此常用于一些点对点IP隧道,例如OpenVPN,IPSec等。
1.2 IPIP隧道
IPIP隧道其实就是在原始报文的基础上再封装成一个 IPv4 报文,报文使用的是IP协议的格式做的封装。
网络拓扑和报文如上图所示。
二、工作原理
要了解容器环境下calico IPIP网络的工作方式,我们先查看容器及宿主机上的网卡设备及路由信息。
容器内部
容器1:
容器2:
宿主机上
node1:
node2:
所以数据包从容器1-容器2的路径为:
node1: eth0(容器1)——node1上的veth pair对——tunl0(封装外层包)—— ens33
node2:ens33——calib4b2876787c——eth0(容器2)
还有一个需要注意的点是容器内部的默认网关配置是169.254.1.1,并且需要打开proxy_arp,为什么这么配置,可以参考如下连接:
Calico网络中的ProxyARP | C0reFast记事本
三、BGP模式和IPIP模式比较
让我们改下配置,停用tun设备。
查看宿主机路由表:
node1:
node2:
BGP模式和IPIP模式的区别就是少经过了一个tun设备,换句话说就是少封装了一层外部ip。
四、思考
calico ipipMode有一个配置选项叫crosssubnet,作用是同网段的使用bpg,跨网段的使用IPIP模式。为什么会有这个模式?查阅网上资料,大部分都会说calico下bgp模式不能跨网段,那让我们思考下:
- 为什么普通的bgp模式不能跨网段
- 为什么ipip模式可以跨网段
回答这两个问题前,我们先回顾下这两种模式的报文结构。
再回头去看下node1和node2在这两种模式下的路由表,如果在BGP模式下node跨网段访问,路径会经过默认网关,所以是否能访问到对端完全依赖于后面的路由设置了。
所以一般说的的BGP模式不能跨网段也不完全正确。
五、参考
- 一文明白calico的IPIP网络模式-腾讯云开发者社区-腾讯云
- 揭秘 IPIP 隧道
- 16 张图硬核讲解 Kubernetes 网络