Cilium提供并透明地保护应用程序工作负载之间的网络连接和负载平衡:什么是eBPF和XDP?

Table of Contents

稳定的发行

功能概述

透明地保护和保护API

基于身份的服务到服务通信的安全保护

安全访问外部服务

简单联网

负载均衡

监控和故障排除

整合方式

入门

什么是eBPF和XDP?

社区

松弛

特殊兴趣小组(SIG)

每周开发人员会议

执照

相关阅读


 

https://github.com/cilium/cilium

Cilium是开源软件,用于提供并透明地保护应用程序工作负载(例如应用程序容器或进程)之间的网络连接和负载平衡。Cilium在第3/4层运行以提供传统的网络和安全服务,在第7层运行以保护和安全使用现代应用程序协议,例如HTTP,gRPC和Kafka。Cilium已集成到常见的业务流程框架中,例如Kubernetes和Mesos。

Cilium的基础是一种称为eBPF的新Linux内核技术。它支持将eBPF字节码动态插入Linux内核中的各种集成点,例如:网络IO,应用程序套接字和用于实现安全性,网络和可见性逻辑的跟踪点。eBPF高效且灵活。要了解更多关于eBPF,请访问eBPF.io

 

稳定的发行

对于最近三个主要的Cilium版本,Cilium社区都维持较小的稳定版本。从主要发行版开始的较早版本Cilium稳定版本被视为EOL。

有关新主要版本的升级,请查阅Cilium升级指南

下面列出的是活跃维护的发行分支以及它们的最新次要发行版,相应的图像拉标签及其发行说明:

v1.82020-10-28docker.io/cilium/cilium:v1.8.5发行说明一般公告
v1.72020-10-27docker.io/cilium/cilium:v1.7.11发行说明一般公告
v1.62020-09-30docker.io/cilium/cilium:v1.6.12发行说明一般公告

功能概述

透明地保护和保护API

能够保护现代应用程序协议(例如REST / HTTP,gRPC和Kafka)的能力。传统的防火墙运行在第3层和第4层。在特定端口上运行的协议是完全可信的或完全被阻止的。Cilium提供了对单个应用程序协议请求进行过滤的功能,例如:

  • 允许所有带有methodGET和path的HTTP请求/public/.*。拒绝所有其他请求。
  • 允许service1在Kafka主题上产生topic1service2消费topic1。拒绝所有其他Kafka消息。
  • 要求HTTP头X-Token: [0-9]+出现在所有REST调用中。

有关支持的协议的最新列表以及如何使用它的示例,请参阅我们文档中的第7层策略部分。

基于身份的服务到服务通信的安全保护

现代分布式应用程序依靠诸如应用程序容器之类的技术来促进部署的敏捷性并按需扩展。这导致大量应用程序容器在短时间内启动。典型的容器防火墙通过过滤源IP地址和目标端口来保护工作负载。此概念要求在集群中任何位置启动容器时都必须操纵所有服务器上的防火墙。

为了避免这种限制规模的情况,Cilium将安全身份分配给共享相同安全策略的应用程序容器组。然后将身份与应用程序容器发出的所有网络数据包相关联,从而允许在接收节点处验证身份。安全身份管理是使用键值存储执行的。

安全访问外部服务

基于标签的安全性是群集内部访问控制的首选工具。为了保护进出外部服务的安全,支持基于传统CIDR的入口和出口安全策略。这样可以限制对应用程序容器的访问以及对特定IP范围的访问。

简单联网

一个简单的扁平第3层网络具有跨多个群集的能力,可以连接所有应用程序容器。通过使用主机作用域分配器,可以简化IP分配。这意味着每个主机可以分配IP,而主机之间无需任何协调。

支持以下多节点网络模型:

  • 覆盖:跨越所有主机的基于封装的虚拟网络。当前以VXLAN和Geneve进行烘焙,但是可以启用Linux支持的所有封装格式。

    何时使用此模式:此模式具有最低的基础结构和集成要求。它几乎可以在任何网络基础架构上工作,因为唯一的要求就是主机之间的IP连接(通常已经给出了)。

  • 本机路由:使用Linux主机的常规路由表。要求网络能够路由应用程序容器的IP地址。

    何时使用此模式:此模式适用于高级用户,需要对基础网络基础结构有所了解。此模式适用于:

    • 本地IPv6网络
    • 结合云网络路由器
    • 如果您已经在运行路由守护程序

负载均衡

