我正在经历看起来像配置问题!我在kubernetes中使用traefik作为入口控制器,我有一个入口来路由一些URL以将一些前端路由到各种后端.假设我有这样的事情:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test annotations: kubernetes.io/ingress.class: traefik traefik.frontend.rule.type: ReplacePathRegex spec: rules: - host: foo.io http: paths: - path: /api/authservice/(.*) /$1 backend: serviceName: auth servicePort: 8901 - path: /api/svcXXX/v1/files/cover/(.*) /v1/files/cover/$1 backend: serviceName: files servicePort: 8183 - path: /api/svcXXX/v1/files/image/(.*) /v1/files/image/$1 backend: serviceName: files servicePort: 8183
使用Postman(或任何其他客户端),如果我http://foo.io/api/authservice/auth/oauth/token
在查看访问日志时发出请求,它似乎被路由到http://foo.io/api/svcXXX/v1/files/image/(.*) /v1/files/image/$1
.我在访问日志中看到了这一点:
[03/Jul/2018:12:57:17 +0000] "POST /api/authservice/auth/oauth/token HTTP/1.1" 401 102 "-" "PostmanRuntime/7.1.5" 15 "foo.io/api/svcXXX/v1/files/image/(.*) /v1/files/image/$1" 37ms
难道我做错了什么 ?
ReplacePathRegex
是一个 修饰符规则.根据文件:
修饰符规则仅修改请求.它们对正在做出的路由决策没有任何影响.
以下是现有修饰符规则的列表:
AddPrefix
::/products
在将请求转发到后端之前,将路径前缀添加到现有请求路径.
ReplacePath
::/serverless-path
替换路径并将旧路径添加到X-Replaced-Path标头.用于映射到AWS Lambda或Google Cloud Functions.
ReplacePathRegex
::^/api/v2/(.*) /api/$1
使用正则表达式替换路径,并将旧路径添加到X-Replaced-Path标头.用正空格分隔正则表达式和替换.
要路由请求,您应该使用匹配器:
匹配器规则确定是否应将特定请求转发到后端.
通过(逗号)分隔多个规则值以启用任何语义(即,如果任何规则匹配则转发请求).不适用于Headers和HeadersRegexp.
将多个规则值分开; (分号)以启用所有语义(即,如果所有规则匹配,则转发请求).
路径匹配器使用指南
本节介绍何时使用各种路径匹配器.
使用
Path
,如果你的后端只的确切路径上侦听.例如,Path: /products
匹配/products
但不匹配/products/shoes
.
*Prefix*
如果您的后端侦听特定的基本路径,但也在子路径上提供请求,请使用匹配器.例如,PathPrefix: /products
匹配/products
但也/products/shoes
和/products/shirts
.由于路径按原样转发,因此您的后端应该监听/产品.
*Strip
如果您的后端侦听根路径(/)但是应该在特定前缀上路由,请使用匹配器.例如,PathPrefixStrip: /products
匹配/products
但也products/shoes
和/ 和/products/shirts
.由于路径在转发之前被剥离,因此您的后端应该监听/
.如果您的后端正在提供资产(例如,图像或Javascript文件),则可能必须返回正确构造的相对URL.继续这个例子,后端应该返回/products/shoes/image.png
(而不是/images.png
哪个Traefik可能无法与同一个后端关联).的X-Forwarded-Prefix
报头(因为Traefik 1.3提供)可以查询动态地建立这样的URL.您可以添加主机匹配器,而不是仅通过路径区分后端.这样,除了路径之外,后端的命名空间基于主机发生.
可在此处找到匹配器及其说明的完整列表