Cilium & Calico eBPF

发布时间 2023-10-19 20:41:01作者: MacoPlus

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