searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

如何通过wasmPlugin扩展istio的功能

2023-05-23 01:19:25
146
0

Istio作为当下最流行的服务网格项目之一,几乎成为了服务网格的代名词以及事实方案,越来越多的技术人员加入对它的实践和开发,随着人们对Istio的广泛使用, 对istio原有功能的扩展也逐渐成为了热门的需求。

在1.4版本之前,Istio没有良好的机制来运行插件,为了扩展Envoy的功能,开发人员需要直接编写Envoy的C++扩展。

从1.5版本之后,Istio引入了一个名为EnvoyFilter的资源,它提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置,使用 EnvoyFilter可以修改某些字段的值,添加特定的过滤器,甚至添加全新的侦听器、集群等等,但这仍然意味着操作者必须熟悉 Envoy API 的细节以及如何有效地配置它们。

从1.12版本开始,Istio引入了WasmPlugin的API,作为一种新改进的可扩展性机制,使得我们可以将自行开发wasm模块,并以便捷灵活的方式将其添加到istio的数据平面中。具体方式如下:

1. 首先你需要有一个1.12版本以上的Istio平台,建议搭建在kuberntes集群之上。

2. 通过istio常规的资源类型来部署你的微服务应用。

3. 开发、编译和推送Wasm模块来扩展Envoy的功能

    a. 通过SDK来开发Wasm模块。 wasm支持c/c++、Rust、Go、JavaScript等多种语言,你可以根据你的需求选择合适的语言,在git上已有一些示例可供参考,https://github.com/tetratelabs/proxy-wasm-go-sdk/tree/main/examples 

    b. 编译wasm模块,以go为例,tinygo build -o main.wasm -scheduler=none -target=wasi main.go

    c. 构建wasm镜像

       

     d. 推送wasm镜像到docker镜像仓库

     e. 创建名为WasmPlugin的CR, 比如

     

      剩下的步骤将由istio自动完成,Istio 控制平面根据WasmPlugin 配置中的工作负载选择配置,将 Wasm 模块注入到指定的 Pod 中;Sidecar 中的pilot-agent从远程或本地文件中获取 Wasm 模块并将其加载到 Envoy 中运行;

     

     

       你可以定义多个WasmPlugin,每个Plugin负责某一部分功能, 需定义好 phase和priority。 单个命名空间中定义的WasmPlugin也不会影响到其他命名空间中的应用。

      由上面介绍可见,通过WasmPlugin的引入,极大的简化和便利了开发者对于Istio功能扩展的需求,目前还处于alpha阶段,相信在未来的版本中会得到逐步的增强

 

 

0条评论
0 / 1000
s****n
2文章数
0粉丝数
s****n
2 文章 | 0 粉丝