当前位置: 首页 > article >正文

使用envoyfilter添加请求头

该envoyfilter实现了这样一个功能,如果请求头中含有Sw8,则添加请求头HasSw8: true。

1. 内嵌lua脚本

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: add-header-filter
  namespace: demo-bookinfo  # 可根据实际情况调整命名空间
spec:
  workloadSelector:
    # 应用到的工作负载,若要应用到所有工作负载,可省略 workloadSelector
    labels:
      app: servicea
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_INBOUND  # 应用到入方向流量
        proxy:
          proxyVersion: '^1\.19.*'  # 匹配特定版本的 Istio
        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"
            inlineCode: |
              function envoy_on_request(request_handle)
                  request_handle:headers():add("Example-Header", "default-value")
                  local sw8_header = request_handle:headers():get("Sw8")
                  if sw8_header then
                      request_handle:headers():add("HasSw8", "true")
                  end
              end

2. 引入外部文件

先将lua脚本文件放到istio-proxy容器指定目录下(可以通过configmap)。

lua

-- 文件路径: /etc/envoy/lua/add_header.lua

function envoy_on_request(request_handle)
    -- 添加一个默认的 header,例如 Example-Header: default-value
    request_handle:headers():add("Example-Header", "default-value")
    
    -- 检查是否存在 Sw8 header
    local sw8_header = request_handle:headers():get("Sw8")
    if sw8_header then
        -- 如果存在 Sw8,添加 HasSw8: true
        request_handle:headers():add("HasSw8", "true")
    end
end

envoyfilter:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: lua-header-filter
  namespace: demo-bookinfo
spec:
  workloadSelector:
    labels:
      app: servicea
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: 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: |
              -- 加载外部 Lua 文件
              local lua_script = assert(loadfile("/var/lua/add_header.lua"))
              lua_script()


http://www.kler.cn/a/451818.html

相关文章:

  • 关于科研中使用linux服务器的集锦
  • STM32-笔记11-手写带操作系统的延时函数
  • 后端接口设计
  • 【C++】设计模式
  • 低空经济的地理信息支撑:构建安全、高效的飞行管理体系
  • 中国农业科学院深圳农业基因组研究所合成生物学研究中心-随笔06
  • windows nacos安装配置
  • 反应力场的生成物、反应路径分析方法
  • unity弹出新的类似独立场景窗口独立运行一般怎么实现?
  • 【文档搜索引擎】搜索模块的完整实现
  • docker 部署HivisionIDPhotos实现证件照制作
  • springboot/ssm太原学院商铺管理系统Java代码编写web在线购物商城
  • dolphinscheduler服务RPC负载均衡源码解析(二)基于多种不同算法的负载均衡策略实现源码解析
  • 一文掌握如何编写可重复执行的SQL
  • Day55 图论part05
  • 【uniapp】支付宝付款成功后怎么调回自定义页面
  • 51c大模型~合集96
  • vue2版本elementUI的clearable属性和DateTimePicker 下拉框的清空功能冲突
  • MFC/C++学习系列之简单记录1——错误解决与Dialog移植
  • 【hackmymv】emma靶机wp
  • 如何在Facebook发布Reels?简单易懂的操作指南
  • openjdk17 中 klass 数组 在元空间内存分配
  • EMS从0到1之数据采集
  • 08. 基于docker-compose部署LNMP架构
  • Debug的使用
  • 19、vue3组件通信