Kubernetes网络插件之CalicoIPIP模式简介

一、Calico IPIP模式简介

Calico中的IP Pool可以使用两种模式:BGP或者IPIP。

下图使用的是IPIP模式,是一种将各Node的路由之间做一个tunnel,再把网络连接起来的模式。

在每台node主机创建一个tunl0网口,这个隧道连接所有的node容器网络。

从字面上说,就是将一个IP数据包套在另一个IP包里,使用到了Linux提供的隧道技术。可以理解为一个基于IP层的网桥,将两个本不通的网络通过点对点连接起来。

访问Kubernetes零基础轻松入门技术专栏,专栏从实战出发,通过零基础入门-环境搭建-项目案例实战,让初学者快速掌握Kubernetes容器编排引擎。

专栏Kubernetes 零基础轻松入门作者:软件架构18.8币28人已购查看

二、数据包发送过程

下图显示了数据包如何在不同节点中的pods之间的遍历。

1. 一旦Calico网络插件从Kubernetes接收到通知,容器被部署,它将负责分配一个IP地址,并在节点上配置合适的iptables和路由规则。

2. Pod1 发送数据包给Pod2,可以通过Pod2的IP地址,或者Pod2的服务IP地址作为目的地。下图中使用Pod2的IP地址。

3. 如果使用服务IP地址,kube-proxy 执行负载均衡和DNAT,转换目的地IP为远程的Pod IP 地址。

Kube-proxy是一个简单的网络代理和负载均衡器,它的作用主要是负责Service的实现,具体来说,就是实现了内部从Pod到Service和外部的从NodePort向Service的访问。

4. 节点上的路由表(routing table)决定包应该路由到哪里。

如果目的地是同一节点上的本地Pod,则包将直接转发给Pod的接口。

否则,根据网络插件是否使用覆盖网络或L3路由机制,数据包将转发给适当的接口。

在下图中,包被发送到IPIP隧道接口(IPIP tunnel interface),并用IPIP隧道头进行封装。

5. 在包到达目的地节点时,封装被删除。

6. 远程节点上的路由表将数据表路由到目的地Pod,如Pod2。

Spring Cloud Alibaba技术专栏从入门实例、原理剖析和开发实践等各个方面整理了每个模块的知识,包括Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Log日志、分布式全局唯一ID等等技术内容。

专栏Spring Cloud微服务架构项目实战作者:软件架构33.6币54人已购查看

三、IPIP模式的特点

IPIP模式下,node间的Pod访问会使用IPIP技术对出node的ip报进行隧道封装。

node内的Pod访问不会用到IPIP隧道封装。

Pod的ip都是由calico-node设置的IP地址池进行分配的,docker0对kubernetes设置的Pod的IP地址将不再起作用。