Flannel IPIP模式 电脑版发表于:2022/12/9 15:14  ># Flannel IPIP模式 [TOC] ## IPIP模式简介 tn2> ipip模式类似于vxlan模式,不过这个是三层封装三层网络。 更多可以参考这篇文章:https://www.tnblog.net/hb/article/details/7850 ## Flannel IPIP模式简介 tn2>ipip模式下的路由规则与vxlan的不同点在于,这块的网关地址是节点的。而vxlan中网关的地址是其他节点上的`flannel.1`设备。另外就是所使用的`tunnel`设备不同。 ## 安装Flannel IPIP模式 tn2>首先通过如下命令使内核支持ipip模块。(每个节点都检测一下) ```bash # 加载ipip模式 modprobe ipip # 查看内核支持情况 lsmod | grep ipip ```  tn2>将`net.conf`的类型改为`ipip`模式,然后apply一下即可。  ```bash kubectl delete -f kube-flannel.yaml kubectl apply -f kube-flannel.yaml ```  ## 原理实践 tn2>首先我们部署三个Pod。  >### 同节点不同pod通信 tn2>走二层桥接模式,不讲了 >### 不同节点的pod通信 tn2>我们以c1与c3为例。首先查看两个pod的路由与IP信息。 ```bash kubectl exec pod/c1 -- ifconfig kubectl exec pod/c1 -- route -n kubectl exec pod/c3 -- ifconfig kubectl exec pod/c3 -- route -n ```   tn2>尝试ping是没有问题的。 ```bash kubectl exec pod/c1 -- ping 192.168.2.37 ```  tn2>我们c1 pod想ping通c3 pod(192.168.2.37)走的是二条路由从eth0这个接口出去,然后通过找到连接的线到主机网络名称空间。由于我们的c1 pod在node1节点上,并且要访问的ip不在同一网段,所以我们需要查询node1节点路由。  tn2>由于我们访问的ip地址是`192.168.2.37`,那么我们应该走第五条路由,网关为`10.211.55.9`节点从`flannel.ipip`网卡出去。 当我们的网关为`10.211.55.9`由于是同一网段所以会从第二条路由出去,但是在这个时候我们会进行ipip封包。 ```bash 外层源IP(主机IP 10.211.55.8)外层目的IP(对方节点 10.211.55.9) 源Mac:eth0(节点mac) 目的Mac:eth0(对方节点mac) 内层源IP(pod的ip)内层目的IP(对方pod的ip)内层没有mac,内层没有mac ``` tn2>我们可以在ping时抓`flannel.ipip`网卡的包。 可以发现根本没有mac地址。 ```bash tcpdump -pne -i flannel.ipip ```  tn2>我们可以再来主机的`eth0`上抓包看是如何进行封包的。 正如我们所说的那样,没有pod的ipip地址。 ```bash tcpdump -pne -i eth0 -w flannel_ipip.cap ```  tn2>到node2节点上后,我们将会发往`flannel.ipip`进行解封包,然后再查路由表到下一跳cni0中,如果cni0不知道会发送ARP包进行广播,最后将数据包发送到我们的c3 pod上。  tn2>那他们在ping时拿到的mac地址是? 分别是自己的mac地址和同主机的cni0网卡mac地址。 