Cilium 1.9:eBPF是Linux和云原生网络的未来


背景

几十年来,IPtables一直是Linux网络的基石,但是现在不再如此。在过去的几年中,网络和安全性必须与IP和端口等底层抽象脱钩,而应在与开发人员,DevOps和SecOps团队如何考虑他们的应用程序相一致的更高层。

在现代系统中,我们很少考虑真正地连接机器和网线,虚拟机甚至容器。相反,我们关注的是连接微服务,云服务,API以及用于连接微服务,高层协议和系统的系统。过去是IP地址,端口,vNIC和VLAN。现在,它是服务标识,gRPC,Kafka,分布式数据存储,远程API等。
1.png

使用eBPF,可以编写程序并将其直接嵌入到内核中。eBPF带给Linux内核的改变就相当于JavaScript于浏览器一样。借助eBPF,您可以查看和控制API级别的情况,显示正在调用的远程API调用以及正在传递的数据。

Cilium + eBPF当然远不止API感知的可见性,与仅跟踪数据包的传统世界相比,这是一个根本性的转变。eBPF的承诺在于,联网不仅仅是移动数据包,还在于了解正在移动的数据,如何控制数据以及如何保护数据。eBPF提供的是一个简单接口,用于启用数据包传输和控制。它本身具有巨大的联网潜力。尽管Linux内核中现在有很多开源eBPF代码,但它本身可能非常复杂,这也是开源Cilium项目在过去几年中不断发展的地方。

什么是eBPF和Cilium?

eBPF是一项革命性的技术,可以在Linux内核中运行沙盒程序,而无需重新编译内核或加载内核模块。在过去的几年中,eBPF已成为解决以前依赖于内核更改或内核模块的问题的标准方法。此外,eBPF导致在网络,安全性和应用程序分析等领域开发了新一代的工具。这些工具不再依赖现有的内核功能,而是在不影响执行效率或安全性的情况下主动地对运行时行为进行重新编程。

Cilium是一个开源项目,它的基础是基于eBPF的Linux内核技术,用于透明地提供和保护使用Linux容器管理平台部署的应用程序服务之间的网络和API连接。以解决容器工作负载的新可伸缩性,安全性和可见性要求。Cilium超越了传统的容器网络接口(CNI),可提供服务解析,策略执行等功能。
2.png

eBPF用于提供功能,例如多群集路由,负载均衡以替换kube-proxy,透明加密以及网络和服务安全性,eBPF的灵活性还可以通过应用程序协议和DNS请求/响应的上下文来实现安全性。Cilium与Envoy紧密集成,并提供基于Go的扩展框架。由于eBPF在Linux内核中运行,因此可以应用所有Cilium功能,而无需更改应用程序代码或容器配置。

Cilium已迅速成为Kubernetes生态系统中的领先技术,为Google Kubernetes Engine(GKE)提供了网络数据平面,并在其他领先的云原生最终用户(包括Adobe,DataDog,GitLab和DigitalOcean)中得到采用。

使用eBPF构建Kubernetes网络策略日志记录

让我们看一下eBPF如何帮助我们解决真正的客户痛点的具体应用。具有安全意识的客户使用Kubernetes网络策略来声明Pod如何相互通信。但是,没有可伸缩的方式来对这些策略的行为进行故障排除和审核,这使它对于企业客户而言是一个初学者。通过将eBPF引入DataPlane,我们现在可以支持实时策略实施,并以线速将策略操作(允许/拒绝)关联到pod,名称空间和策略名称,而对节点的CPU和内存资源的影响最小。
3.png

上图显示了如何将高度专业化的eBPF程序安装到Linux内核中,以实施网络策略并报告操作日志。当数据包进入虚拟机时,内核中安装的eBPF程序将决定如何路由数据包。与IPTables不同,eBPF程序可以访问Kubernetes特定的元数据,包括网络策略信息,这样,它们不仅可以允许或拒绝数据包,还可以将带注释的操作报告回用户空间。这些事件使我们能够生成对Kubernetes用户有意义的网络策略日志。例如,下面显示的日志代码段指出了哪个源Pod试图连接到哪个目标Pod,以及哪个网络策略允许该连接。
4.png

