Мы разрабатываем наш продукт на основе архитектуры микросервиса на базе AWS EKS. У нас есть несколько приложений, которые развернуты в EKS как отдельные контейнеры.
Мы развернули входной контроллер traefik (со службой LB в качестве ELB) и входной сервис перед всеми этими приложениями, чтобы выполнить маршрутизацию к указанным c сервисам. Это прекрасно работает. Пока все хорошо.
Мы также развернули контейнер для keycloak для аутентификации, который также работает нормально.
Теперь мы хотим интегрировать traefik с keycloak, чтобы любой запрос, приходящий к traefik, должен go обрабатывать keycloak для auth / SSO, а затем перенаправляться на конкретную службу, для которой был исходный вызов.
Это та часть, где мы пытаемся добиться какого-либо прогресса. Сначала несколько сомнений:
1) Существует traefik forward-auth. Можно ли это использовать здесь? Любой пример / ссылка будет оценена ESP. если это для kubernetes.
2) Есть Keycloak-Gatekeeper. Насколько я читал об этом, он развернут как вспомогательная машина для основных приложений и выполняет всю работу по аутентификации. Моя проблема в том, что в дизайне бокового автомобиля у каждого приложения будет свой привратник. Поэтому, войдя в приложение или службу, пользователь должен снова пройти аутентификацию, если он хочет получить доступ к другому приложению. Мы не хотим этого, мы хотим, чтобы сеанс единого входа был применим ко всем приложениям.
Во-вторых, как мы можем дать динамический c upstream-url в конфигурации привратника, например / service1 должен автоматически перенаправить привратник на service1 и аналогично для service2 и так далее.
Мы не можем решить, какой путь к go. Существует ограниченная документация для обоих подходов, в основном для развертывания kubernetes. Есть ли другой подход, который мы можем использовать здесь?
Пожалуйста, помогите. Дайте мне знать, если вам нужна дополнительная информация.
ОБНОВЛЕНИЕ 1:
Пока я продолжил работу с ключом-привратником. Я поставил его как коляску к моей стручке кибаны. Ниже приведена часть 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 - это сервис кластера IP для приложения 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?. .) Для аутентификации.
Я также в логах привратника, что он успешно выбирает oid c конфигурации. Но после того, как я нажал на ссылку, в логах привратника возникает следующая ошибка:
{"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
Что здесь может быть не так? Пожалуйста, помогите.