如何为KeyClope配置OpenShift路由器?
我在OpenShift中创建了两个项目如何为KeyClope配置OpenShift路由器?,openshift,keycloak,netflix-zuul,Openshift,Keycloak,Netflix Zuul,我在OpenShift中创建了两个项目 browser ---> apps/router ---> apps/gw ---> apps \ \ \ (/auth) \---> kc/router ---> kc \ ^ \----------------
browser ---> apps/router ---> apps/gw ---> apps
\ \
\ (/auth) \---> kc/router ---> kc
\ ^
\-----------------------------------/
(kc login page)
第一个项目(应用程序)包含一个微服务应用程序,还有一个使用Netflix Zuul代理实现的网关。第二个项目(kc)有一个正在运行的KeyClope实例,也可以通过配置的路由从外部访问该实例
应用程序中的Zuul代理具有从/auth到kc/auth的路由
用户界面使用KeyClope适配器进行身份验证。当我调用apps/ui时,SPA被提取,我被重定向到apps/auth进行身份验证。在给出用户名/密码后,我应该重定向回UI,但它不起作用。我得到一个错误页面,URL指向kc。在KeyClope日志中,我得到以下条目:
10:15:24969 WARN[org.keydeport.events](默认任务2)type=LOGIN\u ERROR,realmId=NUSS,clientId=null,userId=null,ipAddress=10.3.47.12,ERROR=invalid\u code
我从KeyClope docu中发现,代理配置一定有问题。当我调用apps/auth/realms/master/.well-known/openid配置时,所有URL都指向kc。在docu关于代理配置的部分中,它说这个响应实际上应该包含应用程序的URL
我认为kc中配置的到KeyClope的路由将用kc替换x-forwarded-host头和其他代理头,而不仅仅是保留应用程序中已经设置的头。我已经验证了离开Zuul代理的请求是否包含正确的代理转发头
我现在有几个问题:
- 我必须做什么才能让KeyClope在单独的项目中工作
- 我的分析正确吗
- 如何最终在kc中配置路由以不替换代理标头
- 最终是否有一个最佳实践来实现这一点
- 我设法让它工作起来。但我必须安装一个自定义路由器配置()。我配置了x-forwarded-host和x-forwarded-port报头在通过路由器时,如果存在,则不受影响
# preserve X-Forwarded-Host Header if already set
acl no_xhost res.hdr(X-Forwarded-Host) -m len 0
http-request set-header X-Forwarded-Host %[req.hdr(host)] if no_xhost
# preserve X-Forwarded-Port Header if already set
acl no_xport res.hdr(X-Forwarded-Port) -m len 0
http-request set-header X-Forwarded-Port %[dst_port] if no_xport
我还必须在Zuul config中设置以下属性
zuul.add-proxy-headers=true
我想知道为什么默认路由器配置会覆盖头。
一般来说,我会说,如果一个请求通过了各种反向代理,那么在传递它们时不应该更改代理头。否则,链末端的服务永远无法知道原始请求使用了什么URL。对吧?