Cilium——具有API感知的网络和安全性管理软件

做者:宋净超html

Cilium是一个纯开源软件,没有哪家公司提供商业化支持,也不是由某一公司开源,该软件用于透明地保护使用Linux容器管理平台(如Docker和Kubernetes)部署的应用程序服务之间的网络链接。linux

Cilium的基础是一种名为BPF的新Linux内核技术,它能够在Linux自己动态插入强大的安全可见性和控制逻辑。因为BPF在Linux内核中运行,所以能够应用和更新Cilium安全策略,而无需对应用程序代码或容器配置进行任何更改。git

基于微服务的应用程序分为小型独立服务,这些服务使用HTTPgRPCKafka等轻量级协议经过API相互通讯。可是,现有的Linux网络安全机制(例如iptables)仅在网络和传输层(即IP地址和端口)上运行,而且缺少对微服务层的可见性。github

Cilium为Linux容器框架(如DockerKubernetes)带来了API感知网络安全过滤。使用名为BPF的新Linux内核技术,Cilium提供了一种基于容器/容器标识定义和实施网络层和应用层安全策略的简单而有效的方法。docker

:Cilium中文意思是“纤毛“,它十分细小而又无处不在。编程

BPF

柏克莱封包过滤器(Berkeley Packet Filter,缩写 BPF),是类Unix系统上数据链路层的一种原始接口,提供原始链路层封包的收发,除此以外,若是网卡驱动支持洪泛模式,那么它可让网卡处于此种模式,这样能够收到网络上的全部包,无论他们的目的地是否是所在主机。参考维基百科eBPF简史安全

特性

如下是Cilium的特性。服务器

基于身份的安全性微信

Cilium可见性和安全策略基于容器编排系统的标识(例如,Kubernetes中的Label)。在编写安全策略、审计和故障排查时,不再用担忧网络子网或容器IP地址了。网络

卓越的性能

BPF利用Linux底层的强大能力,经过提供Linux内核的沙盒可编程性来实现数据路径,从而提供卓越的性能。

API协议可见性+安全性

传统防火墙仅根据IP地址和端口等网络标头查看和过滤数据包。Cilium也能够这样作,但也能够理解并过滤单个HTTP、gRPC和Kafka请求,这些请求将微服务拼接在一块儿。

专为扩展而设计

Cilium是为扩展而设计的,在部署新pod时不须要节点间交互,而且经过高度可扩展的键值存储进行全部协调。

为何选择Cilium?

现代数据中心应用程序的开发已经转向面向服务的体系结构(SOA),一般称为

微服务
,其中大型应用程序被分红小型独立服务,这些服务使用HTTP等轻量级协议经过API相互通讯。微服务应用程序每每是高度动态的,做为持续交付的一部分部署的滚动更新期间单个容器启动或销毁,应用程序扩展/缩小以适应负载变化。

这种向高度动态的微服务的转变过程,给确保微服务之间的链接方面提出了挑战和机遇。传统的Linux网络安全方法(例如iptables)过滤IP地址和TCP/UDP端口,但IP地址常常在动态微服务环境中流失。容器的高度不稳定的生命周期致使这些方法难以与应用程序并排扩展,由于负载均衡表和访问控制列表要不断更新,可能增加成包含数十万条规则。出于安全目的,协议端口(例如,用于HTTP流量的TCP端口80)不能再用于区分应用流量,由于该端口用于跨服务的各类消息。

另外一个挑战是提供准确的可见性,由于传统系统使用IP地址做为主要识别工具,其在微服务架构中的寿命可能才仅仅几秒钟,被大大缩短。

利用Linux BPF,Cilium保留了透明地插入安全可视性+强制执行的能力,但这种方式基于服务/pod/容器标识(与传统系统中的IP地址识别相反),而且能够根据应用层进行过滤 (例如HTTP)。所以,经过将安全性与寻址分离,Cilium不只能够在高度动态的环境中应用安全策略,并且除了提供传统的第3层和第4层分割以外,还能够经过在HTTP层运行来提供更强的安全隔离。 。

BPF的使用使得Cilium可以以高度可扩展的方式实现以上功能,即便对于大规模环境也不例外。

功能概述

透明的保护API

可以保护现代应用程序协议,如REST/HTTP、gRPC和Kafka。传统防火墙在第3层和第4层运行,在特定端口上运行的协议要么彻底受信任,要么彻底被阻止。Cilium提供了过滤各个应用程序协议请求的功能,例如:

  • 容许全部带有方法GET和路径/public/.*的HTTP请求。拒绝全部其余请求。

  • 容许service1在Kafka topic上生成topic1service2消费topic1。拒绝全部其余Kafka消息。

  • 要求HTTP标头X-Token: [0-9]+出如今全部REST调用中。

详情请参考7层协议

基于身份来保护服务间通讯

现代分布式应用程序依赖于诸如容器之类的技术来促进敏捷性并按需扩展。这将致使在短期内启动大量应用容器。典型的容器防火墙经过过滤源IP地址和目标端口来保护工做负载。这就要求不论在集群中的哪一个位置启动容器时都要操做全部服务器上的防火墙。

为了不受到规模限制,Cilium为共享相同安全策略的应用程序容器组分配安全标识。而后,该标识与应用程序容器发出的全部网络数据包相关联,从而容许验证接收节点处的身份。使用键值存储执行安全身份管理。

安全访问外部服务

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

简单网络

一个简单的扁平第3层网络可以跨越多个集群链接全部应用程序容器。使用主机范围分配器能够简化IP分配。这意味着每一个主机能够在主机之间没有任何协调的状况下分配IP。

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

  • Overlay:基于封装的虚拟网络产生全部主机。目前VXLAN和Geneve已经完成,但能够启用Linux支持的全部封装格式。

    什么时候使用此模式:此模式具备最小的基础架构和集成要求。它几乎适用于任何网络基础架构,惟一的要求是主机之间能够经过IP链接。

  • 本机路由:使用Linux主机的常规路由表。网络必须可以路由应用程序容器的IP地址。

    什么时候使用此模式:此模式适用于高级用户,须要了解底层网络基础结构。此模式适用于:

    • 本地IPv6网络

    • 与云网络路由器配合使用

    • 若是您已经在运行路由守护进程

负载均衡

应用程序容器和外部服务之间的流量的分布式负载均衡。负载均衡使用BPF实现,容许几乎无限的规模,而且若是未在源主机上执行负载均衡操做,则支持直接服务器返回(DSR)。

注意:负载均衡须要启用链接跟踪。这是默认值。

监控和故障排除

可见性和故障排查是任何分布式系统运行的基础。虽然咱们喜欢用tcpdumpping,它们很好用,但咱们努力为故障排除提供更好的工具。包括如下工具:

  • 使用元数据进行事件监控:当数据包被丢弃时,该工具不只仅报告数据包的源IP和目标IP,该工具还提供发送方和接收方的完整标签信息等。

  • 策略决策跟踪:为何丢弃数据包或拒绝请求。策略跟踪框架容许跟踪运行工做负载和基于任意标签订义的策略决策过程。

  • 经过Prometheus导出指标:经过Prometheus导出关键指标,以便与现有仪表板集成。

集成

参考

ServiceMesher社区信息

微信群:联系我入群

社区官网:www.servicemesher.com

Slack:servicemesher.slack.com 须要邀请才能加入

Twitter: twitter.com/servicemesh…

GitHub:github.com/

更多Service Mesh咨询请扫码关注微信公众号ServiceMesher。

相关文章
相关标签/搜索