[译] 基于 Envoy、Cilium 和 eBPF 实现透明的混沌测试(2019)
Published at 2019-06-02 | Last Update 2019-06-04
译者序
本文内容来自 2019 年的一个技术分享 Transparent Chaos Testing with Envoy, Cilium
and eBPF
,演讲嘉宾是 Cilium 项目的创始人和核心开发者,演讲为英文。
本文翻译了其中的技术性内容,少量非技术内容(例如开场白)已略过。如有疑
问,请观看 原视频 或
PPT。
以下是译文。
在座有些人可能会觉得奇怪,以前我的分享都是关于网络、BPF、安全等主题,为什么今
天变成了 混沌测试 (chaos testing)?直接原因是:我们当前确实在做这件事情。
如果我们自己开发的工具能用来做混沌测试,那为什么不试试看呢?所以今天给大家分享
的就是我们如何利用三个工具:Envoy、Cilium 和 eBPF 来做混沌测试的。
那么这三者是如何组成一个系统的?如何基于这个系统来做混沌测试?到底什么是透
明的混沌测试(transparent chaos testing)?这些都是我们今天要深入探讨的主题。
我们的透明混沌测试基于如下技术栈:
Envoy Go Extensions
Envoy
Cilium
eBPF
首先,我们会用到 Envoy 的 Go Extension(Go 语言扩展)。如果你还没听说过
Envoy,那应该尽快去了解一下。简单来说,Go Extension 提供了一种让 Go 编写的程
序和 Envoy 本身一起运行的能力。这使得开发者可以扩展和定制化 Envoy,而且使
用的是 Go 而非 C++ (Envoy 本身用 C++编写)。Envoy 还提供了其他语言扩展,不限
于 Go。
其次,我们会用到 Envoy (本身)。稍后我会对 Envoy 做一个快速介绍。
其次,用到 Cilium。运行在 Envoy 的下面,作为 CNI plugin 和 Load Balancing plugin。
最后,eBPF,这是一项内核里的强大技术,允许我们透明、高效地做类似这样的事情。
接下来会对这几项内容深入展开,介绍我们混沌测试的技术栈和其中的各个组件。
什么是混沌测试(chaos testing)?
如果搜索 Chao Testing,你可能首先会搜到 Chaos Engineering (混沌工程 )的定义:
Chaos engineering is the discipline of experimenting on a software system in
production in order to build confidence in the system’s capability to
withstand turbulent and unexpected conditions. [1]
(混沌工程是一门在生产环境对系统进行实验、测试系统在混乱或非预期情
况下的容错能力、以构建对系统容错能力信心的学科。)
Chaos Testing 就是从 Chaos Engineering 发展出来的一个分支,而 Chaos Engineering
是从 Netflix 的一个叫 Chaos Monkey 的项目发展而来的。从定义来说,混沌工程是要在
生产环境进行的。我不知道多少人理解这句话的分量,也不清楚有多少人真正在生产环境
做过这种测试。但总体来说,它意味着主动向基础设施引入混沌(chaos),以更好地了解
故障模式(failure modes)。
今天我们主要关注的是 故障注入(fault injection)。故障注入是混沌测试的一个子
集,其基本原理就是向正常运行的系统主动注入故障,以模拟服务中断(outage)或服务故
障(service failure)等等。
故障注入非常有用,因为它可以测试系统在特定情况下是如何运行的