You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Istio 1.13.3替代handler/instance/rule实现WebSocket配置方案咨询

解决方案:Istio 1.13.3 替代旧handler/instance/rule实现WebSocket头重写

先明确你旧配置的核心作用:

  • 对所有请求执行请求头重写:将URL查询参数中的access_token值提取后赋值给x-json-web-token请求头;若没有该参数,则设置为空字符串。
  • 配置里的dummy-blacklist相关handler/instance是无效逻辑(检查值Y是否在黑名单["X"]中,永远不会触发拦截),无需迁移。

在Istio 1.13.3中,需通过EnvoyFilter实现该头重写逻辑(VirtualService原生能力无法完成从query参数到请求头的提取映射),具体配置如下:

1. EnvoyFilter配置(核心实现)

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: websocket-header-rewrite
  namespace: istio-system
spec:
  # 若要全局生效(所有服务的sidecar),可移除workloadSelector字段
  workloadSelector:
    labels:
      istio: ingressgateway # 仅对入口网关生效,如需针对特定服务,改为对应服务标签(如app: your-erlang-service)
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: GATEWAY # 若对服务侧sidecar生效,改为SIDECAR_INBOUND
        listener:
          filterChain:
            filter:
              name: "envoy.filters.network.http_connection_manager"
              subFilter:
                name: "envoy.filters.http.router"
      patch:
        operation: INSERT_BEFORE
        value:
          name: "envoy.filters.http.lua"
          typed_config:
            "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
            inline_code: |
              function envoy_on_request(request_handle)
                -- 提取query参数中的access_token,无参数则设为空字符串
                local access_token = request_handle:query_param("access_token") or ""
                -- 替换x-json-web-token请求头
                request_handle:headers():replace("x-json-web-token", access_token)
              end

2. 配置说明

  • 生效范围控制:通过workloadSelector指定规则应用的目标,移除该字段则全局生效;针对入口网关或特定服务时,修改对应标签即可。
  • WebSocket兼容性:该逻辑在WebSocket握手的HTTP请求阶段执行,完全不影响后续的WebSocket数据流传输。
  • 逻辑匹配度:Lua脚本完全复现旧配置的头重写行为,包括无access_token参数时设为空字符串的处理。

3. 验证方法

应用配置后,可通过以下步骤验证:

  • 发起WebSocket连接请求:wscat -c "ws://your-service-domain/your-path?access_token=test-token"
  • 查看服务端接收的请求头,确认x-json-web-token值为test-token;不带access_token参数时,该头值为空。

内容的提问来源于stack exchange,提问作者Chetan Rathore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:02:55