Cilium系列-1-Cilium特色 功能及适用场景
系列文章
Cilium 简介
Cilium 是一个开源的云原生解决方案,用于提供、保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 eBPF 提供动力。Cilium 主要使用场景是在 Kubernetes中,但 Cilium 的优势并不仅限于 Kubernetes 环境。
在 Kubernetes 环境中,Cilium 可充当网络插件,提供 pod 之间的连接。它通过执行网络策略(network policy)和透明加密来提供安全性,而 Cilium 的 Hubble 组件则提供了网络流量流的深度可见性(监控功能)。
得益于 eBPF,Cilium 的网络、安全和可观察性逻辑可以直接编程到内核中,从而使 Cilium 和 Hubble 的功能对应用工作负载完全透明。这些将是 Kubernetes 集群中的容器化工作负载,不过 Cilium 也能连接虚拟机和标准 Linux 进程等传统工作负载。
关于 Cilium 可观察性, 典型的案例是: pod 中的应用无需启用 Tracing 功能, 也无需通过 exporter 将 http requests metrics 发给 Prometheus, 仅通过 Cilium 的 Hubble 功能, 就能直接获取到该应用的 http requests 的 RED(Requests, Errors, Durations).
Cilium 适用场景 - 解决大规模容器联网的挑战
在高度动态和复杂的微服务世界中,主要从 IP 地址和端口的角度考虑网络问题可能会导致挫败感。使用传统的网络工具(通过五元组)实施可能会非常低效,只能提供粗粒度的可见性和过滤,从而限制了排除故障和保护容器网络安全的能力。这些都是 Cilium 要解决的难题。
从一开始,Cilium 就是为大规模、高动态的容器化环境而设计的。它能原生理解容器和 Kubernetes 身份,并解析 HTTP、gRPC 和 Kafka 等 API 协议,提供比传统防火墙更简单、更强大的可视性和安全性。
所以, Cilium 的功能要点集中在以下 3 点:
- 高性能
- 安全
- 可观察性
Cilium - 基于 eBPF 构建
eBPF 使 Cilium 强大的安全可视性和控制逻辑能够动态插入 Linux 内核。eBPF 使 Linux 内核可编程,因此 Cilium 等应用可以 hook Linux 内核子系统,将用户空间应用上下文引入内核操作。
Notes:
也因此, 要使用完整的 Cilium 功能, 需要非常新版本的 Linux 内核. 目前官方推荐的 Linux Kernel 是 ≥ 5.10.
由于 eBPF 在 Linux 内核中运行,因此 Cilium 安全策略的应用和更新无需更改应用程序代码或容器配置。eBPF 程序与 Linux 网络数据路径挂钩,可用于在数据包进入网络套接字时,根据网络策略规则采取丢弃数据包等操作。

