基于路径的路由将 Traefik 作为入口控制器发出问题



我正在经历看起来像配置的问题!我在 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。

您可以添加 主机匹配器到混合。这样,后端的命名空间 除了路径之外,还基于主机发生。

匹配器的完整列表及其描述可在此处找到

相关内容

  • 没有找到相关文章

最新更新