.. raw:: html
|cii| |go-report| |clomonitor| |artifacthub| |slack| |go-doc| |rtd| |apache| |bsd| |gpl| |fossa| |gateway-api| |codespaces|
Cilium 是一个基于 eBPF 数据平面的网络、可观测性和安全解决方案。它提供了一个简单的扁平化三层网络,能够以原生路由或覆盖模式跨越多个集群。它能感知 L7 协议,并可使用与网络寻址解耦的基于身份的安全模型在 L3-L7 层强制执行网络策略。
Cilium 实现了 pod 之间以及到外部服务的分布式负载均衡,能够完全替代 kube-proxy,使用 eBPF 中的高效哈希表实现几乎无限的扩展。它还支持集成入口和出口网关、带宽管理和服务网格等高级功能,并提供深度网络和安全可视性与监控。
一种名为 eBPF_ 的新型 Linux 内核技术是 Cilium 的基础。它支持在各种集成点动态插入 eBPF 字节码到 Linux 内核中,如网络 IO、应用程序套接字和跟踪点,以实现安全、网络和可视化逻辑。eBPF 高效灵活。要了解更多关于 eBPF 的信息,请访问 eBPF.io
_。
.. image:: Documentation/images/cilium-overview.png :alt: Cilium 网络、可观测性、服务网格和运行时安全特性概览
稳定版本
Cilium 社区维护最近三个次要版本的 Cilium。更早的 Cilium 稳定版本被视为生命周期结束(EOL)。
对于升级到新的次要版本,请参考 Cilium 升级指南
_。
以下列出了当前积极维护的发布分支及其最新补丁版本、相应的镜像拉取标签和发布说明:
+---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
| v1.16 <https://github.com/cilium/cilium/tree/v1.16>
__ | 2024-07-24 | quay.io/cilium/cilium:v1.16.0
| 发布说明 <https://github.com/cilium/cilium/releases/tag/v1.16.0>
__ |
+---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
| v1.15 <https://github.com/cilium/cilium/tree/v1.15>
__ | 2024-07-11 | quay.io/cilium/cilium:v1.15.7
| 发布说明 <https://github.com/cilium/cilium/releases/tag/v1.15.7>
__ |
+---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
| v1.14 <https://github.com/cilium/cilium/tree/v1.14>
__ | 2024-07-11 | quay.io/cilium/cilium:v1.14.13
| 发布说明 <https://github.com/cilium/cilium/releases/tag/v1.14.13>
__ |
+---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
架构
Cilium 镜像适用于 AMD64 和 AArch64 架构。
软件物料清单
从 Cilium 1.13.0 版本开始,所有镜像都包含软件物料清单(SBOM)。SBOM 以 SPDX
_ 格式生成。更多相关信息可在 Cilium SBOM
_ 中找到。
.. _SPDX
: https://spdx.dev/
.. _Cilium SBOM
: https://docs.cilium.io/en/latest/configuration/sbom/
开发
出于开发和测试目的,Cilium 社区发布快照、早期候选版本(RC)和从 main 分支 <https://github.com/cilium/cilium/commits/main>
_ 构建的 CI 容器镜像。这些镜像不适用于生产环境。
要测试升级到新的开发版本,请参考 Cilium 升级指南
_ 的最新开发版本。
以下列出了用于测试的分支及其快照或 RC 版本、相应的镜像拉取标签和发布说明(如适用):
+--------------------------------------------------------------------------------------+------------+----------------------------------------------+-------------------------------------------------------------------------------------------+
| main <https://github.com/cilium/cilium/commits/main>
__ | 每日 | quay.io/cilium/cilium-ci:latest
| N/A |
+--------------------------------------------------------------------------------------+------------+----------------------------------------------+-------------------------------------------------------------------------------------------+
| v1.16.0-rc.2 <https://github.com/cilium/cilium/commits/v1.16.0-rc.2>
__ | 2024-07-15 | quay.io/cilium/cilium:v1.16.0-rc.2
| 候选版本说明 <https://github.com/cilium/cilium/releases/tag/v1.16.0-rc.2>
__ |
+--------------------------------------------------------------------------------------+------------+----------------------------------------------+-------------------------------------------------------------------------------------------+
功能概述
.. begin-functionality-overview
透明保护和安全 API
能够保护现代应用程序协议,如 REST/HTTP、gRPC 和 Kafka。传统防火墙在第 3 层和第 4 层运行。运行在特定端口上的协议要么完全受信任,要么被完全阻止。Cilium 提供了过滤单个应用程序协议请求的能力,例如:
- 允许所有带有方法
GET
和路径/public/.*
的 HTTP 请求。拒绝所有其他请求。 - 允许
service1
在 Kafka 主题topic1
上生产,允许service2
在topic1
上消费。拒绝所有其他 Kafka 消息。 - 要求所有 REST 调用中都存在 HTTP 标头
X-Token: [0-9]+
。
有关支持的协议和使用示例的最新列表,请参阅我们文档中的 第 7 层策略
_ 部分。
基于身份的安全服务间通信
现代分布式应用程序依赖于应用程序容器等技术来促进部署的灵活性和按需扩展。这导致在短时间内启动大量应用程序容器。典型的容器防火墙通过过滤源 IP 地址和目标端口来保护工作负载。这个概念要求每当集群中的任何地方启动容器时,都要操作所有服务器上的防火墙。
为了避免这种限制扩展的情况,Cilium 为共享相同安全策略的应用程序容器组分配安全身份。然后,该身份与应用程序容器发出的所有网络数据包相关联,允许在接收节点验证身份。安全身份管理使用键值存储执行。
安全访问外部服务和从外部服务访问
基于标签的安全是集群内部访问控制的首选工具。为了保护对外部服务的访问和从外部服务的访问,支持传统的基于 CIDR 的入站和出站安全策略。这允许限制应用程序容器对特定 IP 范围的访问。
简单网络
一个简单的扁平化第 3 层网络,能够跨多个集群连接所有应用程序容器。通过使用主机范围分配器,IP 分配保持简单。这意味着每个主机可以分配 IP,而无需主机间的协调。
支持以下多节点网络模型:
-
覆盖: 基于封装的虚拟网络,跨越所有主机。目前,VXLAN 和 Geneve 是内置的,但支持 Linux 支持的所有封装格式。
何时使用此模式:此模式的基础设施和集成要求最少。它几乎可以在任何网络基础设施上工作,因为唯一的要求是主机之间的 IP 连接,这通常已经给定。
-
原生路由: 使用 Linux 主机的常规路由表。网络需要能够路由应用程序容器的 IP 地址。
何时使用此模式:此模式适用于高级用户,需要对底层网络基础设施有一定了解。此模式适用于:
- 原生 IPv6 网络
- 与云网络路由器结合使用
- 如果您已经运行路由守护进程
负载均衡
Cilium 实现了应用程序容器之间和外部服务的分布式负载均衡,能够完全替代 kube-proxy 等组件。负载均衡在 eBPF 中使用高效的哈希表实现,允许几乎无限的扩展。
对于南北向负载均衡,Cilium 的 eBPF 实现针对最大性能进行了优化,可以附加到 XDP(eXpress Data Path),并支持直接服务器返回(DSR)以及 Maglev 一致性哈希(如果负载均衡操作不在源主机上执行)。
对于东西向负载均衡,Cilium 在 Linux 内核的套接字层(例如在 TCP 连接时)高效地执行服务到后端的转换,从而避免在较低层出现每个数据包 NAT 操作的开销。
带宽管理
Cilium 通过 eBPF 实现了基于高效 EDT(最早离开时间)的容器流量出口节点速率限制的带宽管理。与传统方法(如带宽 CNI 插件中使用的 HTB(分层令牌桶)或 TBF(令牌桶过滤器))相比,这允许显著减少应用程序的传输尾延迟,并避免在多队列网卡下的锁定。
监控和故障排除
获得可见性和排除问题的能力对于任何分布式系统的运行都是基本的。虽然我们学会了喜欢 tcpdump
和 ping
等工具,它们在我们心中永远有特殊的位置,但我们努力提供更好的故障排除工具。这包括提供以下工具:
-
带元数据的事件监控:当数据包被丢弃时,该工具不仅报告数据包的源 IP 和目标 IP,还提供发送方和接收方的完整标签信息以及许多其他信息。
-
通过 Prometheus 导出指标:关键指标通过 Prometheus 导出,以集成到您现有的仪表板中。
-
Hubble_:专门为 Cilium 编写的可观测性平台。它提供服务依赖图、运营监控和警报,以及基于流日志的应用程序和安全可见性。
.. _Hubble: https://github.com/cilium/hubble/
.. _第 7 层策略
: https://docs.cilium.io/en/stable/security/policy/language/#layer-7-examples
.. end-functionality-overview
入门
为什么选择 Cilium?
_入门
_架构和概念
_安装 Cilium
_常见问题
_- 贡献_
什么是 eBPF 和 XDP?
Berkeley Packet Filter (BPF) 是最初为过滤网络数据包而引入的 Linux 内核字节码解释器,例如用于 tcpdump 和套接字过滤器。BPF 指令集和周围架构最近经历了重大改造,增加了额外的数据结构(如哈希表和数组)用于保持状态,以及支持数据包操作、转发、封装等额外操作。此外,LLVM 的编译器后端允许用 C 编写程序并编译成 BPF 指令。内核中的验证器确保 BPF 程序可以安全运行,JIT 编译器将 BPF 字节码转换为特定 CPU 架构的指令以提高原生执行效率。BPF 程序可以在内核中的各种钩子点运行,如传入数据包、传出数据包、系统调用、kprobes、uprobes、tracepoints 等。
BPF 不断发展并随着每个新的 Linux 版本获得额外的功能。Cilium 利用 BPF 执行核心数据路径过滤、操作、监控和重定向,并需要 4.8.0 或更新版本的 Linux 内核中的 BPF 功能(最新的当前稳定 Linux 内核是 4.14.x)。
许多 Linux 发行版(包括 CoreOS、Debian、Docker 的 LinuxKit、Fedora、openSUSE 和 Ubuntu)已经提供内核版本 >= 4.8.x。您可以通过运行 uname -a
来检查您的 Linux 内核版本。如果您还没有运行足够新的内核,请查看您的 Linux 发行版的文档,了解如何运行 Linux 内核 4.9.x 或更高版本。
要了解运行 BPF 运行时所需的必要内核版本,
请查看特别兴趣小组<https://docs.cilium.io/en/stable/community/community/#special-interest-groups>
_以获取所有SIG及其会议时间的列表。
开发者会议
Cilium开发者社区在Zoom上聚会聊天。欢迎所有人参加。
- 每周三,
欧洲/苏黎世时间下午5:00 https://time.is/Canton_of_Zurich
__(CET/CEST), 通常相当于太平洋时间上午8:00,或东部时间上午11:00。
加入Zoom`_ - 每月第三个周三,日本时间上午9:00 https://time.is/Tokyo
__(JST)。
加入Zoom`_
eBPF和Cilium办公时间直播
我们每周都会在YouTube上举办一个名为eCHO的社区直播 <https://www.youtube.com/channel/UCJFUxkVQTBJh3LD1wYBWvuQ>
_,(非常松散地!)代表eBPF和Cilium办公时间。加入我们的直播,赶上过去的剧集,或前往eCHO仓库 <https://github.com/isovalent/eCHO>
_告诉我们你对我们应该涵盖的主题的想法。
治理
Cilium项目由一群维护者和提交者 <https://raw.githubusercontent.com/cilium/cilium/main/MAINTAINERS.md>
__管理。
他们如何被选择和治理在我们的治理文档 <https://github.com/cilium/community/blob/main/GOVERNANCE.md>
__中有概述。
采用者
在生产中部署Cilium项目的采用者列表及其用例可以在USERS.md <https://github.com/cilium/cilium/blob/main/USERS.md>
__文件中找到。
路线图
Cilium维护一个公共路线图 <https://docs.cilium.io/en/latest/community/roadmap/>
__。它提供了项目主要优先事项、不同功能和项目的成熟度以及如何影响项目方向的高级视图。
许可证
.. _apache-license: LICENSE .. _bsd-license: bpf/LICENSE.BSD-2-Clause .. _gpl-license: bpf/LICENSE.GPL-2.0
Cilium用户空间组件采用Apache许可证,版本2.0 <apache-license_>
授权。
BPF代码模板采用双重许可,包括
通用公共许可证,版本2.0(仅限) <gpl-license_>
和2条款BSD许可证 <bsd-license_>
__
(您可以选择使用其中任一许可证的条款)。
.. _Cilium升级指南
: https://docs.cilium.io/en/stable/operations/upgrade/
.. _为什么选择Cilium?
: https://docs.cilium.io/en/stable/overview/intro
.. _入门
: https://docs.cilium.io/en/stable/#getting-started
.. _架构和概念
: https://docs.cilium.io/en/stable/overview/component-overview/
.. _安装Cilium
: https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/
.. _常见问题
: https://github.com/cilium/cilium/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Akind%2Fquestion+
.. _贡献: https://docs.cilium.io/en/stable/contributing/development/
.. _先决条件: https://docs.cilium.io/en/stable/operations/system_requirements/
.. _BPF和XDP参考指南
: https://docs.cilium.io/en/stable/bpf/
.. _eBPF
: https://ebpf.io
.. _eBPF.io
: https://ebpf.io
.. _加入Zoom
: https://zoom.us/j/596609673