Traefik 2.2.1路径匹配失效 带/service前缀请求无法路由到指定后端
Traefik IngressRoute 路由规则配置修正方案
问题根因
你的配置存在两处核心错误:
- 路径匹配规则使用错误:
Path(/service)属于精确匹配,仅能匹配路径完全等于/service的请求,无法匹配/service/xxx这类带子路径的请求 - 路由优先级缺失:Traefik路由默认按规则长度自动计算优先级,兜底的Host规则如果先命中,会直接转发到前端服务,导致/service前缀的规则不生效
修正后配置
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: creationTimestamp: '2021-09-26T09:10:02Z' generation: 4 name: uat-zhuolian-manage-route namespace: dabai-uat resourceVersion: '106700291' selfLink: >- /apis/traefik.containo.us/v1alpha1/namespaces/dabai-uat/ingressroutes/uat-zhuolian-manage-route uid: d0b82fab-cd6a-49f0-96dc-f6c0f381bcc5 spec: entryPoints: - web routes: # /service前缀路由规则,优先级更高 - kind: Rule match: Host(`zhuolian-pro-manage.example.com`) && PathPrefix(`/service`) priority: 100 services: - name: soa-zhuolian-service port: 11032 # 可选:如果后端服务接口本身不带/service前缀,打开下面的中间件配置,去掉前缀再转发 # middlewares: # - name: strip-service-prefix # 默认兜底路由 - kind: Rule match: Host(`zhuolian-pro-manage.example.com`) priority: 10 services: - name: be-zhuolian-frontend port: 80
可选:去掉/service前缀的中间件配置
如果你的soa-zhuolian-service服务的接口路径不包含/service前缀,需要额外部署以下Middleware资源:
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: strip-service-prefix namespace: dabai-uat spec: stripPrefix: prefixes: - /service
改动说明
- 将
Path(/service)替换为PathPrefix(/service):匹配所有以/service开头的路径,覆盖你的测试请求场景 - 显式配置
priority参数:数值越大优先级越高,确保更精确的/service规则优先于兜底的Host规则触发 - 按需添加StripPrefix中间件:避免后端收到带额外/service前缀的请求导致404
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

