我正在经历看起来像配置的问题!我在 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 替换路径标头。用于映射到 AWS Lambda 或 Google Cloud Functions。ReplacePathRegex
:^/api/v2/(.*) /api/$1
:用正则表达式替换路径,并将旧路径添加到 X 替换路径标头。将正则表达式和替换替换为空格。
要路由请求,应使用匹配器:
匹配器规则确定是否应将特定请求转发到后端。
用 、(逗号(分隔多个规则值,以启用任何语义(即,如果任何规则匹配,则转发请求(。不适用于标头和标头正则表达式。
用 分隔多个规则值;(分号(以启用所有语义(即,如果所有规则都匹配,则转发请求(。
###Path 匹配器使用指南 本节说明何时使用各种路径匹配器。
如果您的后端仅侦听确切的路径,请使用
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
特雷菲克可能无法联想到的 具有相同的后端(。X-Forwarded-Prefix
标头(自 可以查询 Traefik 1.3( 以动态构建此类 URL。您可以添加 主机匹配器到混合。这样,后端的命名空间 除了路径之外,还基于主机发生。
匹配器的完整列表及其描述可在此处找到