BTCBAM中文网

领取MOLI红包

详解如何使用Golang扩展Envoy

发布日期:2025-01-03 18:11    点击次数:54

一、背景 主要介绍用 Golang 扩展 Envoy 的极速开发体验 MoE(MOSN on Envoy)是 MOSN 团队提出的技术架构,经过近两年的发展,在蚂蚁内部已经得到了很好的验证;并且去年我们也将底层的 Envoy Go 七层扩展贡献了 Envoy 官方,MOSN 也初步支持了使用 Envoy 作为网络底座的能力。 借此准备写一系列的文章,逐一介绍这里面的技术。本文作为开篇,将重点介绍 MoE 中的基础技术,Envoy Go 扩展。 二、FAQ 开始前,先给大家解答下几个基本的问题: 1、MoE 与 Envoy Go 扩展有什么区别? A:MoE 是技术架构,Envoy Go 扩展是连接 MOSN 和 Envoy 的基础技术。 2、Envoy Go 扩展,与用 Go 来编译 Wasm 有什么区别? A:Envoy Go 支持 Go 语言的所有特性,包括 Goroutine;Go Wasm 则只能使用少量的 Go 语言特性,尤其是没有 Goroutine 的支持。 3、Go 是静态链接到 Envoy 么? A:不是的,Go 扩展编译成为 so,Envoy 动态加载 so,不需要重新编译 Envoy 4、Envoy Go 支持流式处理么? A:支持的。 由于 Go 扩展提供的是底层的 API,非常的灵活,使用上相对会稍微复杂一些;如果只想简单的使用,可以使用 MOSN 的 filter,后面我们也会介绍。 三、需求 我们先实现一个小需求,来实际体会一下: 对请求需要进行验签,大致是从 URI 上的某些参数,以及私钥计算一个 token,然后和 header 中的 token 进行对比,对不上就返回 403。 很简单的需求,仅仅作为示例,主要是体验一下过程。🧸 四、代码实现 完整的代码可以看 envoy-go-filter-example[1] 这个仓库,这里摘录最核心的两个函数: DecodeHeaders 是扩展 filter 必须实现的方法,我们就是在这个阶段对请求 header 进行校验。 verify 是校验函数,这里的 RequestHeaderMap 是 Go 扩展提供的 interface,我们可以通过它来读写 header,其他都是常见的 Go 代码写法。 五、编译 编译很简单,与常见的 Go 编译一样,这里我们使用 Golang 官方的 docker 镜像来编译: Go 编译还是很快的,只需要几秒钟,当前目录下,就会产生一个 libgolang.so 的文件。反观 Envoy 的编译速度,一次全量编译动辄几十分钟,或者上小时的,这幸福感提升了不止一个档次。🥰 六、运行 我们可以使用 Envoy 官方提供的镜像来运行,如下示例: 只需要把上一步编译的 libgolang.so 和 envoy.yaml 挂载进去就可以了。 值得一提的是,我们需要在 envoy.yaml 配置中启用 Go 扩展,具体是这段配置: 跑起来之后,我们测试一下: 符合期望,是不是很简单呢?👀 七、后续 什么?这个示例太简单? 是的,这里主要是体验下开发流程,下篇我们将再介绍更高级的玩法: Go 接受来自 Envoy 侧的配置、异步 Goroutine,以及与 Istio 配合的用法。 |相关链接| [1]envoy-go-filter-example 仓库:https://github.com/doujiang24/envoy-go-filter-example/tree/master/example-1 以上就是详解如何使用Golang扩展Envoy的详细内容,更多关于Golang扩展Envoy的资料请关注脚本之家其它相关文章!

热点资讯
相关资讯


Powered by BTCBAM中文网 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024