Маршрутизация на основе пути Traefik во входе kubernetes не работает должным образом - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь использовать механизм маршрутизации на основе пути, предоставленный входным контроллером Traefik в Кубернетесе, но у меня есть некоторые проблемы с перезаписью URL.

Моя [ОБНОВЛЕННАЯ] конфигурация следующая

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/auth-type: "basic"
    traefik.ingress.kubernetes.io/auth-tls-insecure: "true"
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    traefik.ingress.kubernetes.io/app-root: "/"
    traefik.ingress.kubernetes.io/rule-type: "PathPrefixStrip"
    traefik.ingress.kubernetes.io/rewrite-target: "/"
  name: webapp-ingress
  namespace: my-company
spec:
  rules:
   - host: local-ubuntu
   - http:
      paths:
      - path: /
        backend:
          serviceName: webapp
          servicePort: 80
      - path: /db
        backend:
          serviceName: db-manager
          servicePort: 8081

Трафик направляется к нужным службам, но URL все еще имеет префикс / db, когда я просматриваю журнал службы db-manager (kubernetes).Что я мог ожидать с PathPrefixStrip, так это то, что трафик будет направляться без префикса / db к контейнеру, на котором выполняется микросервис db-manager, который прослушивает / (http://db -manager: 8081 ) на стороне сервера.

Я что-то упустил?Это поддерживается traefik или только nginx?Заранее благодарим вас за отзыв.

[РЕДАКТИРОВАТЬ]

Более конкретно, я наблюдаю следующее с текущими аннотациями, которые обсуждаются ниже

  • traefik.ingress.kubernetes.io/rule-type: "PathPrefixStrip"
  • traefik.ingress.kubernetes.io / rewrite-target: "/"

URL: http://local -ubuntu / db [OK] -> 200

Затем загружаются другие ресурсы, но они указывают на неправильный базовый URL

Пример:

URL ресурса: http://local -ubuntu / public / css / bootstrap.min.css

Но это должно быть: http://local -ubuntu / db / public / css / bootstrap.min.css (работает, когда я пробовал вручную)

Я не уверен, чего мне не хватает в текущей конфигурации.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Большое спасибо за вашу помощь в этом вопросе.

Прежде всего мне пришлось решить проблему с форматированием аннотаций в файле yaml.

Все инструкции сtraefik в качестве префикса должен быть заключен в двойные кавычки

Пример:

  • traefik.ingress.kubernetes.io / rule-type: PathPrefixStrip [Не
    правильно]
  • traefik.ingress.kubernetes.io / type-type: "PathPrefixStrip"
    [правильно]

В первом случае ни одна из аннотаций не была отражена во входе.

Но я все еще не могу правильно маршрутизировать трафик.При текущей конфигурации возвращается только обслуживаемый ресурс.Ни один из js, css или других ресурсов не загружен.Поэтому мне интересно, нужно ли мне использовать инструкцию traefik.frontend.redirect.regex .

0 голосов
/ 09 августа 2019

Попробуйте выполнить одно из следующих действий:

traefik.ingress.kubernetes.io / type-type: "PathPrefixStrip"

traefik.ingress.kubernetes.io / rewrite-target: "/

Они оба достигают схожих результатов, но они различаются, и у них немного другое поведение.

Я бы прочитал больше в нашей документации для различий: (https://docs.traefik.io/v1.7/configuration/backends/kubernetes/#general-annotations)

Что касается вашей второй проблемы:

URL ресурса: local-ubuntu / public / css / bootstrap.min.css

Но это должно быть: local-ubuntu / db / public / css / bootstrap.min.css (который работает, когда я пытался

Вы удалили этот путь из запроса ... ваша служба БД никогда не видит БДпрефикс ... Как он должен знать, чтобы добавить их обратно?

Вам нужно установить корневой URL в вашем веб-приложении для обработки зачищенного пути.

Как только вы это сделаете,вам может даже не понадобиться вообще удалять путь и просто оставить его как есть. Если вы не можете установить базовый URL для своего приложения, yВозможно, вам не удастся использовать каталоги для маршрутизации, и вместо этого вам придется использовать субдомены.

0 голосов
/ 01 февраля 2019

Что касается статического содержимого, которое не обрабатывается, в документации говорится следующее:

Используйте * Strip matcher, если ваш бэкэнд прослушивает корневой путь (/), но должен маршрутизироваться по определенному префиксу,Например, PathPrefixStrip: / products будет соответствовать / products, а также / products / shoes и / products / shirts.Поскольку путь перед пересылкой удаляется, ожидается, что ваш бэкэнд будет прослушивать /.Если ваш бэкэнд обслуживает ресурсы (например, изображения или файлы Javascript), скорее всего, он должен возвращать правильно сконструированные относительные URL-адреса.Продолжая этот пример, бэкэнд должен возвращать /products/shoes/image.png (а не /images.png, который Traefik, скорее всего, не сможет связать с тем же бэкендом).Заголовок X-Forwarded-Prefix (доступный с Traefik 1.3) можно запросить для динамического создания таких URL.

...