Cilium是一种具有基于EBPF的DataPlane的网络,可观察性和安全解决方案。它提供了一个简单的平面3网络,具有在本机路由或覆盖模式下跨越多个群集的能力。它是L7-protocol Aware,可以使用基于身份的安全模型在L3-L7上执行网络策略,该模型与网络寻址相关。
Cilium在POD和外部服务之间为流量实现了分布式负载平衡,并且能够使用EBPF中有效的哈希表完全替换Kube-Proxy,从而允许几乎无限的比例。它还支持高级功能,例如集成入口和出口网关,带宽管理和服务网格,并提供深层的网络以及安全性可见性和监视。
一种名为EBPF的新的Linux内核技术是Cilium的基础。它支持EBPF字节码在各种集成点上的动态插入到Linux内核中,例如:网络IO,应用程序插座和跟踪点,以实现安全性,网络和可见性逻辑。 EBPF高效且灵活。要了解有关EBPF的更多信息,请访问ebpf.io。
Cilium Community为最后三个次要纤毛版本保留了较小的稳定版本。在此之前,来自次要版本的较旧纤毛稳定版本被认为是EOL。
有关新次要版本的升级,请咨询Cilium升级指南。
下面列出的是积极维护的发行分支以及其最新的补丁发行版,相应的图像拉标签及其发行说明:
v1.16 | 2024-11-14 | quay.io/cilium/cilium:v1.16.4 | 发行说明 |
v1.15 | 2024-11-14 | quay.io/cilium/cilium:v1.15.11 | 发行说明 |
v1.14 | 2024-11-14 | quay.io/cilium/cilium:v1.14.17 | 发行说明 |
纤毛图像分布于AMD64和AARCH64架构。
从Cilium 1.13.0版本开始,所有图像均包括软件材料清单(SBOM)。 SBOM以SPDX格式生成。有关此信息的更多信息,请访问Cilium SBOM。
为了开发和测试目的,Cilium Community发布了快照,早期释放候选者(RC)和CI容器图像,由主分支构建。这些图像不用于生产。
有关测试新开发版本的升级,请咨询Cilium升级指南的最新开发构建。
下面列出的是用于测试的分支,以及它们的快照或RC版本,相应的图像拉标签及其发行说明,并在适用的情况下:
主要的 | 日常的 | quay.io/cilium/cilium-ci:latest | N/A。 |
v1.17.0-pre.2 | 2024-11-01 | quay.io/cilium/cilium:v1.17.0-pre.2 | 释放候选笔记 |
能够保护现代应用程序协议,例如REST/HTTP,GRPC和KAFKA。传统的防火墙在第3层和第4层运行。在特定端口上运行的协议要么完全被信任或完全阻止。 Cilium提供了过滤单个应用程序协议请求的能力,例如:
允许所有HTTP请求使用方法GET
and path /public/.*
。拒绝所有其他请求。
允许service1
在Kafka主题topic1
和service2
上生产topic1
。拒绝所有其他Kafka消息。
需要HTTP标头X-Token: [0-9]+
在所有休息呼叫中都存在。
有关如何使用该协议的最新列表,请参见我们文档中的第7部分策略。
现代分布式应用程序依赖于诸如应用程序容器之类的技术来促进敏捷性部署并按需扩展。这会导致大量的应用程序容器在短时间内启动。典型的容器防火墙通过过滤源IP地址和目标端口来确保工作负载。这个概念要求每当群集中的任何地方启动容器时,所有服务器上的防火墙都必须被操纵。
为了避免这种情况限制规模,纤毛将安全身份分配给共享相同安全策略的应用程序容器组。然后,身份与应用程序容器发出的所有网络数据包关联,从而允许在接收节点处验证身份。使用键值商店执行安全身份管理。
基于标签的安全性是集群内部访问控制的首选工具。为了确保访问外部服务和外部服务的访问,支持传统的基于CIDR的入口和出口安全策略。这允许将访问和从应用程序容器限制为特定的IP范围。
一个简单的平面3网络,具有跨越多个簇的能力连接所有应用程序容器。通过使用主机范围分配器保持IP分配简单。这意味着每个主机可以分配IP,而无需主机之间的任何协调。
支持以下多节点网络模型:
覆盖:基于封装的虚拟网络涵盖所有主机。当前,VXLAN和GENEVE已烘烤,但可以启用由Linux支持的所有封装格式。
何时使用此模式:此模式具有最小的基础架构和集成要求。它几乎在任何网络基础架构上都可以使用,因为唯一的要求是主机之间的IP连接性,通常已经给出。
本机路由:使用Linux主机的常规路由表。该网络必须能够路由应用程序容器的IP地址。
何时使用此模式:此模式适用于高级用户,需要对基础网络基础架构有所了解。此模式与:
本机IPv6网络
与云网络路由器结合
如果您已经在运行路由守护程序
Cilium在应用程序容器和外部服务之间为流量实施分布式负载平衡,并能够完全替换Kube-Proxy等组件。负载平衡是在EBPF中使用高效的Hashtables实现的,允许几乎无限的刻度。
对于North-South类型的负载平衡,Cilium的EBPF实现已优化以提高性能,可以将其附加到XDP(Express Data Path),并支持直接服务器返回(DSR)以及Maglev一致的哈希(如果未执行负载平衡操作)在源主机上。
对于东西方类型的负载平衡,Cilium在Linux内核的插座层(例如在TCP Connect Time)中执行有效的服务对背景翻译,以便可以在较低层中避免每包NAT操作上空空间。
Cilium通过基于EBPF的高效EDT(最早的出发时间)限制速率来实现带宽管理,以用于流出节点的容器流量。与传统方法相比,与传统方法相比,这可以显着减少用于应用程序的传输尾部潜伏期,并避免在多标题NIC下锁定,例如HTB(层次结构令牌桶)或TBF(令牌桶过滤器),例如带宽CNI插件中使用的。
获得可见性和故障排除问题的能力是任何分布式系统的运行基础。尽管我们学会了喜欢tcpdump
和ping
等工具,虽然他们总是会在我们心中找到一个特殊的位置,但我们努力为故障排除提供更好的工具。这包括提供的工具:
使用元数据监视事件:删除数据包时,该工具不仅报告了数据包的源和目标IP,该工具还提供了许多其他信息中发件人和接收器的完整标签信息。
通过Prometheus导出的指标:通过Prometheus导出关键指标,以与您现有的仪表板集成。
哈勃:专门为纤毛编写的可观察性平台。它提供服务依赖图,操作监视和警报以及基于流日志的应用和安全可见性。
为什么要纤毛?
入门
建筑和概念
安装纤毛
常见问题
贡献
伯克利数据包滤镜(BPF)是最初引入过滤网络数据包的Linux内核字节码解释器,例如用于TCPDUMP和套接字过滤器。最近,BPF指令集和周围的体系结构已通过其他数据结构(例如哈希表和阵列)进行了重大重新设计用于用C编写并编译为BPF说明的程序。内核验证者确保BPF程序可以安全地运行,并且JIT编译器将BPF字节码转换为特定于CPU架构的特定于本机执行效率的指令。 BPF程序可以在内核中的各个挂钩点上运行,例如输入数据包,外发数据包,系统呼叫,KPROBES,UPOBES,TRACEPOINTS等。
BPF在每个新的Linux版本中继续发展并获得其他功能。纤毛利用BPF执行核心数据路径过滤,熔断,监视和重定向,并且需要任何Linux内核版本4.8.0或更新的BPF功能(最新的当前稳定Linux内核为4.14.x)。
许多Linux发行版,包括CoreOS,Debian,Docker's Linuxkit,Fedora,Opensuse和Ubuntu已经运送内核版本> = 4.8.x.。您可以通过运行uname -a
检查Linux内核版本。如果您尚未运行最近的内核,请检查Linux发行的文档,以了解如何运行Linux内核4.9.x或更高版本。
要阅读必要的内核版本以运行BPF运行时,请参阅“先决条件”部分。
XDP是进化的进一步步骤,并可以从网络驱动程序中运行特定的BPF程序,并直接访问数据包的DMA缓冲区。根据定义,这是软件堆栈中最早的可能点,可以将程序附加到,以便允许Linux内核网络数据路径中的可编程高性能数据包处理器。
有关开发人员的BPF和XDP的更多信息,请参见BPF和XDP参考指南。
要了解有关Cilium的更多信息,其扩展和用例围绕Cilium和BPF,请查看进一步的读数部分。
加入Cilium Slack频道,与Cilium Developers和其他Cilium用户聊天。这是一个了解纤毛,提出问题并分享您的经验的好地方。
请参阅特殊兴趣小组以获取所有SIG及其会议时间的列表。
Cilium Developer Community在Zoom上闲逛进行聊天。欢迎大家。
每周,星期三,下午5:00欧洲/苏黎世时间(CET/CEST),通常相当于PT上午8:00,或美国东部时间上午11:00。会议笔记和缩放信息
每个月的第三个星期三,日本时间上午9:00(JST)。 Apac会议笔记和缩放信息
我们举办一个每周的YouTube社区直播,称为Echo,它(非常宽松!)代表EBPF&Cilium Office小时。直播我们,赶上过去的情节,或者前往Echo Repo,让我们知道您应该涵盖的主题的想法。
Cilium项目受一组维护者和承诺的约束。我们的治理文件中概述了它们的选择和管理。
可以在文件用户中找到cilium项目的采用者列表,这些cilium项目将其部署在生产中及其用例中。
Cilium保持公共路线图。它对项目的主要优先事项,不同功能和项目的成熟度以及如何影响项目方向提供了高级视图。
Cilium用户空间组件根据Apache许可证(版本2.0)获得许可。 BPF代码模板是根据公共公共许可证(仅)2.0版(仅)和2条规定BSD许可证的双重许可(您可以选择使用任何一个许可证的条款)。