calico的ipip与bgp的模式分析
1、前言
BGP工作模式:
bgp工作模式和flannel的host-gw模式几乎一样;
bird是bgd的客户端,与集群中其它节点的bird进行通信,以便于交换各自的路由信息;
随着节点数量N的增加,这些路由规则将会以指数级的规模快速增长,给集群本身网络带来巨大压力,官方建议小于100个节点;
限制:和flannel的host-gw限制一样,要求物理机在二层是连能的,不能跨网段;
Route Reflector模式:
在更大规模的集群中,需要通过Route Reflector模式专门创建一个或者几个专门的节点,负责跟所有的BGP客户端建立连接,从而学全全局的路由规则;
而其它节点,只需要跟这几个专门的节点交换路由信息,就可以获得整整个集群的路由信息
IPIP模式:
场景:用在跨网段通信的情况下,bgp模式在跨网段的场景将不能工作;
tunl0:创建的虚拟网卡设备,此时的作用就和flannel的VxLAN工作模式类似(此处的tunl0不是flannel的UDP模式中的tun0)
2、服务器信息
1、ip及mac信息
server | ip | mac | gw_mac |
---|---|---|---|
172.22.108.11 | 172.22.108.11 | b8:ca:3a:f2:74:fb | 38:ad:8e:59:02:e7 |
172.22.108.12 | 172.22.108.12 | 08:94:ef:7b:47:a7 | 38:ad:8e:59:02:e7 |
10.100.106.15 | 10.100.106.15 | b8:2a:72:ce:b0:75 | 00:5e:ed:ff:00:01 |
172.22.108.11 | 172.32.31.151 | ae:a3:86:58:6c:59 | |
172.22.108.12 | 172.32.135.30 | f2:bc:d7:00:3c:be | |
10.100.106.15 | 172.32.245.151 | f6:a\b:e3:0f:ad:12 |
2、路由条目
主机10.100.106.15
主机172.22.108.12
主机172.22.108.11
3、IPIP剖析
1、虚拟tunl0网卡报文详情
在10.100.106.15上ping 172.22.108.12的pod,同时下172.22.108.11上执行抓包命令( tcpdump -i tunl0 host 172.32.245.151 -w 108.12.pcap )(如果抓其物理网卡,是抓不到数据包的,因为,进行了二次封装,到达物理网卡的报文的ip是10.100.106.15)
2、物理网卡报文详情
本机10.100.106.15上抓包,添加过滤信息:ip.addr == 172.32.245.151
tcpdump -i em1 host 172.22.108.12 -w 106.15.pcap
对端172.22.108.12上抓包
添加过滤信息:ip.addr == 172.32.245.151,通过以下抓包可以发现,由于使用了ipip模式,最外一层封装了物理网卡的信息。
4、calico cross-subnet
ipip虽然实现了 calico 跨网段通信,但对于相同网段间的主机通信来说,IP-in-IP 就有点多余了,因为二者宿主机处于同一广播域,2层互通,直接走主机路由即可。此时需要借助calico cross-subnet
$ calicoctl apply -f - << EOF
apiVersion: v1
kind: ipPool
metadata:
cidr: 192.168.0.0/16
spec:
ipip:
enabled: true
mode: cross-subnet
nat-outgoing: true
EOF