Istio 实战:WasmPlugin(Proxy-Wasm 插件)开发(实现限流和修改请求和响应的 header)

更多 istio 文章:Istio 专栏目录

WasmPlugin 的典型应用

  1. 限流:当前 envoy 提供的限流能力虽然比较强大,但主要提供了一些 api,在使用上对用户不够友好,且全局限流对每个请求都调用一次限流服务,性能损耗较大。因此,可以通过开发限流过滤器,提高易用性和时延
  2. 应用层协议解析:主要是能实现对 http 协议中 request 和 response 的 header 和 trailer 进行自定义开发

环境准备

proxy-wasm sdk 有支持多语言开发(点击前往),本实例以 go 语言为例(github 地址

kubernetes

kubernetes 安装省略
示例使用的 kubernetes 版本为 1.23.4

istio

istio 安装省略
示例使用的 istio 版本为 1.16.3

docker

docker 安装省略
打包镜像使用

go

go 安装省略

tinygo

此 SDK 由 TinyGo 提供支持,不支持官方的 Go 编译器。因此需要安装 tinygo(tinygo 安装指南
以 windows 安装为例,官网提供了四种安装方式
在这里插入图片描述
如下所示,下载压缩包后解压到指定位置
在这里插入图片描述
将 bin 路径添加到环境变量 Path 中
在这里插入图片描述
此时运行 tinygo version 应该输出版本信息
在这里插入图片描述

镜像仓库

推荐使用阿里云镜像仓库,主要是免费!点击前往

示例一:修改请求和响应的 header

示例代码 github 地址(点击前往
如果对您有帮助,请点个免费的 star,谢谢!

创建 go 项目

创建好文件夹后执行 go mod init go-wasm 生成依赖管理工具

添加 main.go

// 读取 wasmplugin crd 中的 pluginConfig 内容
var customData string

func (p *pluginContext) OnPluginStart(pluginConfigurationSize int) types.OnPluginStartStatus {
   
	proxywasm.LogDebug("loading plugin config")
	data, err := proxywasm.GetPluginConfiguration()
	if data == nil {
   
		return types.O
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快,把我桶也提着

如果对您有帮助欢迎支持哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值