AnyShare Family 7 Kubernetes Calico 网络通信原理揭秘
Calico 概述
Calico是一个基于BGP的纯三层的网络方案,与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。Calico在每个计算节点都利用Linux Kernel实现了一个高效的虚拟路由器vRouter来负责数据转发。每个 vRouter 都通过BGP1协议把在本节点上运行的容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。Calico节点组网时可以直接利用数据中心的网络结构(L2或者L3),不需要额外的NAT、隧道或者Overlay Network,没有额外的封包解包,能够节约CPU运算,提高网络效率。
Calico在小规模集群中可以直接互联,在大规模集群中可以通过额外的BGP route reflector来完成。此外,Calico基于iptables还提供了丰富的网络策略,实现了Kubernetes的Network Policy策略,提供容器间网络可达性限制的功能。
Calico 架构及BGP实现
BGP是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或“前缀”表来实现自治系统AS之间的可达性,属于矢量路由协议。不过,考虑到并非所有的网络都能支持BGP,以及Calico控制平面的设计要求物理网络必须是二层网络,以确保 vRouter间均直接可达,路由不能够将物理设备当作下一跳等原因,为了支持三层网络,Calico还推出了IP-in-IP叠加的模型,它也使用Overlay的方式来传输数据。IPIP的包头非常小,而且也是内置在内核中,因此理论上它的速度要比VxLAN快一点 。Calico 3.x的默认配置使用的是IPIP类型的传输方案而非BGP。
Calico的系统架构如图所示:
.png)
Calico主要由Felix、Orchestrator Plugin、etcd、BIRD和BGP Router Reflector等组件组成。
- Felix: Calico Agent,运行于每个节点。
- Orchestrator Plugi:编排系统(如 Kubernetes 、 OpenStack 等)以将 Calico整合进系统中的插件,例如Kubernetes的CNI。
- etcd:持久存储Calico数据的存储管理系统。
- BIRD:用于分发路由信息的BGP客户端。
- BGP Route Reflector: BGP路由反射器,可选组件,用于较大规模的网络场景。
AnyShare Family 7中的Calico方案
AnyShare Family 7中使用的Calico为3.x版本,所以默认也是使用的IPIP模式,考虑到并非所有的网络都能支持BGP,所以使用的是IPIP/BGP混合的模式,具体如下:
这里ipipMode为CrossSubnet模式, 即IPIP与BGP的混合模式,同子网内路由采用BGP模式,跨子网时采用IPIP模式。
开启IPIP模式时,网络设备中会增加一个tunl0,增加了一个隧道的网卡:
此时的网络模型如下图,Pod 1访问Pod 2大致流程如下:
- 数据包从容器1出到达Veth Pair另一端(宿主机上,以cali前缀开头);
- 进入IP隧道设备(tunl0),由Linux内核IPIP驱动封装在宿主机网络的IP包中(新的IP包目的地之是原IP包的下一跳地址,即192.168.31.63),这样,就成了Node1到Node2的数据包;
- 数据包经过路由器三层转发到Node2;
- Node2收到数据包后,网络协议栈会使用IPIP驱动进行解包,从中拿到原始IP包;
- 然后根据路由规则,根据路由规则将数据包转发给cali设备,从而到达容器2。
可以看出,Calico不使用overlay网络,而是在3层网络上,该网络使用BGP路由协议在主机之间路由数据包。这意味着当宿主机在同一网段时,数据在主机之间移动时,不需要将数据包包装在额外的封装层中。BGP路由机制可以本地引导数据包,而无需额外在流量层中打包流量从而在性能上拥有更大的优势。
除了性能优势之外,在出现网络问题时,还可以用更常规的方法进行故障排除。虽然使用VXLAN等技术进行封装也是一个不错的解决方案,但该过程处理数据包的方式同场难以追踪。使用Calico,标准调试工具可以访问与简单环境中相同的信息,从而更容易进行调试和管理。
除了网络连接外,Calico还以其先进的网络功能而闻名。 网络策略是其最受追捧的功能之一。此外,Calico还可以与服务网格Istio集成,以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。这意味着用户可以配置强大的规则,描述pod应如何发送和接受流量,提高安全性并控制网络环境。
请就本文对您的益处进行评级: