Мы разрабатываем наш продукт на основе корпоративной микросервисной архитектуры на базе AWS EKS. У нас есть несколько приложений, которые развернуты как отдельные контейнеры на EKS.
Мы развернули входной контроллер traefik (с сервисом LB как ELB) и входящий сервис перед всеми этими приложениями, чтобы выполнить маршрутизацию к конкретным сервисам. Это прекрасно работает. Пока все хорошо.
Мы также развернули контейнер keycloak для аутентификации, который также отлично работает.
Теперь мы хотим интегрировать traefik с keycloak, чтобы любой запрос, приходящий на traefik, направлялся в keycloak для аутентификации / SSO, а затем перенаправлялся на конкретную службу, для которой был исходный вызов.
Это часть, в которой мы находимся. изо всех сил пытается добиться прогресса. Сначала немного сомнений:
1) Есть траэфик forward-auth. Можно ли это здесь использовать? Любой пример / ссылка будет оценена, особенно. если это для кубернетов.
2) Есть ключик-привратник. Насколько я читал об этом, он развернут как побочный к основным приложениям и выполняет всю работу по аутентификации. Моя проблема заключается в том, что в дизайне боковых автомобилей каждое приложение будет иметь собственный привратник. Поэтому после входа в приложение или службу пользователю необходимо снова пройти аутентификацию, если он хочет получить доступ к другому приложению. Мы не хотим этого, мы хотим, чтобы сеанс единого входа был применим во всех приложениях.
Во-вторых, как мы можем указать динамический URL-адрес восходящего потока в конфигурации привратника, например / service1 должен автоматически перенаправлять привратник на service1, аналогично для service2 и так далее.
Мы не можем решить, по какому пути идти. Документация по обоим подходам ограничена, в основном, для развертывания кубернетов. Есть ли другой подход, который мы можем применить здесь?
Пожалуйста, помогите. Дайте мне знать, если вам понадобится дополнительная информация.
ОБНОВЛЕНИЕ 1:
А пока я пошел дальше с keycloak-gatekeeper. Я поставил его как боковую машину к моей капсуле кибаны. Ниже представлена часть yml для привратника:
containers:
- name: gatekeeper-sidecar
image: keycloak/keycloak-gatekeeper
ports:
- containerPort: 3000 # expose port 3000
args:
- --discovery-url=http://keycloak:8080/auth/realms/realm1
- --secure-cookie=false
- --enable-default-deny=true
- --client-id=Vista
- --client-secret=2f1aa7dd-2aa9-4fd0-956c-5c45b2bf2091
- --listen=0.0.0.0:3000 # listen on port 3000 on all interfaces
- --redirection-url=http://127.0.0.1:3000
- --upstream-url=http://127.0.0.1:5601
- --enable-logging=true
- --enable-json-logging=true
- --verbose=true
В моей службе входящего трафика traefik я добавил ниже (kibana - это служба clusterIP для приложения kibana, в котором есть модули kibana + gatekeeper)
- match: PathPrefix(`/path1`)
kind: Rule
services:
- name: kibana
port: 3000
middlewares:
- name: stripprefix
Теперь, когда я перехожу к https://elb_host/path1, он просто перенаправляет его https://elb_host/ouath/authorize?state=‹ ..> и выдает 404.
Я ожидаю, что он сначала перенаправит на URL-адрес аутентификации keycloak (https://elb_host/auth/realms/realm1?..) для аутентификации.
В журналах привратника также указано, что он успешно извлекает конфигурации oidc. Но после того, как я нажму URL-адрес, в журналах привратника возникает следующая ошибка:
{"level":"error","ts":1584946244.340905,"caller":"keycloak-gatekeeper/middleware.go:108","msg":"no session found in request, redirecting for authorization","error":"authentication session not found"}
{"level":"info","ts":1584946244.340992,"caller":"keycloak-gatekeeper/middleware.go:90","msg":"client
Что здесь может быть не так? Пожалуйста помоги.