Cilium是开源软件,用于提供和透明地保护应用工作负载(如应用容器或进程)之间的网络连接和负载均衡。Cilium在第3/4层提供传统网络和安全服务,并在第7层保护现代应用协议(如HTTP、gRPC和Kafka)。它集成到Kubernetes和Mesos等常见编排框架中。
Cilium的基础是名为eBPF的新型Linux内核技术,支持在网络IO、应用套接字和跟踪点等各种集成点动态插入eBPF字节码,以实现安全、网络和可见性逻辑。eBPF高效且灵活,更多信息可访问eBPF.io。
Cilium社区为最近三个主要版本维护次要稳定版本。更早的主要版本的稳定版本被视为EOL(生命周期结束)。
升级到新的主要版本请参考Cilium升级指南。
以下是当前维护的发布分支及其最新次要版本、对应的镜像拉取标签和发布说明:
| 版本分支 | 发布日期 | 镜像标签 | 发布说明 | 公告 |
|---|---|---|---|---|
| https://github.com/cilium/cilium/tree/v1.9 | 2021-01-22 | docker.io/cilium/cilium:v1.9.3 | https://github.com/cilium/cilium/releases/tag/v1.9.3 | 公告 |
| https://github.com/cilium/cilium/tree/v1.8 | 2020-12-04 | docker.io/cilium/cilium:v1.8.6 | https://github.com/cilium/cilium/releases/tag/v1.8.6 | 公告 |
| https://github.com/cilium/cilium/tree/v1.7 | 2021-01-27 | docker.io/cilium/cilium:v1.7.13 | https://github.com/cilium/cilium/releases/tag/v1.7.13 | 公告 |
能够保护现代应用协议,如REST/HTTP、gRPC和Kafka。传统防火墙在第3层和第4层运行,特定端口上的协议要么完全受信任,要么被完全阻止。Cilium能够对单个应用协议请求进行过滤,例如:
GET且路径为/public/.*的请求,拒绝其他所有请求。service1在Kafka主题topic1上生产消息,service2在topic1上消费消息,拒绝其他所有Kafka消息。X-Token: [0-9]+。有关支持的协议和使用示例的最新列表,请参见文档中的第7层策略部分。
现代分布式应用依赖应用容器等技术来促进部署灵活性和按需扩展。这导致在短时间内启动大量应用容器。典型的容器防火墙通过过滤源IP地址和目标端口来保护工作负载。这种概念要求每当集群中任何地方启动容器时,所有服务器上的防火墙都要进行操作。
为避免这种限制规模的情况,Cilium为共享相同安全策略的应用容器组分配安全身份。然后,该身份与应用容器发出的所有网络数据包相关联,允许在接收节点验证身份。安全身份管理使用键值存储执行。
基于标签的安全是集群内部访问控制的首选工具。为了保护与外部服务的进出访问,支持传统的基于CIDR的入口和出口安全策略。这允许限制应用容器与特定IP范围的进出访问。
一个简单的平面第3层网络,能够跨多个集群连接所有应用容器。通过使用主机范围分配器,IP分配保持简单,这意味着每个主机可以分配IP而无需主机之间的协调。
支持以下多节点网络模型:
覆盖网络(Overlay): 基于封装的虚拟网络,跨所有主机。目前内置支持VXLAN和Geneve,但可以启用Linux支持的所有封装格式。
使用场景:此模式对基础设施和集成要求最低。几乎可以在任何网络基础设施上工作,唯一的要求是主机之间的IP连接,这通常已经满足。
原生路由(Native Routing): 使用Linux主机的常规路由表。网络需要能够路由应用容器的IP地址。
使用场景:此模式适用于高级用户,需要了解底层网络基础设施。此模式适用于:
Cilium为应用容器之间以及与外部服务的流量实现分布式负载均衡,能够完全替代kube-proxy等组件。负载均衡在eBPF中使用高效哈希表实现,几乎可以无限扩展。
对于南北向负载均衡,Cilium的eBPF实现针对最大性能进行了优化,可以附加到XDP(快速数据路径),并支持直接服务器返回(DSR)以及Maglev一致性哈希(如果负载均衡操作不在源主机上执行)。
对于东西向负载均衡,Cilium在Linux内核的套接字层(例如TCP连接时)执行高效的服务到后端转换,从而可以避免较低层的每数据包NAT操作开销。
Cilium通过基于EDT(最早Departure时间)的高效速率限制,使用eBPF为离开节点的容器流量实现带宽管理。与带宽CNI插件中使用的传统方法(如HTB(层次令牌桶)或TBF(令牌桶过滤器))相比,这可以显著减少应用的传输尾部延迟,并避免多队列NIC下的锁定。
获得可见性和排除问题的能力是任何分布式系统运行的基础。尽管我们喜欢tcpdump和ping等工具,但我们努力提供更好的故障排除工具。这包括提供以下功能的工具:
Berkeley Packet Filter(BPF)是Linux内核字节码解释器,最初用于过滤网络数据包,例如tcpdump和套接字过滤器。BPF指令集和周围架构最近经过了重大改进,增加了哈希表和数组等数据结构以保持状态,以及支持数据包修改、转发、封装等附加操作。此外,LLVM的编译器后端允许用C编写程序并编译为BPF指令。内核验证器确保BPF程序可以安全运行,JIT编译器将BPF字节码转换为特定CPU架构的指令以实现本地执行效率。BPF程序可以在kernel的各种挂钩点运行,例如入站数据包、出站数据包、系统调用、kprobes、uprobes、跟踪点等。
BPF随着每个新的Linux版本不断发展并获得更多功能。Cilium利用BPF执行核心数据路径过滤、修改、监控和重定向,需要Linux内核4.8.0或更高版本中的BPF功能。
许多Linux发行版包括CoreOS、Debian、Docker的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 Slack频道,与Cilium开发人员和其他Cilium用户聊天。这是了解Cilium、提问和分享经验的好地方。
有关所有SIG及其会议时间的列表,请参见特别兴趣小组。
Cilium用户空间组件根据Apache License, Version 2.0许可。BPF代码模板根据General Public License, Version 2.0许可。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务