写点什么

Cilium 1.0.0-rc4 发布:使用 Linux BPF 实现透明安全的容器间网络连接

  • 2018-03-13
  • 本文字数:2206 字

    阅读完需:约 7 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Cilium 是一种开源软件,它使用 Docker Kubernetes 等 Linux 容器管理平台,实现应用服务间网络连接性的透明安全部署。Cilium 1.0.0-rc4 于近期发布,其中包括:将 CNCF(云原生计算基金会,Cloud Native Computing Foundation)力推的 Envoy 配置为默认的 HTTP/gRPC 代理、给出了一种针对连接性和其它一些错误的基本健康情况总览、改进了可扩展的键值存储交互层

微服务应用呈现出高度动态的特点,这对于微服务间的安全连接性不仅是一个挑战,而且也是一个机会。当前,解决该问题的方法结合使用了CNCF 力推的 CNI(容器网络接口,Container Network Interface),以及 Istio Conduit 等日益广为使用的“服务网格(Service Mesh)”技术。 Cilium 文档中指出,传统的 Linux 网络安全方法(例如 iptables )是根据 IP 地址和 TCP/UDP 端口做过滤。但是容器和 IP 地址的生命周期存在高度不稳定的问题,导致这些网络安全方法难以和应用一起扩展,因为必须要不断地更新大量的负载平衡表和访问控制列表。

Cilium 尝试通过使用一种称为“ Berkeley Packet Filter ”(BPF)的相对较新技术解决这一问题,并实现扩展性。BPF 是一种 Linux 内核字节码解释器,最初用于实现 tcpdump 和 Socker 过滤器那样的网络包过滤。通过使用哈希表、数组等一些额外的数据结构扩展,及一些额外的操作,BPF 现已支持网络包的修改(packet mangling)、转发和封装等操作。此外,BPF 还提供了一个驻留内核的验证器以确保 BPF 程序安全运行、一个将字节码转换为特定于 CPU 架构的指令的 JIT 编译器以保证原生的执行效率。性能大师 Brendan Gregg 对“ Linux BPF 超能力”做了一些了深入的讲解和文章,可供对探索 BPF 更多细节的读者参考。

Cilium 部署中包括如下组件,这些组件运行在 Linux 容器集群中的每个容器节点上。

  • Cilium Agent(Daemon):它是一种使用 Golang 编写的用户空间 daemon,实现与容器运行时的交互,并通过插件编排 Kubernetes 等系统,设置在本地服务器上运行的容器网络和安全性。它提供了一个 API,用于配置网络安全策略、提取网络可见性数据等。
  • Cilium CLI Client:一种用于和本地 Cilium Agent 通信的基本 CLI 客户端,例如配置网络安全或可见性策略。
  • Linux Kernel BPF:一种使用 BPF 功能的数据路径组件,它集成了 Linux 内核功能,并接收运行在内核中的各种钩子和追踪点处的编译后二进制代码。Cilium 编译 BPF 程序,并让内核在网络栈的关键点处运行这些程序,以具备对所有出入容器网络流的可见性和控制性。
  • Container Platform Network 插件:为集成外部网络平台,每种容器平台(例如 Docker、Kubernetes)都具有自己的插件模型。就 Docker 而言,每个 Linux 节点运行一个进程(cilium-docker)处理每个 Docker libnetwork 调用,并传递主要 Cilium Agent 上的数据和请求。建议内核中版本依然在构建中,Cilium 使用了一组用户空间代理( Envoy 是其中之一)提供应用协议层过滤。

