Cilium & Calico eBPF

Cilium架构


Cilium 是一个开源项目,旨在为 Kubernetes 集群和其他容器编排平台等云原生环境提供网络、安全性和可观察性。

Cilium 的基础是一种名为 eBPF 的新 Linux 内核技术,它可以将强大的安全性、可见性和网络控制逻辑动态插入到 Linux 内核中。eBPF 用于提供高性能网络、多集群和多云功能、高级负载均衡、透明加密、广泛的网络安全功能、透明可观测性等等。

架构图

Cilium 组件

  1. Cilium Agent

    Cilium 代理( cilium-agent) 在集群中的每个节点上运行。运行在上层级别,Agent通过 Kubernetes 或 API 接受配置,配置网络、服务负载平衡、网络策略以及可见性和监控要求。

    Cilium 代理侦听来自 Kubernetes 等编排系统的事件,以了解容器或工作负载何时启动和停止。它管理 Linux 内核用来控制这些容器进出的所有网络访问的 eBPF 程序。

  2. Cilium客户端

    Cilium CLI 客户端 ( cilium) 是与 Cilium 代理一起安装的命令行工具。它与在同一节点上运行的 Cilium 代理的 REST API 进行交互。CLI 允许检查本地代理的状态和状况。它还提供了直接访问 eBPF 映射以验证其状态的工具。

  3. Cilium Operator

    Cilium Operator 负责管理集群中的职责,逻辑上应该为整个集群处理一次,而不是为集群中的每个节点处理一次。Cilium 运营商并不处于任何转发或网络策略决策的关键路径中。如果操作员暂时不可用,集群通常会继续运行。但是,根据配置的不同,操作员无法使用可能会导致:

    • 如果运营商需要分配新的IP 地址,则 IP 地址管理 (IPAM) 会出现延迟,从而导致新工作负载的调度出现延迟

    • 未能更新 kvstore 心跳密钥将导致代理声明 kvstore 不健康并重新启动。

  4. CNI

    cilium-cni当 pod 在节点上调度或终止时,Kubernetes 会调用CNI 插件 ( )。它与节点的 Cilium API 交互,触发必要的数据路径配置,为 pod 提供网络、负载平衡和网络策略。

Hubble

  1. Server

    Hubble 服务器在每个节点上运行,并从 Cilium 检索基于 eBPF 的可见性。它被嵌入到 Cilium 代理中以实现高性能和低开销。它提供 gRPC 服务来检索流和 Prometheus 指标。

  2. Relay

    Relay ( hubble-relay) 是一个独立组件,它了解所有正在运行的 Hubble 服务器,并通过连接到各自的 gRPC API 并提供代表集群中所有服务器的 API 来提供集群范围内的可见性。

  3. Client

    Hubble CLI ( hubble) 是一个命令行工具,能够连接到 gRPC APIhubble-relay或本地服务器以检索流事件。

  4. Graphical UI (GUI)

    图形用户界面 ( hubble-ui) 利用基于中继的可见性来提供图形服务依赖关系和连接图

eBPF是什么?

eBPF 是一个Linux 内核字节码解释器,最初是为了过滤网络数据包而引入的,例如tcpdump 和socket 过滤器。此后,它已通过附加数据结构(例如哈希表和数组)以及附加操作进行了扩展,以支持数据包修改、转发、封装等。内核内验证器可确保 eBPF 程序安全运行,并且 JIT 编译器可转换字节码CPU 架构特定指令以提高本机执行效率。eBPF 程序可以在内核中的各个挂钩点运行,例如针对传入和传出数据包。

eBPF 主机路由允许绕过主机命名空间中的所有 iptables 和上层堆栈开销,以及遍历虚拟以太网对时的一些上下文切换开销。网络数据包会尽早从面向网络的网络设备中获取,并直接传递到 Kubernetes Pod 的网络命名空间中。在出口端,数据包仍然穿过 veth 对,由 eBPF 拾取并直接传送到面向外部的网络接口。路由表直接从 eBPF 进行查询,因此这种优化是完全透明的,并且与系统上运行的提供路由分发的任何其他服务兼容。有关如何启用此功能的信息,请参阅 调优指南中的eBPF 主机路由。

Calico eBPF 对 iptables 应用了一些相同的绕过方法,但正如我们稍后将了解到的,它们并不完全相同。然而,它证明,绕过慢速内核子系统(例如 iptables)可以产生最大的影响。

Cilium网络


Cilium CNI Plugin控制流

网络模式

封装&Direct Routing

 

  1. Pod IP Routing - Overlay Routing ( Tunneling mode)

  2. Pod IP Routing - Direct Routing Mode

Calico


Calico架构

  1. Felix
    The primary Calico agent that runs on each machine that hosts endpoints Responsible for programming routes and ACLs, and anything else required on the host
    运行在集群每个节点,主要负责节点的路由表及访问策略(iptables),并确保节点之间连接性
  2. Bird
    Bird is a BGP agent for Linux that is used to exchange routing information between the hosts. The routes that are programmed by Felix are picked up by bird and distributed among the cluster hosts
    当Felix在内核插入新的路由表,负责交换路由表信息并分发到集群的其它节点

Calico BGP

 参考文献


  1. chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/assets/pdf/web/viewer.html?file=https%3A%2F%2Fevents19.linuxfoundation.org%2Fwp-content%2Fuploads%2F2018%2F07%2FPacket_Walks_In_Kubernetes-v4.pdf
posted @ 2023-10-19 20:03  MacoPlus  阅读(603)  评论(1编辑  收藏  举报