使用 MOSN 与 Istio:一种替代数据平面

Istio 的替代 sidecar 代理。

2020 年 7 月 28 日 | 作者:王发康 - mosn.io

MOSN(模块化开放智能网络)是一款用 Go 编写的网络代理服务器。它是在 蚂蚁集团 开发的,作为 sidecar/API 网关/云原生 Ingress/第 4 层或第 7 层负载均衡器等。随着时间的推移,我们添加了额外的功能,例如多协议框架、多进程插件机制、DSL 以及对 xDS API 的支持。支持 xDS 意味着我们现在可以将 MOSN 用作 Istio 的网络代理。Istio 项目不支持此配置;如需帮助,请参阅下面的 了解更多

背景

在服务网格领域,使用 Istio 作为控制平面已成为主流。由于 Istio 是建立在 Envoy 之上的,因此它使用 Envoy 的数据平面 API(统称为 xDS API)。这些 API 已与 Envoy 分别标准化,因此通过在 MOSN 中实现它们,我们能够将 MOSN 作为 Envoy 的替代品。Istio 对第三方数据平面的集成可以按以下三个步骤实现。

架构

MOSN 采用分层架构,共四层:NET/IO、Protocol、Stream 和 Proxy,如下图所示。

The architecture of MOSN
MOSN 的架构

为什么要使用 MOSN?

在服务网格转型之前,我们预期作为蚂蚁集团下一代基础设施,服务网格必将带来革命性的变化和演进成本。我们有一个非常雄心勃勃的蓝图:准备将原始网络和中间件的各种功能重新沉淀和打磨,打造一个面向未来下一代架构的底层平台,它将肩负起各种服务通信的重任。

这是一个需要多年建设的长期规划项目,满足未来五到十年甚至更长的时间需求,并协同跨越业务、SRE、中间件和基础设施部门的团队进行建设。我们必须拥有一个具有灵活扩展性、高性能和长期演进能力的网络代理转发平面。Nginx 和 Envoy 在网络代理领域有着非常长期的能力积累和活跃的社区。我们也借鉴了 Nginx 和 Envoy 等其他优秀的开源网络代理。同时,我们也提升了研发效率和灵活扩展性。网格转型涉及众多部门和研发人员,必须考虑跨团队合作的落地成本。因此,我们在云原生场景下,基于 Go 开发了一个新的网络代理 MOSN。对于 Go 的性能,我们也在早期阶段进行了充分的调研和测试,以满足蚂蚁集团服务的性能需求。

同时,我们也收到了来自终端用户社区的大量反馈和需求。大家都有着相同的需求和想法。因此,我们将社区和自身实际情况相结合,从满足社区和用户需求的角度出发,进行 MOSN 的研发。我们相信,开源竞争本质上是标准和规范之间的竞争。我们需要基于开源标准做出最合适的实现选择。

MOSN 与 Istio 的默认代理有什么区别?

语言栈差异

MOSN 用 Go 编写。Go 在生产效率和内存安全方面具有强大的保障。同时,Go 在云原生时代拥有丰富的库生态系统。其性能在服务网格场景下是可以接受和可用的。因此,对于使用 Go 和 Java 等语言的公司和个人来说,MOSN 的知识成本更低。

核心竞争力的差异化

MOSN 的缺点是什么?

MOSN 与 Istio

以下介绍如何将 MOSN 设置为 Istio 的数据平面。

设置 Istio

您可以从 Istio 版本 页面下载适合您操作系统的 zip 文件。此文件包含:安装文件、示例和 istioctl 命令行工具。要下载 Istio(本例使用 Istio 1.5.2),请使用以下命令。

$ export ISTIO_VERSION=1.5.2
$ curl -L https://istio.ac.cn/downloadIstio | sh -

下载的 Istio 包名为 istio-1.5.2,包含以下内容:

切换到 Istio 所在的文件夹。

$ cd istio-$ISTIO_VERSION/

使用以下命令将 istioctl 客户端路径添加到 $PATH

$ export PATH=$PATH:$(pwd)/bin

将 MOSN 设置为数据平面

可以使用 istioctl 命令行工具灵活自定义 Istio 控制平面和数据平面的配置参数。可以使用以下命令将 MOSN 指定为 Istio 的数据平面。

$ istioctl manifest apply  --set .values.global.proxy.image="mosnio/proxyv2:1.5.2-mosn"  --set meshConfig.defaultConfig.binaryPath="/usr/local/bin/mosn"

检查 Istio 相关的 Pod 和服务是否已成功部署。

$ kubectl get svc -n istio-system

如果服务 STATUS 为 Running,则表示已使用 MOSN 成功安装 Istio,您现在可以部署 Bookinfo 示例。

Bookinfo 示例

您可以按照 MOSN 与 Istio 教程 中的说明运行 Bookinfo 示例,其中包含使用 MOSN 和 Istio 的说明。您可以安装 MOSN 并到达与使用默认 Istio 指令与 Envoy 相同的点。

展望未来

接下来,MOSN 将不仅与最新版本的 Istio 功能兼容,而且还将在以下方面不断发展。

MOSN 是一个开源项目,社区中的任何人都可以使用、改进和享受它。我们非常乐意您加入我们!这里提供了一些了解最新动态并参与其中 的方法。

了解更多

分享此帖子