k8s | 网络插件 Calico(1)
官方文档:https://docs.tigera.io/calico/latest/about
官方仓库:https://github.com/projectcalico/calico
想象一下,Kubernetes 就是一家大公司,而 Calico 是这家公司的网络部门。公司的员工(Pods)需要在办公室内相互交流和协作,而 Calico 就是负责建立和管理员工之间的通信通道的部门。
Calico 的原理是建立一个纯三层的网络(不需要Overlay),类似于在公司内部搭建了一张大桌子。每个员工都在桌子上有一个独一无二的位置,也就是一个唯一的 IP 地址。这些员工之间可以直接通过 IP 地址进行通信,无需额外的路由和转发。
而 BGP(Border Gateway Protocol)就是公司内部的邮递员,他们负责将员工之间的通信信件传递给正确的收件人。每个员工都会告诉邮递员自己的位置,以及想要与谁进行通信。邮递员根据这些信息,将信件送到正确的位置。
这样,每个员工就可以在桌子上找到对应的收信人,并直接与他们交流。Calico 使用 BGP 协议来实现这种邮递员的功能,使得每个 Pod 都能够知道其他 Pod 的位置,并建立直接的通信通道,从而实现高效的网络通信。
Overlay 网络封装:在公司的比喻中,Overlay 网络封装就像在各个办公楼之间铺设了一条虚拟的隧道,用于建立跨节点的虚拟网络通道。它的目的是在分布式的办公楼之间建立虚拟连接,让员工(Pods)可以在不同节点之间进行通信。这种虚拟化技术可能会使用 VXLAN、Geneve、GRE 等封装协议,它们在底层网络基础设施之上创建虚拟网络。虽然 Overlay 网络封装提供了跨节点通信的功能,但也可能增加了封装和解封装的开销,导致网络性能略有下降。
架构和组件
Calico 主要由 Felix、etcd、BGP client 以及 BGP Route Reflector 组成
Calico API Server
可以使用 kubectl 直接管理 Calico。
Felix-网络部门工程师
Felix是Calico的核心组件,它相当于网络部门的工程师。负责管理和维护节点上的网络接口、路由、ACL(访问控制列表)等网络配置。它不断监听集群中的变化,并根据需要进行网络调整,确保网络的稳定和高效运行。
etcd-网络部门的档案室
etcd相当于网络部门的数据库(档案室),它是一个分布式键值存储,用于存储Calico网络的元数据。保存了公司所有网络的配置和信息,包括子网、IP地址分配、ACL规则等。
BGP client - 网络部门的路由工程师
BGP client是Calico在每个节点上部署的BGP客户端,相当于网络部门的路由工程师。BGP client监听节点上由Felix注入的路由信息,并使用BGP协议将这些路由信息广播告知其他节点,从而实现整个集群的网络互通。
BGP Route Reflector-核心路由器
在大型网络规模中,如果仅使用BGP client形成mesh全网互联,可能导致规模限制,因为所有节点之间两两互连,需要N^2个连接。为了解决这个问题,可以使用BGP Route Reflector的方法,它相当于网络部门的核心路由器。BGP Route Reflector负责与所有BGP client互联并同步路由信息,从而大大减少了连接数,优化了整个网络的结构和性能。
BGP就好比门卫体系。每个办公楼的门卫室就是一个自治系统(AS),而BGP就是连接这些门卫室的协议。每个门卫室都有一张门卫表,上面记录了出入办公楼的人员和车辆的信息。在BGP中,每个自治系统都有一个BGP路由表,上面记录了到达其他自治系统的最佳路径。当有数据包要从一个自治系统传输到另一个自治系统时,BGP会决定最佳路径,并将路由信息交换给相邻的自治系统。
BGP是一种用于交换路由信息的边界网关协议,类似于门卫体系,帮助不同自治系统之间的网络流量找到最佳路径,确保数据包能够准确无误地到达目的地。
两种网络模式
IPIP模式
从字面上理解,就是把一个IP数据包又套在一个IP包里,即把IP层封装到IP层的一个Tunnel。它的作用其实基本上就相当于一个基于IP层的网桥。一般来说,普通的网桥是基于MAC层的,不需要IP,而这个IP则是通过两端的路由做一个Tunnel,把两个本来不通的网络通过点对点连接起来。
IPIP网络的特点是所有pod的数据流量都从隧道tunl0发送,并且在tunl0这增加了一层传输层的封包。
特点:适用于互相访问的Pod不在同一个网段中,跨网段访问的场景,外层封装的IP能够解决跨网段的路由问题。流量需要tunl0设备封装,效率略低
BGP 模式
通过维护IP路由表或‘前缀’表来实现自治系统(AS)之间的可达性,属于矢量路由协议。服务器只需要设置一个IP地址,最佳访问路由是由网络上的骨干路由器根据路由跳数与其它技术指标来确定的,不会占用服务器的任何系统。
特点:适用于互相访问的Pod在同一个网段。原生hostGW,效率高
Calico BGP模式在小规模集群中可以直接互联,在大规模集群中可以通过额外的BGP route reflector来完成。
评论区