如何为KeyClope配置OpenShift路由器?

如何为KeyClope配置OpenShift路由器?,openshift,keycloak,netflix-zuul,Openshift,Keycloak,Netflix Zuul,我在OpenShift中创建了两个项目 browser ---> apps/router ---> apps/gw ---> apps \ \ \ (/auth) \---> kc/router ---> kc \ ^ \----------------

我在OpenShift中创建了两个项目

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。对吧?