Traefik v2如何配置对所有服务生效的指定IP匹配Header添加规则
实现方案
完全可以仅定义一次规则实现全局生效,不需要给每个路由单独配置,也不需要创建通配目标服务的路由,更合理的方案是将带IP匹配逻辑的中间件绑定到入口点作为默认中间件,所有走该入口点的被代理服务都会自动应用该规则。
你之前的写法是单独定义了一条无目标服务的路由,Traefik 中路由的核心作用是匹配请求后转发到对应上游服务,缺少service配置的路由本身就无法正常参与请求转发流程,自然不会生效。
步骤1:编写带匹配逻辑的中间件(动态配置文件)
http: middlewares: legacy-headers: headers: customRequestHeaders: # 仅当客户端IP为指定值时才添加该Header X-dco-role: '{{ if eq .Request.ClientIP "192.168.1.1" }}DCO{{ end }}'
如果需要匹配网段,可修改表达式如下:
X-dco-role: '{{ if netCIDRContains "192.168.1.0/24" .Request.ClientIP }}DCO{{ end }}'
步骤2:绑定中间件到入口点全局生效(静态配置文件,即traefik.yml)
entryPoints: web: address: ":80" http: middlewares: # 所有走web入口点的请求都会自动应用该中间件,不需要修改任何业务路由配置 - legacy-headers@file
该方案对Docker/K8s等服务发现自动生成的路由同样生效,不需要额外修改服务的标注配置。
内容的提问来源于stack exchange,提问作者Marco Stramezzi
相关产品推荐
相关产品推荐

