вход в трафик с аутентификацией keycloak на AWS EKS - PullRequest
0 голосов
/ 20 марта 2020

Мы разрабатываем наш продукт на основе архитектуры микросервиса на базе 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  

Что здесь может быть не так? Пожалуйста, помогите.

...