0

我们正在 AWS EKS 上开发基于企业微服务架构的产品。我们有几个应用程序作为单独的容器部署在 EKS 上。
我们在所有这些应用程序前面部署了 traefik 入口控制器(LB 服务作为 ELB)和入口服务,以路由到特定服务。这工作得很好。到目前为止,一切都很好。
我们还为身份验证部署了 keycloak 容器,它也可以正常工作。

现在,我们希望将 traefik 与 keycloak 集成,以便任何到达 traefik 的请求都应该转到 keycloak 进行身份验证/SSO,然后重定向到原始调用所在的特定服务。
这是我们正在努力取得任何进展的部分。首先有几个疑问:

1)有traefik forward-auth。这个可以用在这里吗?任何示例/链接将不胜感激,尤其是。如果是用于 Kubernetes。
2)有keycloak-gatekeeper。据我了解,它被部署为主要应用程序的侧车并完成所有身份验证工作。我的问题是,在侧车设计中,每个应用程序都有自己的看门人。所以一旦登录到一个应用程序或服务,如果他想访问不同的应用程序,用户需要再次进行身份验证。我们不希望这样,我们希望 SSO 会话适用于应用程序。
其次,我们如何在网守配置中提供动态的上游 URL,例如 /service1 应该自动重定向到网守到 service1 和类似的 service2 等等。

我们无法决定走哪条路。这两种方法的文档都很有限,主要用于 Kubernetes 部署。我们可以在这里采取任何其他方法吗?
请帮忙。如果您需要更多详细信息,请告诉我。

更新1:
现在,我继续使用keycloak-gatekeeper。我把它作为我的 kibana 吊舱的边车。以下是网守的 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 是 kibana 应用程序的 clusterIP 服务,它具有 kibana + gatekeeper pods)

- match: PathPrefix(`/path1`)
    kind: Rule
    services:
    - name: kibana
      port: 3000
    middlewares:
      - name: stripprefix

现在,每当我浏览到https://elb_host/path1时,它只会将其重定向到https://elb_host/ouath/authorize?state= <..> 并抛出 404。
我希望它首先重定向到 keycloak auth url ( 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  

这里可能有什么问题?请帮忙。

4

1 回答 1

0

终于设法解决了这个问题。两个选项:
1)要么定义入口 /oauth 路由到 keycloak gatekeper 本身
2)要么在你的网守配置中有 --base-uri=/path1。这会将 /path1 添加到您的所有重定向网址,这些网址将根据您的入口进行路由

于 2020-06-17T18:39:31.437 回答