cilium/operator-awsCilium是一款开源软件,用于提供并透明地保护应用工作负载(如应用容器或进程)之间的网络连接和负载均衡。Cilium在三层/四层(L3/L4)提供传统网络和安全服务,并在七层(L7)保护现代应用协议(如HTTP、gRPC和Kafka)。它已集成到Kubernetes和Mesos等常见编排框架中。
Cilium的核心是名为eBPF_的新型Linux内核技术,支持在网络IO、应用套接字和跟踪点等多个集成点动态插入eBPF字节码,以实现安全、网络和可见性逻辑。eBPF具有高效性和灵活性,了解更多可访问eBPF.io_。
!Cilium架构概述
Cilium社区为最新的三个主要版本维护次要稳定版本,更早的主要版本稳定版视为已终止支持(EOL)。升级到新主要版本请参考Cilium升级指南。
以下是当前维护的发布分支及其最新次要版本、对应镜像拉取标签和发布说明:
| 版本分支 | 发布日期 | 镜像拉取标签 | 发布说明 | 公告 |
|---|---|---|---|---|
[v1.8 <[***]>__] | 2020-09-30 | docker.io/cilium/cilium:v1.8.4 | Release Notes | General Announcement |
[v1.7 <[***]>__] | 2020-09-30 | docker.io/cilium/cilium:v1.7.10 | Release Notes | General Announcement |
[v1.6 <[***]>__] | 2020-09-30 | docker.io/cilium/cilium:v1.6.12 | Release Notes | General Announcement |
能够保护现代应用协议(如REST/HTTP、gRPC和Kafka)。传统防火墙工作在三层和四层,特定端口上的协议要么完全可信要么被完全阻止。Cilium支持基于单个应用协议请求进行过滤,例如:
GET且路径为/public/.*的HTTP请求,拒绝其他所有请求。service1向Kafka主题topic1生产消息,service2从topic1消费消息,拒绝其他所有Kafka消息。X-Token: [0-9]+。有关支持的协议列表和使用示例,请参阅文档中的七层策略部分。
现代分布式应用依赖应用容器等技术实现部署灵活性和按需扩展,导致短时间内启动大量应用容器。传统容器防火墙通过过滤源IP地址和目标端口来保护工作负载,这需要在集群中任何位置启动容器时都要操作所有服务器上的防火墙,限制了扩展性。
为避免这种情况,Cilium为共享相同安全策略的应用容器组分配安全身份,该身份与应用容器发出的所有网络数据包相关联,允许在接收节点验证身份。安全身份管理通过键值存储执行。
基于标签的安全是集群内部访问控制的首选工具。为保护与外部服务的访问,Cilium支持传统的基于CIDR的入口和出口安全策略,允许限制应用容器与特定IP范围的访问。
一个简单的扁平三层网络,能够跨多个集群连接所有应用容器。IP分配通过主机范围分配器保持简单,意味着每个主机可以独立分配IP,无需主机间协调。
支持以下多节点网络模型:
覆盖网络(Overlay):基于封装的虚拟网络,跨所有主机。目前内置VXLAN和Geneve支持,但可启用Linux支持的所有封装格式。
使用场景:此模式对基础设施和集成要求最低,几乎适用于任何网络基础设施,只需主机间具备IP连接(通常已满足)。
原生路由(Native Routing):使用Linux主机的常规路由表。网络需要能够路由应用容器的IP地址。
使用场景:此模式适用于高级用户,需要了解底层网络基础设施。适用于原生IPv6网络、与云网络路由器结合使用或已运行路由守护进程的环境。
Cilium为应用容器之间以及与外部服务的流量实现分布式负载均衡,能够完全替代kube-proxy等组件。负载均衡通过eBPF中的高效哈希表实现,支持近乎无限的扩展。
对于南北向负载均衡,Cilium的eBPF实现针对性能优化,可附加到XDP(快速数据路径),并支持直接服务器返回(DSR)和Maglev一致性哈希(当负载均衡不在源主机执行时)。
对于东西向负载均衡,Cilium在Linux内核的套接字层(如TCP连接时)执行高效的服务到后端转换,避免了下层每数据包NAT操作的开销。
Cilium通过基于EDT(最早 departure 时间)的eBPF速率限制为节点出口的容器流量实现带宽管理,与传统方法(如带宽CNI插件使用的HTB(层次令牌桶)或TBF(令牌桶过滤器))相比,可显著减少应用的传输尾部延迟,并避免多队列NIC下的锁定问题。
获取可见性和排查问题的能力是任何分布式系统运行的基础。Cilium提供增强的故障排除工具,包括:
Berkeley Packet Filter(BPF)是Linux内核字节码解释器,最初用于过滤网络数据包(如tcpdump和套接字过滤器)。BPF指令集和架构最近经过重大改进,增加了哈希表和数组等数据结构用于保存状态,以及支持数据包修改、转发、封装等操作。此外,LLVM编译器后端允许使用C编写程序并编译为BPF指令。内核验证器确保BPF程序安全运行,JIT编译器将BPF字节码转换为特定CPU架构的指令以实现原生执行效率。BPF程序可在内核的多个挂钩点运行,如入站数据包、出站数据包、系统调用、kprobes、uprobes、跟踪点等。
BPF随每个Linux版本不断发展并增加新功能。Cilium利用BPF执行核心数据路径过滤、修改、监控和重定向,需要Linux内核4.8.0或更高版本(最新稳定内核为4.14.x)的BPF功能。
许多Linux发行版(包括CoreOS、Debian、Docker的LinuxKit、Fedora、openSUSE和Ubuntu)已预装>=4.8.x的内核。可通过运行uname -a检查内核版本。若内核版本不足,请参考Linux发行版文档升级至4.9.x或更高版本。
有关运行BPF运行时所需的内核版本,请参见先决条件部分。
!BPF概述
XDP是进一步的演进,允许从网络驱动程序运行特定类型的BPF程序,直接访问数据包的DMA缓冲区,是软件栈中最早可附加程序的点,实现可编程、高性能的数据包处理。
更多面向开发人员的BPF和XDP信息,请参阅BPF和XDP参考指南。
加入Cilium Slack频道,与Cilium开发人员和其他用户交流。这是学习Cilium、提问和分享经验的好地方。
有关所有SIG及其会议时间的列表,请参见特别兴趣小组。
Cilium用户空间组件采用Apache许可证2.0版授权。BPF代码模板采用GPL许可证2.0版授权。
.. _Hubble: [] .. _CNI: [] .. _libnetwork: [] .. _containerd: [] .. _Service: [] .. _Ingress: [] .. _NetworkPolicy: [] .. _Labels: [] .. _eBPF: [] .. _eBPF.io: []
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务