总目录索引:K8s网络Calico 从入门到放弃系列
1、IPIP模式简介
IPIP模式是一种将各Node的路由之间做一个tunnel,再把网络连接起来的模式:

从字面上说,就是将一个IP数据包套在另一个IP包里,使用到了Linux提供的隧道技术。可以理解为一个基于IP层的网桥,将两个本不通的网络通过点对点连接起来。
2、准备环境
准备一套k8s环境,并安装好IPIP模式的calico网络

master节点去污点,所以工作节点有两个
分别在两台worker节点运行一个pod,简易pod的yaml文件如下
cat tomcat-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-1
labels:
app: tomcat-1
spec:
containers:
- name: tomcat-1
image: tomcat:v1
imagePullPolicy: IfNotPresent
kubectl label nodes node1 worker=node1
cat tomcat-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-2
labels:
app: tomcat-2
spec:
nodeSelector:
worker: node1
containers:
- name: tomcat-2
image: tomcat:v1
imagePullPolicy: IfNotPresent
运行成功后

3、网络结构解析
3.1 pod网络
进入tomcat-1查看pod的网络
kubectl exec tomcat-1 -- ip a

tomcat-2的网络

可以看到,pod有tunl0、loopback和eth0。
3.2 Node网络


node2中除了enss33外,多了docker0和calib9c0cd39e90@if4(下面简称为cali.90),tunl0就是Calico在IPIP模式下的隧道名称 ,而cali.90是啥子类,该设备的编号为14。让我们回到pod2中,查看pod2内的ip link:
kubectl exec tomcat-2 -- ip link show eth0

eth0@if14是这里eth0连接的设备号也是14!其实这个设备就是veth pair,K8s在创建Pod的时候,会创建一个veth pair设备。设备的一端是pod1的网卡,另一端就是我们在node中看见的cali.90了
3.3 查看node路由信息


根据上节的信息,绘出当前实验网络的主要设备图

3.4 node之间连接
分别在两个node的Cali.4a、tunl0、eth0出进行抓包分析,结果如下图所示,其中Cali.4a与tunl0的ip完全一致,因此合并输出。

按照标志的1、2、3、4来依次分析:1:pod-2中的eth0(即图中的vthe0)与Cali.4a是一对veth pair,因此,Cali.4a接收到的ip流向一定与vthe0相同,为 192.168.166.145>192.168.104.20。查看之前的node1 route表,发现有一条 :

所有发往192.168.104.0/255.255.255.192的ip报都需要通过tunl0,经过192.168.10.12作为gateway发送。因此,cali.4a的ip报会发往tunl0。
2、经过tunl0的ip报会被再封上一层ip。通过node1的route规则,会发往ens33,因此我们在ens33处的抓包结果为 192.168.10.11 > 192.168.10.12: IP 192.168.166.145>192.168.104.20

3、4其实就是1、2的逆过程,检查node2的route表即可知道流向。ens33将ipip拆封后,将流量发给tunl0,tunl0再转发给cali.90。

4、node内连接
如果是同一个node内的两个pod进行访问,通过上节的route规则就可以知道,Calico会为每一个node分配一小段网络,同时会为每个pod创建一个“入”的ip route规则。如下图所示,当从pod2访问pod3时,Cali.90是直接发出192.168.104.20-> 192.168.104.21流量的,在node2的ip route中,发往192.168.104.21的ip报直接会被转发到cali.2f,不会用到tunl0,只有在node间访问的时候才会使用tunl0进行ipip封装!



参考文章:https://blog.csdn.net/u010771890/article/details/103224004
来源:oschina
链接:https://my.oschina.net/u/4313733/blog/4283845