eBPF 能够以前所未有的粒度和效率实现对系统和应用程序的可见性和控制。它以完全透明的方式实现了这一点,而无需以任何方式更改应用程序。Cilium 利用 eBPF 的强大功能,将高效身份识别概念分层;将 Kubernetes 上下文信息(如元数据标签)引入 eBPF 驱动的网络逻辑。
接下来就让我们来谈谈 Cilium 能做些什么。
Cilium 功能
网络功能
Cilium 提供网络连接,允许 pod 和其他组件(Kubernetes 集群内部或外部)进行通信。Cilium 实现了一个简单的扁平 3 层网络,能够跨越多个集群连接所有应用容器(ClusterMesh 功能)。
默认情况下,Cilium 支持 overlay 网络模型,其中一个虚拟网络跨越所有主机。Overlay 网络中的流量经过封装,可在不同主机之间传输。之所以选择这种模式作为默认模式,是因为它对基础设施和集成的要求最低,只需要主机之间的 IP 连接。
Cilium 还提供本地路由(native routing)网络模式选项,使用每台主机上的常规路由表将流量路由到 pod(或外部)IP 地址。这种模式适用于高级用户,需要对底层网络基础设施有一定的了解。它与本地 IPv6 网络、云网络路由器或预先存在的路由守护程序配合使用效果很好。
身份感知网络策略执行
网络策略定义允许哪些工作负载相互通信,通过防止意外流量来确保部署安全。Cilium 可同时执行本地 Kubernetes NetworkPolicies 和增强型 CiliumNetworkPolicy 资源(CRD)类型。
传统防火墙通过过滤 IP 地址和目标端口来保护工作负载。在 Kubernetes 环境中,每当集群中的 pod 启动时,都需要对所有节点主机上的防火墙(或 iptables 规则)进行操作,以便重建与所需网络策略执行相对应的防火墙规则。这并不能很好地扩展。
为了避免这种情况,Cilium 根据 Kubernetes 标签等相关元数据为应用容器组分配一个身份(identity)。然后将该身份与应用容器发出的所有网络数据包关联起来,使 eBPF 程序能够在接收节点有效验证身份,而无需使用任何 Linux 防火墙规则。例如,当扩展部署并在集群中创建新 pod 时,新 pod 与现有 pod 共享相同的身份。与网络策略执行相对应的 eBPF 程序规则无需再次更新,因为它们已经知道 pod 的身份!
传统防火墙在第 3 层和第 4 层运行,而 Cilium 还能确保 REST/HTTP、gRPC 和 Kafka 等现代第 7 层应用协议的安全(除了在第 3 层和第 4 层执行外)。它能根据应用协议请求条件执行网络策略,例如
- 允许方法为 GET、路径为
/public/.*的所有 HTTP 请求。拒绝所有其他请求。 - 要求所有 REST 调用都包含 HTTP 标头
X-Token:[0-9]+。
透明加密
现在,服务之间的数据加密已成为 PCI 或 HIPAA 等许多监管框架的要求。Cilium 支持使用 IPSec 或 WireGuard 进行简单配置的透明加密,启用后无需重新配置任何工作负载即可确保节点之间流量的安全。
多集群网络
Cilium 的 Cluster Mesh 功能可让工作负载轻松与不同 Kubernetes 集群中托管的服务进行通信。您可以在不同区域的群集中运行服务,并使用 Cilium Cluster Mesh 将它们连接起来,从而实现服务的高可用性。
负载均衡
Cilium 为应用程序容器和外部服务之间的流量实现分布式负载平衡。事实上,Cilium 可以完全替代 kube-proxy 等组件,也可以用作独立的负载均衡器。eBPF 使用高效的哈希表实现负载平衡,几乎可以无限扩展。
增强的网络可观察性
虽然我们对 tcpdump 和 ping 等工具情有独钟,它们在我们心中永远占据着特殊的位置,但它们无法胜任在动态 Kubernetes 集群环境中排除网络问题的任务。Cilium 致力于提供可观察性工具,让您能够快速识别和修复集群网络问题。
为此,Cilium 推出了名为 Hubble 的专用网络可观察性组件。Hubble 利用 Cilium 的身份概念,以可操作的方式轻松过滤流量,并提供以下功能:
- 第 3/4 层(IP 地址和端口)和第 7 层(API 协议)的网络流量可见性
- 带元数据的事件监控: 当数据包被丢弃时,该工具不仅会报告数据包的源 IP 和目标 IP,还会提供发送方和接收方的完整标签信息以及大量其他信息
- 可配置的 Prometheus 指标导出
- 可视化集群网络流量的图形用户界面
具体效果如下:

Prometheus 指标
如前文提到的那样, Cilium 和 Hubble 通过 Prometheus 输出有关网络性能和延迟的指标,因此您可以将 Cilium 指标集成到现有的 Grafana 仪表板中。
Notes:
最新消息, Cilium 和 Grafana 合作有初步成果了 —— Grafana Hubble 数据源.
具体可以阅读这篇文章: Monitor Kubernetes network and security events with Hubble and Grafana

