【问题标题】:Traefik having troubles with routing routes with partially overlapping names and rewrite rulesTraefik 在路由具有部分重叠名称和重写规则的路由时遇到问题
【发布时间】:2018-10-19 08:30:00
【问题描述】:

我在设置带有重写的入口路由时遇到了麻烦。 我的入口定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mw-abcd
spec:
  rules:
  - http:
      paths:
      - path: /abcd/v1
        backend:
          serviceName: mw-abcd-v1
          servicePort: 80
      - path: /abcd/v2
        backend:
          serviceName: mw-abcd-v2
          servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mw-abcd-backward-comp
  annotations:
    traefik.ingress.kubernetes.io/rewrite-target: /abcd/v1
spec:
  rules:
  - http:
      paths:
      - path: /abcd
        backend:
          serviceName: mw-abcd-v1
          servicePort: 80

我想在这里实现的是每个没有/v1 后缀的请求都应该被重定向到带有这个后缀的后端,并且包含版本的请求应该按原样路由。发生的情况是带有/v1 的那些无论如何都会被重定向到/v1/v1。所以当务之急是先抓住第​​二条规则。我尝试通过适当的注释手动设置优先级:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mw-abcd
  annotations:
    traefik.ingress.kubernetes.io/priority: "1"
spec:
  rules:
  - http:
      paths:
      - path: /abcd/v1
        backend:
          serviceName: mw-abcd-v1
          servicePort: 80
      - path: /abcd/v2
        backend:
          serviceName: mw-abcd-v2
          servicePort: 80

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mw-abcd-backward-comp
  annotations:
    traefik.ingress.kubernetes.io/rewrite-target: /abcd/v1
    traefik.ingress.kubernetes.io/priority: "2"
spec:
  rules:
  - http:
      paths:
      - path: /abcd
        backend:
          serviceName: mw-abcd-v1
          servicePort: 80

但随后一切都将进入默认后端并重新运行 404。

有什么想法吗?

【问题讨论】:

    标签: traefik kubernetes-ingress


    【解决方案1】:

    我设法在这里找到了答案。根据有关优先级的文档(https://docs.traefik.io/basics/#priorities):

    默认情况下,路由将使用规则长度进行排序(按降序排列)(以避免路径重叠): PathPrefix:/foo;Host:foo.com (length == 28) 将在 PathPrefixStrip:/foobar ( length == 23) 将在 PathPrefix:/foo,/bar (length == 20) 之前匹配。

    我以错误的方式设置了优先级,指定的数字必须足够大(大于其他路由的长度)才能覆盖默认行为。所以我最终得到了priority 值,例如90100

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多