我们正在开发基于AWS EKS的企业微服务体系结构。我们有几个应用程序作为单独的容器部署在EKS上。
我们在所有这些应用程序前面部署了traefik入口控制器( LB服务作为ELB)和入口服务,以完成特定服务的路由。这个很好用。到目前一切尚好。
我们还为auth部署了keycloak容器,这也很好。
现在,我们希望将traefik与keycloak集成在一起,以便对traefik提出的任何请求都应该在auth/SSO中转到keycloak,然后重定向到原始调用所在的特定服务。
这是我们正在努力取得任何进展的地方。首先,很少有人怀疑:
( 1)前方有traefik。这个能在这里用吗?如有任何例子/链接,将不胜感激。如果是库伯内特斯的话。
2)有钥匙斗篷守门人。据我所知,它是作为侧车部署到主要应用程序,并完成所有的工作。我的问题是,在侧车设计中,每个应用程序都有自己的看门人。因此,一旦登录到应用程序或服务,用户需要再次认证,如果他想访问不同的应用。我们不想这样,我们希望SSO会话能够适用于不同的应用程序。
其次,如何在守门员配置中给出动态的上游url,例如/service1应该自动重定向到service1,而对于service2则是如此。
我们无法决定走哪条路。这两种方法的文件有限,主要用于kubernetes的部署。我们在这里还有什么别的办法吗?
请帮帮忙。如果你需要更多的细节,请告诉我。
UPDATE1:
现在,我和钥匙斗篷守门人一起走了。我把它作为侧车放在我的基巴纳舱里。下面是给看门人的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 +守门员吊舱)
- 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 这里有什么问题吗?请帮帮忙。
发布于 2020-06-17 18:39:31
终于解决了这个问题。有两种选择:
1)您可以定义进入/oauth路由到keycloak网关本身。
或者在你的守护者配置中有-基-uri=/path1 1。这将将/path1添加到所有重定向url中,这些url将根据您的入口进行路由。
https://stackoverflow.com/questions/60778479
复制相似问题