Service Mesh
如上所述,Cilium 支持服务间的负载平衡、应用层可见性和各种与安全相关的功能,所有这些都是 Kubernetes 服务网格的功能。Cilium 还支持 Kubernetes 的 Ingress 和 Gateway API,可提供全套服务网格功能,但不需要在每个 pod 中注入 sidecar 的开销。
总结
Cilium 是一个开源的云原生解决方案,用于提供、保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 eBPF 提供动力。Cilium 主要使用场景是在 Kubernetes中.
Cilium 最主要的特点是:
- 高性能
- 安全功能
- 可观察性
Cilium 除了作为 Kubernetes CNI 之外, 还有很多其他功能, 包括不限于:
- 多集群网络
- 负载均衡(完全替代 kube-proxy)
- Service Mesh
让我们继续前进!
️参考文档
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Cilium系列-1-Cilium特色 功能及适用场景的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- H3C系列之三层交换机dhcp功能的开启
环境介绍>>>>>>>>>>>>>>>>>>>>交换机名牌:H3C交换机类型:三 ...
- Bing Maps进阶系列四:路由功能服务(RouteService)
Bing Maps进阶系列四:路由功能服务(RouteService) Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现 ...
- OpenvSwitch系列之五 网桥特性功能配置
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...
- 痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用. 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能,大概可以分为三大类:电源.时钟 ...
- Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍
大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第三篇了,先来回顾下前面两篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...
- VSPackge插件系列:常用IDE功能的封装
继上一篇VSPackge插件系列简单介绍如何正确的获取DTE之后,就一直没发VSPackge插件系列的文章了,最近同事也想了解如何在代码中与VS交互,特发一篇文章示例一些简单功能是如何调用,也以备以后 ...
- Office365开发系列——开发一个全功能的Word Add-In
2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ...
- 学习ASP.NET Core Razor 编程系列九——增加查询功能
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- NRF52840相对于之前的NRF52系列、NRF51系列增加了什么功能
现在广大客户的蓝牙采用NORDIC越来越多了,NORDIC一直在不断进行技术改进更好的满足市场需求 推出了新款NRF52840.NRF52840更为先进些,支持的功能也多点,比如IEEE802.15. ...
随机推荐
- Maven的大概了解及总结setting和pom
前言:项目中经常要用到Maven,从来也没有配置过,直到当人问到Maven是干什么的,是怎么管理项目的?一头雾水,所以写了这篇博客,首先附上百度百科的词条: Maven项目对象模型(POM),可以通过 ...
- Consistency Models终结扩散模型
最近看到一篇论文,觉得特别有意思,并且在学术界引起了不小的动静,他就是一致性模型,据说图像生成效果快.质量高,并且还可以实现零样本图像编辑,即不进行一些视觉任务训练,可以实现图像超分.修复.上色等功能 ...
- ToF技术全解读
文章目录 ToF技术全解读 1. 什么是ToF 2. ToF的原理 3. ToF 优缺点 ToF技术全解读 1. 什么是ToF ToF: Time of flight. 飞行时间.当然这只是一种翻译的 ...
- MySQL-分组函数ROLLUP的基本用法
一.ROLLUP简介 ROLLUP是GROUP BY子句的扩展. ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行. 通过使用ROLLUP选项,可以使用单个查询生成多个分组集. ...
- windows server 2012 2019启动 开机自动启动 项设置
1.第一种方法:打开运行功能,运行shell:startup,打开管理员用户启动项目录.将想要设置成开机自启的程序快捷方式添加到其中即可,或者删除其中快捷方式即可取消开机自启.2.第二种方法:打开系统 ...
- mysql基础_视图
介绍 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中.行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的. 优 ...
- 基于Django的简易博客系统教程
1. 安装Django 在命令行中输入以下命令安装Django pip install django 2. 创建Django项目 在命令行中输入以下命令创建一个名为myblog的Django项目 dj ...
- 巧用OpenSSH进行域内权限维持
最近在Windows服务器上安装OpenSSH,意外发现了一个很有意思的技巧,可用来做域内权限维持,废话不多说,直接上步骤. 01.利用方式 (1)在已经获得权限的Windows服务器上,使用msie ...
- Typo in static class property declarationeslint
eslint 检测提示 Typo in static class property declarationeslint 找了半天原来是propTypes 写成了PropTypes (就是一个首字母大写 ...
- 最全的git操作命令(持续更新)
当前使用git进行版本管理越来越频繁,但是难免还是有些命令记不全,曾当前闲暇记录一下,免得需要时漫天找寻 目录 一. 配置用户信息 1.git config [配置git 用户信息] 2.git co ...