У меня проблемы с настройкой входных маршрутов при перезаписи. Мои определения входящего трафика:
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.
Есть идеи, что здесь не так?
Мне удалось найти здесь ответ. Согласно документации о приоритетах (https://docs.traefik.io/basics/#priorities):
By default, routes will be sorted (in descending order) using rules length (to avoid path overlap): PathPrefix:/foo;Host:foo.com (length == 28) will be matched before PathPrefixStrip:/foobar (length == 23) will be matched before PathPrefix:/foo,/bar (length == 20).
Я неправильно устанавливал приоритеты, указанное число должно быть достаточно большим (больше, чем длина других маршрутов), чтобы перезаписать поведение по умолчанию. В итоге я получил значения priority
, такие как 90
и 100
.