traefik ingress с аутентификацией keycloak на AWS EKS

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

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


person NumeroUno    schedule 20.03.2020    source источник
comment
Почему SSO не работает со многими привратниками?   -  person Jan Garaj    schedule 21.03.2020
comment
Я думаю, что это сработает, поскольку в конечном итоге сеанс управляется клавиатурой. Однако каков здесь правильный подход?   -  person NumeroUno    schedule 21.03.2020
comment
Может ли кто-нибудь помочь здесь?   -  person NumeroUno    schedule 25.03.2020


Ответы (1)


Наконец удалось решить вопрос. Два варианта:
1) Либо вы определяете маршрут ingress / oauth к самому привратнику keycloak;
2) или указываете --base-uri = / path1 в конфигурации вашего привратника. Это добавит / path1 ко всем вашим URL-адресам перенаправления, которые будут маршрутизироваться в соответствии с вашим входом.

person NumeroUno    schedule 17.06.2020