Проблемы маршрутизации на основе пути Traefik как Ingress Controller
Я бегу через то, что выглядит как проблема конфигурации! Я использую 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
Использование 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
Я делаю что-то неправильно?
1 ответ
ReplacePathRegex
является правилом модификатора. Согласно документации:
Правила-модификаторы только изменяют запрос. Они не оказывают никакого влияния на принимаемые решения о маршрутизации.
Ниже приведен список существующих правил модификаторов:
AddPrefix
:/products
: Добавить префикс пути к существующему пути запроса до пересылки запроса в серверную часть.ReplacePath
:/serverless-path
: Заменяет путь и добавляет старый путь в заголовок X-Replaced-Path. Полезно для сопоставления с функциями AWS Lambda или Google Cloud.ReplacePathRegex
:^/api/v2/(.*) /api/$1
: Заменяет путь регулярным выражением и добавляет старый путь в заголовок X-Replaced-Path. Разделите регулярное выражение и замену пробелом.
Для маршрутизации запросов вы должны использовать соответствия:
Правила соответствия определяют, должен ли конкретный запрос быть передан бэкэнду.
Разделите несколько значений правила, (запятая), чтобы включить ЛЮБУЮ семантику (т. Е. Переслать запрос, если какое-либо правило соответствует). Не работает для Headers и HeadersRegexp.
Разделите несколько значений правил по; (точка с запятой), чтобы включить ВСЕ семантику (т. е. переслать запрос, если все правила совпадают).
Рекомендации по использованию Path Matcher
В этом разделе объясняется, когда использовать различные средства сопоставления путей.
использование
Path
если ваш сервер слушает только точный путь. Например,Path: /products
будет соответствовать/products
но нет/products/shoes
,Использовать
*Prefix*
matcher, если ваш бэкэнд прослушивает определенный базовый путь, но также обслуживает запросы по подпутям. Например,PathPrefix: /products
будет соответствовать/products
но также/products/shoes
а также/products/shirts
, Поскольку путь пересылается как есть, ожидается, что ваш бэкэнд будет прослушивать /products.Использовать
*Strip
matcher, если ваш бэкэнд прослушивает корневой путь (/), но должен маршрутизироваться с определенным префиксом. Например,PathPrefixStrip: /products
будет соответствовать/products
но также /products/shoes
а также/products/shirts
, Поскольку путь перед пересылкой удаляется, ожидается, что ваш бэкэнд прослушивает/
, Если ваш бэкэнд обслуживает ресурсы (например, изображения или файлы Javascript), скорее всего, он должен возвращать правильно сконструированные относительные URL-адреса. Продолжая пример, сервер должен вернуть/products/shoes/image.png
(и не/images.png
который Traefik, скорее всего, не сможет связать с одним и тем же бэкэндом).X-Forwarded-Prefix
header (доступен начиная с Traefik 1.3) может быть запрошен для динамического создания таких URL.Вместо того, чтобы различать свои бэкэнды только по пути, вы можете добавить в микс Host matcher. Таким образом, пространство имен ваших бэкэндов происходит на основе хостов в дополнение к путям.
Полный список участников и их описания можно найти здесь