图1 Cilium 的架构(图片来自于 Cilium 概念文档

Cilium 可为 REST/HTTP、gRPC 和 Kafka 等现代应用协议提供安全功能。传统的防火墙通常操作于网络第三层和第四层上,运行于特定端口上的协议或者是完全受信的,或者被完全拒绝。Cilium 提供了对单个应用协议请求的过滤功能,例如:

  • 允许所有具有 GET 方法以及“/public/.*.”路径的 HTTP 请求,拒绝所有其它的请求。
  • 允许 service1 在 topic1(Kafka Topic)上生成消息,service2 消费 topic1 上的消息,拒绝所有其它的 Kafka 消息。
  • 要求所有的 REST 调用中存在 HTTP 头部 X-Token 模式“[0-9]+”。

在 Cilium 文档的“ Layer 7 Policy ”一节中给出了最新支持协议的列表,并提供了如何使用的例子。因为 BPF 运行在 Linux 内核中,(理论上)可在不对应用代码或容器配置做任何更改的情况下,应用和更新 Cilium 的安全策略

Cilium 提供了全面的网络安全实现方法,其核心理念围绕着指定一组共享同样安全策略的应用容器安全身份而构建。进而,安全身份会关联到应用容器所发出的所有网络包,并在接收节点处对身份进行验证。安全身份管理的执行使用了一种键值存储。

Cilium 还提供了其它很多网络特性,包括:具备跨多个集群连接所有应用容器能力的基本第三层扁平网络(这意味着无需任何主机间协调就可分配每个主机的 IP)、用于应用容器间流量和外部服务的分布式负载均衡(负载均衡使用允许“几乎可无限扩展”的高效哈希表通过 BPF 实现)、具有元数据的事件监测等深入可观察性、政策决策追踪,以及通过 Prometheus 导出各种度量等。

在近期召开的 KubeCon 北美大会上,“服务网格”得到了广泛的讨论(尤其是围绕着 Istio 控制面板)。Cilium 社区相应编写了一份指南,阐明了Cilium 技术及BPF 的总体前景将如何辅助Istio 实现。Istio 本身使用了Envoy 实现自身的数据面板,并且代理以附加(sidecar)配置形式运行在应用Pod 内。Cilium 在应用Pod 外运行 Envoy ,并为单个 Pod 配置独立的监听器。Cilium 建议:

模型中没有所谓的对错,各自在一系列方面上分别具有一些优点和不足,例如运维复杂性、安全、资源核算、占用空间等。Cilium 未来可能支持运行两个模型中的任一种。

Cilium 项目网站上提供了更多信息,还可以通过 Cilium Slack 提问。

查看英文原文: Cilium 1.0.0-rc4 Released: Transparently Secure Container Network Connectivity Utilising Linux BPF

2018-03-13 19:002006
用户头像

发布了 391 篇内容, 共 139.9 次阅读, 收获喜欢 257 次。

关注

评论

发布
暂无评论
发现更多内容

leetcode练级-两数之和

幸福三寸日光

算法 LeetCode js

谈谈我的云笔记使用之路

读钓

学习 个人成长 写作

数据与广告系列二:计算广告和推荐系统

黄崇远@数据虫巢

数据挖掘 大数据 互联网 广告 推荐系统

时间管理的本质

史方远

职场 心理 成长

【万字图文-原创】 | 学会Java中的线程池,这一篇也许就够了!

一枝花算不算浪漫

并发编程 jdk源码 线程池

Spring Security密码登录流程源码分析

读钓

源码分析 spring security springboot

其实,还是让我挺震惊的,程序员的换行率竟然高达 40%

非著名程序员

程序员 程序人生 自我思考

Tomcat学习分享

李印

tomcat

RabbitMQ-AMQP

云淡风轻

RabbitMQ

ARTS week1

紫枫

ARTS 打卡计划

音视频会议系统-Janus的安装与布署

音视频专家-李超

音视频 WebRTC

关于工作的一点总结

李印

工作思路

云直播平台的选型与使用

音视频专家-李超

谈谈控制感(9):提升控制感排名第一的武器

史方远

职场 心理 成长

MySQL实战四十五讲基础篇总结(四)

一个有志气的DB

MySQL 索引结构

Algorithm week 1: Merge Two Sorted Lists

猫吃小怪兽

算法 链表 ARTS 打卡计划

编程入门整理

紫枫

读书笔记

青春期的打油诗

李印

随笔

谈即时编译优化-以异常堆栈丢失为例

寻筝

从引用聊一聊 Java 垃圾回收

Rayjun

Java 引用 对象

ArrayList 源码分析

读钓

Java 源码分析 jdk源码

宏在C++中的替代解决方案

老王同学

c++ 模板 template

鄙视链 & 全栈

伯薇

学习 能力提升 全栈

MySQL实战四十五讲基础篇总结(五)

一个有志气的DB

MySQL 索引

使用 webpack 搭建一个简单的 React 脚手架

张张张小烦

react.js

Java 数据持久化系列之JDBC

程序员历小冰

Java JDBC 持久化

ARTS打卡Week 01

teoking

android WebRTC

MySQL实战四十五讲基础篇总结(七)

一个有志气的DB

MySQL 性能

k8s 上运行我们的 springboot 服务之——我们的springboot能够在k8s上运行

柠檬

k8s istio springboot

《陆蓉行为金融学讲义》 - 读后感

石云升

读书笔记 投资 行为金融学 理性 公平

MySQL实战四十五讲基础篇总结(六)

一个有志气的DB

MySQL 读写锁

Cilium 1.0.0-rc4发布:使用Linux BPF实现透明安全的容器间网络连接_DevOps & 平台工程_Daniel Bryant_InfoQ精选文章