Cilium是开源软件,用于提供和透明地保护应用工作负载(如应用容器或进程)之间的网络连接和负载均衡。它在第3/4层提供传统网络和安全服务,并在第7层保护现代应用协议(如HTTP、gRPC和Kafka)。Cilium集成到Kubernetes和Mesos等常见编排框架中。其基础是名为eBPF的新型Linux内核技术,支持在网络IO、应用套接字和跟踪点等集成点动态插入eBPF字节码,以实现安全、网络和可见性逻辑。
Cilium社区为最新的三个主要版本维护次要稳定版本。更早的稳定版本被视为EOL(生命周期结束)。升级到新的主要版本请参考Cilium升级指南。
以下是当前维护的发布分支及其最新次要版本、对应的镜像拉取标签和发布说明:
| 版本分支 | 发布日期 | 镜像标签 | 发布说明 | 公告 |
|---|---|---|---|---|
| https://github.com/cilium/cilium/tree/v1.8 | 2020-09-30 | docker.io/cilium/cilium:v1.8.4 | https://github.com/cilium/cilium/releases/tag/v1.8.4 | 一般公告 |
| https://github.com/cilium/cilium/tree/v1.7 | 2020-09-30 | docker.io/cilium/cilium:v1.7.10 | https://github.com/cilium/cilium/releases/tag/v1.7.10 | 一般公告 |
| https://github.com/cilium/cilium/tree/v1.6 | 2020-09-30 | docker.io/cilium/cilium:v1.6.12 | https://github.com/cilium/cilium/releases/tag/v1.6.12 | 一般公告 |
能够保护现代应用协议,如REST/HTTP、gRPC和Kafka。传统防火墙在第3层和第4层运行,特定端口上的协议要么完全受信任,要么被完全阻止。Cilium能够基于单个应用协议请求进行过滤,例如:
GET且路径为/public/.*的HTTP请求,拒绝所有其他请求。service1在Kafka主题topic1上生产,service2在topic1上消费,拒绝所有其他Kafka消息。X-Token: [0-9]+。有关支持的协议和使用示例,请参见文档中的第7层策略部分。
现代分布式应用依赖应用容器等技术实现部署敏捷性和按需扩展,导致短时间内启动大量应用容器。典型的容器防火墙通过过滤源IP地址和目标端口来保护工作负载,这需要在集群中任何地方启动容器时操作所有服务器上的防火墙,限制了扩展性。
为避免这种情况,Cilium为共享相同安全策略的应用容器组分配安全身份,该身份与应用容器发出的所有网络数据包相关联,允许在接收节点验证身份。安全身份管理通过键值存储执行。
基于标签的安全是集群内部访问控制的首选工具。为了保护与外部服务的进出访问,支持传统的基于CIDR的入口和出口安全策略,允许将应用容器的进出访问限制到特定IP范围。
一个简单的扁平第3层网络,能够跨多个集群连接所有应用容器。IP分配通过主机范围分配器保持简单,意味着每个主机可以分配IP而无需主机之间的协调。
支持以下多节点网络模型:
覆盖网络(Overlay):基于封装的虚拟网络,跨所有主机。目前内置VXLAN和Geneve,但可以启用Linux支持的所有封装格式。
原生路由(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下的锁定。
获得可见性和排除问题的能力是任何分布式系统运行的基础。Cilium提供的故障排除工具包括:
.. _Hubble: https://github.com/cilium/hubble/
.. _CNI: https://github.com/containernetworking/cni .. _libnetwork: https://github.com/docker/libnetwork .. _containerd: https://github.com/containerd/containerd .. _Service: [] .. _Ingress: [] .. _NetworkPolicy: [] .. _Labels: []
Berkeley Packet Filter(BPF)是Linux内核字节码解释器,最初用于过滤网络数据包(如tcpdump和套接字过滤器)。BPF指令集和架构经过重大改进,增加了哈希表和数组等数据结构,支持数据包修改、转发等操作。LLVM编译器后端允许用C编写程序并编译为BPF指令,内核验证器确保安全运行,JIT编译器实现原生执行效率。BPF程序可在kernel的网络数据包、系统调用等挂钩点运行。
Cilium需要Linux内核4.8.0或更高版本的BPF功能。许多Linux发行版(如CoreOS、Debian、Ubuntu)已提供≥4.8.x内核版本,可通过uname -a检查内核版本。
XDP允许从网络驱动程序运行特定类型的BPF程序,直接访问数据包的DMA缓冲区,是软件栈中最早的可编程数据包处理点。
有关BPF和XDP的更多信息,请参见BPF和XDP参考指南。
加入Cilium Slack频道,与开发人员和其他用户交流,了解Cilium、提问和分享经验。
参见特别兴趣小组了解所有SIG及其会议时间。
Cilium用户空间组件采用Apache许可证2.0授权。BPF代码模板采用GNU通用公共许可证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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务