Traefik в Kubernetes не сохраняет путь через редирект

У меня есть Traefik на Kubernetes, который действует как балансировщик входящего трафика и нагрузки. У меня есть такая настройка входа:

{
    "apiVersion": "extensions/v1beta1",
    "kind": "Ingress",
    "metadata": {
        "name": "nppl-ingress",
        "annotations": {
            "kubernetes.io/ingress.class": "traefik",
            "traefik.frontend.rule.type": "PathPrefixStrip"
        }
    },
    "spec": {
        "rules": [
            {
                "host": "" ,
                "http": {
                    "paths": [
                        {
                            "path": "/discover-service",
                            "backend": {
                                "serviceName": "discover-service",
                                "servicePort": "discover-port"
                            }
                        },
                        {
                            "path": "/config-server",
                            "backend": {
                                "serviceName": "config-server",
                                "servicePort": "config-port"
                            }
                        }

                    ]
                }
            }
        ]
    }
}

Когда, например, я нажимаю "http://IP/config-server", потому что у меня есть базовый auth в этой службе, служба выполняет перенаправление через "http://IP/login", поэтому я получаю 404, но Я ожидал «http://IP/config-server/login». Что не так с моей конфигурацией? Я также пробовал «PathPrefix» и «Путь» для типа правила, но это не сработало. Мне нужно сохранить базовый путь, когда мои службы выполняют перенаправления.


person Justin    schedule 28.09.2018    source источник


Ответы (1)


Проблема здесь в том, что PathPrefixStrip удаляет /config-server и изначально перенаправляет запрос на ваш сервер с помощью всего /. Однако, когда ваш бэкэнд перенаправляет это новый запрос, Ingress не понимает его к / или /login. Вы можете создать два Ingress для каждого бэкэнда и использовать один бэкэнд в каждом с путем к /. Но это будет означать добавление нового класса ingress и хорошая новость в том, что Traefik поддерживает его . Вы также можете попробовать вход nginx с --ingress-class вариант.

Вы можете найти дополнительную информацию о том, как создать несколько контроллеров входящего трафика здесь

Если вам нужен один Ingress, это также будет сложно, поскольку вам, возможно, придется добавить логику в свое приложение, например, для понимания пути /config-server.

person Rico    schedule 28.09.2018
comment
Не могли бы вы привести пример? Я сопоставил / в config-server, поэтому теперь у меня есть два входа с / path и / config-server path, но в / у меня была панель инструментов traefik, которая теперь больше не отображается. - person Justin; 28.09.2018
comment
Итак, добавили подробностей? Не могли бы вы использовать вход nginx? Вы можете изменить ingress class, что позволит вам использовать несколько входов. - person Rico; 28.09.2018
comment
Кроме того, открыл билет для Traefik. - person Rico; 28.09.2018
comment
не могли бы вы привести пример создания двух входов для каждого бэкэнда? В любом случае спасибо за билет! - person Justin; 01.10.2018
comment
@Justin добавил больше деталей. В основном некоторая информация здесь - person Rico; 01.10.2018