如何正确配置 Wasm 插件访问外部服务
2025/6/6大约 2 分钟
如何正确配置 Wasm 插件访问外部服务
背景
现在 Higress 很多 Wasm 插件的功能都涉及到访问外部服务,从 Redis 存储到大模型 API。很多时候,我们填写好配置,结果发现请求并不能正常发出,Gateway 的日志中也出现了类似 bad argument 的字样。
那么如何正确编写插件配置来保证请求能够正常工作呢?下文将为各位详细介绍。
基础知识
Higress 的数据面基于 Envoy 搭建。Wasm 插件也运行在 Envoy 当中,请求都由插件的 Envoy 宿主实际负责发起。所有请求的目标必须为 Envoy 内的一个服务,而并非任意一个 IP 或者域名。而我们需要配置的所谓 serviceName 和 servicePort 就是这个对 Envoy 可见的 Service 的对应信息。
配置流程
1. 创建服务来源
- 打开 Higress Console
- 进入“服务来源”页面
- 点击“创建服务来源”按钮
- 如果使用 IP 连接目标服务
- 类型选择“固定地址”
- 根据提示填入服务地址,即
IP:端口
- 如果使用域名或者主机名连接目标服务
- 类型选择“DNS域名”
- 端口填入目标服务的访问端口
- 域名列表填入目标服务的域名或主机名
- 根据实际情况选择目标服务的协议。如果目标服务使用 TCP 协议访问,则此处选择 HTTP 即可。
- 点击“保存”
- 进入“服务列表”页面,记录新增的目标服务名称(类似 xxx.static 或 xxx.dns)和端口信息
2. 让服务对 Envoy 可见
截止 2.0.7 版本,在默认配置下,Higress 只会下发配置了路由的服务至 Envoy。以下有两种方法可以让我们的目标服务对 Envoy 可见。
方法 1:配置占位路由
- 打开 Higress Console
- 进入“路由配置”页面
- 点击“创建路由”按钮
- 按照以下配置填写路由表单:
- 名称任意,可以考虑使用类似“xxx-dummy-route”之类的名称
- 域名留空
- 匹配规则任意,可以考虑使用“前缀匹配 + /xxx-dummy-route”的配置
- 请求头设置一个绝对不会匹配到的规则,例如:“never-matched-header: nevery-matched”
- 服务选择之前配置的目标服务
- 点击“保存”
方法 2. 修改配置下发全部服务
本方法供使用 helm 安装的 Higress 实例选择使用。将 global.onlyPushRouteCluster 参数设置为 false 更新安装配置即可。
相关文档:https://higress.cn/docs/latest/ops/deploy-by-helm/#常用安装参数