Envoy Gateway 实战:使用 Wasm 扩展增强网关功能

Envoy Gateway 实战:使用 Wasm 扩展增强网关功能

【免费下载链接】gateway Manages Envoy Proxy as a Standalone or Kubernetes-based Application Gateway 【免费下载链接】gateway 项目地址: https://gitcode.com/gh_mirrors/gate/gateway

什么是 Wasm 扩展

WebAssembly(简称 Wasm)是一种可移植、体积小、加载快且兼容性好的二进制指令格式。在 Envoy Gateway 中,Wasm 扩展允许开发者在不修改 Envoy Gateway 二进制文件的情况下,通过自定义代码来扩展网关的功能,实现对 HTTP 请求和响应的定制化处理。

Wasm 扩展的优势

  1. 安全隔离:Wasm 运行在沙箱环境中,与主程序隔离
  2. 多语言支持:可以使用 C++、Rust、AssemblyScript 或 TinyGo 等语言编写
  3. 热更新:无需重启网关即可更新扩展逻辑
  4. 高性能:接近原生代码的执行效率

准备工作

在开始之前,请确保已经完成以下准备工作:

  1. 已安装 Envoy Gateway 并部署示例清单
  2. 能够通过 HTTP 查询到示例后端服务
  3. 验证网关状态正常:
kubectl get gateway/eg -o yaml

Wasm 扩展类型

Envoy Gateway 支持两种类型的 Wasm 扩展:

  1. HTTP Wasm 扩展:从远程 URL 获取 Wasm 模块
  2. 镜像 Wasm 扩展:将 Wasm 模块打包为 OCI 镜像,从镜像仓库获取

实战示例:添加自定义响应头

下面我们通过一个实际例子,展示如何使用 Wasm 扩展在响应中添加自定义头 x-wasm-custom: FOO

方法一:HTTP Wasm 扩展

这种方式直接从 HTTP URL 获取 Wasm 模块。

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyExtensionPolicy
metadata:
  name: wasm-test
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      name: backend
  wasm:
    - name: wasm-filter
      rootID: my_root_id
      code:
        type: HTTP
        http:
          url: https://example.com/path/to/envoy_filter_http_wasm_example.wasm
          sha256: 79c9f85128bb0177b6511afa85d587224efded376ac0ef76df56595f1e6315c0

关键参数说明:

  • targetRefs: 指定扩展应用的目标资源
  • name: Wasm 过滤器名称
  • rootID: Wasm 模块的根 ID
  • url: Wasm 模块的下载地址
  • sha256: 用于验证 Wasm 模块完整性的校验值

方法二:镜像 Wasm 扩展

这种方式从 OCI 镜像仓库获取 Wasm 模块。

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyExtensionPolicy
metadata:
  name: wasm-test
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      name: backend
  wasm:
    - name: wasm-filter
      rootID: my_root_id
      code:
        type: Image
        image:
          url: example-registry.com/testwasm:v0.0.1

配置 Wasm 扩展参数

可以通过 config 字段向 Wasm 扩展传递配置参数:

wasm:
  - name: wasm-filter
    rootID: my_root_id
    code:
      type: Image
      image:
        url: example-registry.com/testwasm:v0.0.1
    config:
      parameter1:
        key1: value1
        key2: value2
      parameter2: value3

使用环境变量配置

Wasm 扩展还可以共享 Envoy 进程的环境变量,这在需要传递敏感信息时特别有用:

wasm:
  - name: wasm-filter
    rootID: my_root_id
    code:
      type: Image
      image:
        url: example-registry.com/testwasm:v0.0.1
    env:
      hostKeys:
      - SECRET_API_KEY
      - CONFIG_VALUE

验证扩展效果

应用配置后,可以通过以下命令验证扩展是否生效:

  1. 确保设置了 GATEWAY_HOST 环境变量
  2. 发送测试请求:
curl -i -H "Host: www.example.com" "http://${GATEWAY_HOST}"

如果配置正确,响应中应该包含自定义头:

x-wasm-custom: FOO

清理资源

完成测试后,可以删除 Wasm 扩展策略:

kubectl delete envoyextensionpolicy/wasm-test

最佳实践

  1. 版本控制:为 Wasm 模块使用明确的版本标签
  2. 完整性校验:HTTP 方式下载时务必提供 sha256 校验值
  3. 性能测试:在生产环境部署前进行充分的性能测试
  4. 错误处理:在 Wasm 代码中实现完善的错误处理逻辑

总结

通过 Wasm 扩展,Envoy Gateway 获得了极大的灵活性,开发者可以根据业务需求定制网关行为,而无需修改核心代码。无论是简单的头部修改,还是复杂的业务逻辑,Wasm 扩展都能提供安全高效的解决方案。

希望本文能帮助你理解并开始在 Envoy Gateway 中使用 Wasm 扩展。随着 Wasm 生态的不断发展,这种扩展方式将在云原生网关领域发挥越来越重要的作用。

【免费下载链接】gateway Manages Envoy Proxy as a Standalone or Kubernetes-based Application Gateway 【免费下载链接】gateway 项目地址: https://gitcode.com/gh_mirrors/gate/gateway

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值