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