Cilium v1.9正式发布

近日,Cilium v1.9正式发布。由251个开发人员组成的社区共提交了2816个提交,其中许多人在此周期内首次做出了贡献。Cilium 1.9带来了几个全新的功能:
  • Maglev负载平衡:Maglev通过动态适应节点变化的环境,为高可用性场景提供具有一致哈希值的负载平衡。
  • 拒绝网络策略:用户现在可以定义网络策略,以明确拒绝来自特定来源或特定目标的流量。可以通过CiliumNetworkPolicy或CiliumClusterwideNetworkPolicy配置这些策略,从而允许多租户环境对连接具有基线限制,还可以将允许策略委派给应用程序团队。
  • 虚拟机、裸金属机器支持:现在可以将Cilium部署在任何VM或裸机节点上,以将该节点连接到Cilium集群,并代表在此类节点上运行的外部工作负载,就像工作负载在Kubernetes集群中作为Pod运行一样。这些节点还可以访问Kubernetes服务,并且Cilium的可见性和策略执行范围已扩展到涵盖VM和裸机节点。
  • 带宽管理器:新的带宽管理器自动优化TCP拥塞控制和其他网络设置,以改善延迟和吞吐量。公平排队会自动启用,并且可以配置速率限制,包括对kubernetes.io/egress-bandwidth注释的支持 。
  • OpenShift支持:新指南介绍了在OpenShift上安装Cilium。基于Red Hat通用基础映像(UBI)的内部版本以及用于简化安装的操作员将在接下来的几周内提供。
  • Hubble mTLS自动化:Hubble现在能够在Hubble代理之间自动生成和分发TLS证书,以保护所有Hubble组件之间的通信。
  • 基于eBPF的节点本地DNS和KIAM:新的基于eBPF的本地重定向策略允许完全使用eBPF来构建节点本地DNS解析器,KIAM和其他节点本地服务,而无需依赖iptables。
  • 数据路径优化(iptables旁路):我们在Linux内核中添加了两个新的eBPF帮助器,它们允许完全在eBPF中实现直接路由数据路径并完全绕过netfilter / iptables。这导致吞吐量和延迟的显著改善,尤其是对于单流TCP会话。Cilium自动在内核5.10或更高版本上启用这些优化。
  • 其他许多改进:此版本带来了许多其他改进,例如Cilium Operator的高可用性以提高容错能力,Hubble UI改进,eBPF中的透明代理支持以及新的性能测试框架。


Linux和云原生网络的未来

Kubernetes已经成为云的操作系统,它将节点(其中大多数是Linux)联结在一起并启用了微服务。但是,Kubernetes打破了许多假定物理服务器不变的传统网络和安全工具。因此,简单地,我们需要一个新的网络和安全层,以安全,可无缝部署且不损害应用程序性能的方式提供云原生可见性,安全性以及对这些高级抽象的控制。

在云原生的Kubernetes环境中,eBPF和Cilium已经取得了重大进展。从根本上讲,它是在云环境中进行联网的一种根本上更强大的方法,从传统的配置开始,就可以实现更强大的程序跟踪,可观察性和监视。云网络连接和监视有很多选项,但是从内核层面进行控制实际上是一种新的洞察力。可以想象,eBPF和Cilium为Kubernetes提供了最佳的网络和安全技实践。我们坚信,这项技术会很好地再次颠覆网络,并引导成为Linux和云原生网络的未来。
5.png

原文链接:https://mp.weixin.qq.com/s/Ez7PB_txCrlf0F19lsDpgA

0 个评论

要回复文章请先登录注册