本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发、订阅专栏!
专栏订阅入口
| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |
往期精彩文章
目录
一、基本介绍
Calico 是一个开源的网络及网络安全解决方案,主要用于容器、虚拟机、基于本地主机的工作负载之间的网络连接。
Calico 以其性能、灵活性而闻名,是一个功能全面且复杂的网络解决方案,适用于需要高性能、高可扩展性和安全性的容器网络应用场景,支持的平台包括 Kubernetes、OpenShift、Mirantis Kubernetes Engine (MKE)、OpenStack 以及裸机服务。
Calico 的主要特点如下:
- 支持多种数据层,包括 Linux eBPF、Linux 标准网络和 Windows HNS
- 具有丰富的网络策略模型可以轻松锁定需要的通信流量,还内置支持 Wireguard 加密,为 Pod 之间的流量提供保护
- 可以使用 Linux eBPF 或 Linux 标准网络来提供高性能网络。Calico 可以在大多数环境中运行而无需使用覆盖网络,从而避免了数据包封装/解封的开销,其控制平面和策略引擎可以最大限度地降低整体 CPU 使用率
- 具备良好的可扩展性
- 支持 Kubernetes 工作负载与非 Kubernetes 或传统工作负载无缝、安全地通信,所有工作负载都受相同的网络策略模型的约束
- 支持完整的 Kubernetes 网络策略,与 Kubernetes API 无缝协作,使用户能够更灵活地定义网络策略
Calico 的核心组件如下:
- Felix:运行在每个节点的代理程序,主要负责网络接口监听、路由信息管理、ARP 信息管理、ACL 规则管理、上报节点网络状态、创建 Calico 虚拟网络设备(如 tunl0、vxlan.calico)
- ETCD:存储集群中节点的所有路由信息,确保网络元数据的一致性、Calico 网络状态的准确性,可以与 Kubernetes 共用
- BIRD:BGP 客户端,作用是监听并将 Felix 的路由信息读入内核,并通过 BGP 协议在集群节点中广播分发,实现网络互通。BIRD 支持的路由协议包括 BGP、OSPF、RIP 等
- BGP Route Reflector:使所有 BGP 客户端仅与特定的 Route Reflector(路由反射)节点互联,并进行路由同步以减少连接数,可以解决大型网络下的节点规模问题
- Calicoctl:Calico 的命令行管理工具
Calico 架构及组件示意图 GitHub 地址
二、网络模式
1、动态路由模式
动态路由模式(Dynamic Routing)采用 BGP 路由协议,自动学习来自其它 AS 自治系统(在 Kubernetes 中即为集群中其他 Node 节点)上的路由条目,也可以称为 BGP 模式。
如果集群 Node 节点均处于同一个二层网络中、或数量规模较大,建议采用该模式。
BGP(Border Gateway Protocol, 边界网关协议)是一种基于策略的域间路由协议,用于实现网络中不同自治系统(AS)之间的互联互通,其特点是可以自动发现和学习路由条目,并找出最佳路由。
BGP 模式可以细分为以下两种模式:
- 全互联(Node-to-Node Mesh)模式
- 每一个 BGP Speaker 都需要和其它 BGP Speaker 建立 BGP 连接,BGP 连接总数为 N^2。如果集群规模过大、Node 节点数量过多会消耗大量连接,因此集群 Node 节点数量超过 100 台后,官方不建议使用该模式
- 路由反射(Router Reflection,RR)模式
- 指定一个或多个 BGP Speaker 为 Router Reflection,与网络中其他 BGP Speaker 建立连接,每个 BGP Speaker 只需与 Router Reflection 建立 BGP 连接即可获取全网的路由信息。在 Calico 中可以通过 Global Peer 实现该模式
2、覆盖网络模式
覆盖网络模式(Overlay Network)采用 IPIP 或 VXLAN 协议对底层网络数据报文进行封装,然后通过上层覆盖网络通信。
如果集群 Node 节点处于不同的二层网络中,可能由于到达目标主机的跳数太多导致性能下降,建议采用该模式。
覆盖网络模式可以细分为以下两种模式:
- IPIP(IP in IP)模式
- IPIP 模式下的每个数据报文都有两个 IP 网络层,内层是 Pod 容器之间的 IP 网络报文,外层是 Node 节点之间的网络报文
- IPIP 模式下的 Calico 会为每个 Node 节点创建一个 tunl0 接口,作为隧道出入口设备,用来封装 IPIP 数据报文,Pod 间的通信经由 IPIP 的三层隧道进行转发
IPIP 示意图
- VXLAN(Virtual eXtensible Local Area Network)模式
- VXLAN 模式的 Calico 会将数据报文的源 MAC 地址和目的 MAC 地址,分别替换为本机 VXLAN 网卡和目的节点 VXLAN 网卡的 MAC 地址,外层 UDP 网络报文的目的 IP 地址将根据路由及目的节点 VXLAN 的 MAC 查 FDB 表获取
- VXLAN 模式的 Calico 会为每个 Node 节点创建一个 vxlan.calico 接口,作为隧道出入口设备,用来封装 VXLAN 数据报文,Pod 间的通信经由 VXLAN 的三层隧道进行转发
VXLAN 示意图
IPIP 模式与 VXLAN 模式对比:
- 与 VXLAN 模式相比,IPIP 模式开销较小、更轻量化,但其安全性也更差一些
- IPIP 模式与VXLAN 模式均支持 Always 和
CrossSubnet 两种封装模式
-
Always
:始终封装所有流量 -
CrossSubnet
:仅在流量跨子网时对其进行封装
-
最后,以 Calico 的 VXLAN 模式为例,Pod 流量在 Node 节点间的转发原理如下图:
VXLAN 模式下 Pod 流量转发示意图