基于路径的路由将Traefik用作入口控制器

时间:2018-07-03 13:54:16

标签: kubernetes traefik kubernetes-ingress traefik-ingress

我正在解决看起来像配置问题的问题!我正在使用traefik作为kubernetes中的入口控制器,并且我有一个入口来路由一些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

使用邮递员(或任何其他客户端),如果我在访问日志中查找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

我做错什么了吗?

1 个答案:

答案 0 :(得分:5)

ReplacePathRegex是一个修饰符规则。根据{{​​3}}:

  

修改器规则仅修改请求。它们对路由选择决策没有任何影响。

     

以下是现有修改器规则的列表:

     
      
  • AddPrefix/products:在将请求转发到后端之前,将路径前缀添加到现有请求路径。
  •   
  • ReplacePath/serverless-path:替换路径,并将旧路径添加到X-Replaced-Path标头中。对于映射到AWS Lambda或Google Cloud Functions有用。
  •   
  • ReplacePathRegex^/api/v2/(.*) /api/$1:用正则表达式替换路径,并将旧路径添加到X-Replaced-Path标头中。将正则表达式分隔,并用空格代替。
  •   

要路由请求,您应该使用documentation

  

匹配器规则确定是否应将特定请求转发到后端。

     

用,(逗号)分隔多个规则值,以启用ANY语义(即,如果有任何规则匹配,则转发请求)。不适用于Headers和HeadersRegexp。

     

用;分隔多个规则值(分号)以启用所有语义(即,如果所有规则均匹配,则转发请求)。

     

路径匹配器使用指南

     

本节说明何时使用各种路径匹配器。

     

如果您的后端仅侦听确切路径,请使用Path。例如,   Path: /products将匹配/products,但不匹配/products/shoes

     

如果您的后端在特定基础上进行侦听,请使用*Prefix*匹配器   路径,但也可以在子路径上提供请求。例如,PathPrefix: /products会匹配/products,但也会匹配/products/shoes,并且   /products/shirts。由于路径是按原样转发的,因此您的后端是   希望能收听/ products。

     

如果后端在根路径(/)上侦听,则使用*Strip匹配器,但是   应该可以在特定前缀上路由。例如,   PathPrefixStrip: /products将与/products匹配,但也   / products/shoes/products/shirts。由于路径先被剥离   要转发,您的后端应该在/上侦听。如果你的   后端正在提供资产(例如图像或Javascript文件),机会   是否必须返回正确构造的相对URL。继续   在该示例中,后端应返回/products/shoes/image.png(并且   不是/images.png,Traefik可能无法将其关联   具有相同的后端)。 X-Forwarded-Prefix标头(自   可以查询Traefik 1.3)来动态构建此类URL。

     

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

匹配器及其描述的完整列表可在matchers

中找到