下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
Calico 是一个开源的网络及网络安全解决方案,主要用于容器、虚拟机、基于本地主机的工作负载之间的网络连接。
Calico 以其性能、灵活性而闻名,是一个功能全面且复杂的网络解决方案,适用于需要高性能、高可扩展性和安全性的容器网络应用场景,支持的平台包括 Kubernetes、OpenShift、Mirantis Kubernetes Engine (MKE)、OpenStack 以及裸机服务。
支持多种数据层,包括 Linux eBPF、Linux 标准网络和 Windows HNS 具有丰富的网络策略模型可以轻松锁定需要的通信流量,还内置支持 Wireguard 加密,为 Pod 之间的流量提供保护 可以使用 Linux eBPF 或 Linux 标准网络来提供高性能网络。Calico 可以在大多数环境中运行而无需使用覆盖网络,从而避免了数据包封装/解封的开销,其控制平面和策略引擎可以最大限度地降低整体 CPU 使用率 具备良好的可扩展性 支持 Kubernetes 工作负载与非 Kubernetes 或传统工作负载无缝、安全地通信,所有工作负载都受相同的网络策略模型的约束 支持完整的 Kubernetes 网络策略,与 Kubernetes API 无缝协作,使用户能够更灵活地定义网络策略
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 的命令行管理工具
GitHub 地址:https://github.com/projectcalico/calico
Calico 官方文档:https://docs.tigera.io/archive/v3.21/about/about-calico
网络模式
全互联(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 实现该模式
覆盖网络模式(Overlay Network)采用 IPIP 或 VXLAN 协议对底层网络数据报文进行封装,然后通过上层覆盖网络通信。
如果集群 Node 节点处于不同的二层网络中,可能由于到达目标主机的跳数太多导致性能下降,建议采用该模式。
覆盖网络模式可以细分为以下两种模式:
IPIP(IP in IP)模式
IPIP 模式下的每个数据报文都有两个 IP 网络层,内层是 Pod 容器之间的 IP 网络报文,外层是 Node 节点之间的网络报文
IPIP 模式下的 Calico 会为每个 Node 节点创建一个 tunl0 接口,作为隧道出入口设备,用来封装 IPIP 数据报文,Pod 间的通信经由 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 模式开销较小、更轻量化,但其安全性也更差一些 IPIP 模式与VXLAN 模式均支持 Always 和 CrossSubnet 两种封装模式 Always:始终封装所有流量 CrossSubnet:仅在流量跨子网时对其进行封装
书籍推荐
最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。