我们正在 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
这里可能有什么问题?请帮忙。