用于应用程序容器之间和外部服务之间的流量的分布式负载平衡。使用有效哈希表的eBPF使用eBPF实现负载平衡,从而实现几乎无限的扩展,并且如果未在源主机上执行负载平衡操作,则支持直接服务器返回(DSR)。 注意:负载平衡需要启用连接跟踪。这是默认值。

监控和故障排除

获得可见性和解决问题的能力是任何分布式系统运行的基础。虽然我们学会了喜欢tcpdump和之类的工具 ping,而它们始终在我们心中占据特殊的位置,但我们努力为故障排除提供更好的工具。这包括提供以下功能的工具:

  • 使用元数据进行事件监视:丢弃数据包时,该工具不仅报告数据包的源IP和目标IP,该工具还提供了发送方和接收方的完整标签信息以及许多其他信息。
  • 策略决策跟踪:为什么丢弃数据包或拒绝请求。策略跟踪框架允许跟踪正在运行的工作负载并基于任意标签定义的策略决策过程。
  • 通过Prometheus导出指标:通过Prometheus导出关键指标以与您现有的仪表板集成。
  • 哈勃:专门为Cilium编写的可观察性平台。它基于流日志提供服务依赖关系图,操作监视和警报以及应用程序和安全可见性。

整合方式

入门

什么是eBPF和XDP?

Berkeley数据包过滤器(BPF)是Linux内核字节码解释器,最初用于过滤网络数据包,例如用于tcpdump和套接字过滤器。最近,BPF指令集和周围的体系结构已与其他数据结构(例如用于保持状态的哈希表和数组)以及支持数据包处理,转发,封装等的其他动作进行了重大改进。此外,LLVM的编译器后端允许用于用C编写并编译为BPF指令的程序。内核验证程序可确保BPF程序安全运行,并且JIT编译器将BPF字节码转换为CPU架构特定的指令,以提高本机执行效率。BPF程序可以在内核的各个连接点运行,例如传入数据包,传出数据包,系统调用,kprobes,

BPF不断发展,并在每个新的Linux版本中获得更多功能。Cilium利用BPF来执行核心数据路径过滤,处理,监视和重定向,并且需要任何Linux内核版本4.8.0或更高版本中的BPF功能(当前最新的稳定Linux内核是4.14.x)。

许多Linux发行版,包括CoreOS,Debian,Docker的LinuxKit,Fedora,openSUSE和Ubuntu,都已经发布了内核版本> =4.8.x。您可以通过运行来检查Linux内核版本uname -a。如果尚未运行足够新的内核,请查看Linux发行版的文档,以了解如何运行4.9.x或更高版本的Linux内核。

要阅读运行BPF运行时所需的内核版本,请参阅前提条件一节。

 

XDP是演进的又一步,它可以通过直接访问数据包的DMA缓冲区,从网络驱动程序运行特定类型的BPF程序。根据定义,这是软件堆栈中最早的点,可以在其中附加程序,以便在Linux内核联网数据路径中使用可编程的高性能分组处理器。

有关面向开发人员的BPF和XDP的更多信息,请参见《BPF和XDP参考指南》

要了解有关Cilium的更多信息,它是Cilium和BPF的扩展和用例,请查看“进一步阅读”部分。

社区

松弛

加入Cilium Slack频道,与Cilium开发人员和其他Cilium用户聊天。这是学习Cilium,提问和分享经验的好地方。

特殊兴趣小组(SIG)

有关所有SIG及其开会时间的列表,请参阅特殊兴趣组

每周开发人员会议

  • 开发者社区每周都在闲逛以聊天。欢迎大家。
  • CEST每周星期一,美国东部标准时间上午8:00,美国东部时间上午11:00,下午5:00
  • 加入变焦

执照

cilium用户空间组件已根据Apache许可2.0版获得 许可。BPF代码模板根据通用公共许可证版本2.0许可

 

相关阅读


深入理解 Cilium 的 eBPF(XDP)收发包路径:数据包在Linux网络协议栈中的路径

iptables详解(1):iptables概念

iptables详解(2):路由表

eBPF.io eBPF文档:扩展的数据包过滤器(BPF)

介绍Calico eBPF数据平面:Linux内核网络、安全性和跟踪(Kubernetes、kube-proxy)

Linux eBPF和XDP高速处理数据包;使用EBPF编写XDP网络过滤器;高性能ACL

深入理解 Cilium 的 eBPF 收发包路径

《Understanding (and Troubleshooting) the eBPF Datapath in Cilium》

kubernetes(K8s):管理云平台中多个主机上的容器化的应用

Cilium提供并透明地保护应用程序工作负载之间的网络连接和负载平衡:什么是eBPF和XDP?

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页