Jhipster - 在 docker 主机上部署除网关本身、混合 Docker 和本地部署之外的所有内容时,无法使用网关应用程序

Posted

技术标签:

【中文标题】Jhipster - 在 docker 主机上部署除网关本身、混合 Docker 和本地部署之外的所有内容时,无法使用网关应用程序【英文标题】:Jhipster - unable to Use a Gateway app when deploying everything on docker host except the Gateway itself, Mixed Docker and locally deployment 【发布时间】:2019-02-02 17:00:49 【问题描述】:

我有一些 JHipster Spring 微服务和网关项目。我将它们全部部署在使用 docker 的主机上,网关除外。我在另一台主机上启动了网关。

我使用 Keycloak 进行 OAuth 身份验证。

当我使用 docker-compose 在 docker 网络上将所有微服务、数据库和网关部署为 docker 容器时,一切正常。

但是当我只在 docker 上部署除网关之外的所有内容时它不起作用。我的意思是网关是否位于 docker 创建的网络之外。此操作的动机是我只希望我的 UI 程序员在他自己的 PC 上启动并运行网关,并使用部署在服务器主机上的微服务。只是为了方便 UI 开发,需要使用 gradle bootRun -Pprod 启动和运行这个唯一的网关。

我使用一种技术为我的 docker 网络上的每个容器分配一个单独的 IP。这种技术称为 Docker MacVLan 网络。这样主机中的每个容器在物理网络中都有一个单独的 IP 地址,并且每个容器在网络中的其他主机上都是可见的。

问题在于,在正常的 docker 部署中(当网关部署在同一主机的 docker 网络中时)一切正常。但在我成功登录后的场景中,每个微服务都返回error 401

在微服务中它说这个错误:

o.s.s.oauth2.client.OAuth2RestTemplate   : Setting request Accept header to [application/json, application/x-jackson-smile, application/cbor, application/*+json]
o.s.s.oauth2.client.OAuth2RestTemplate   : GET request for "http://keycloak:9080/auth/realms/jhipster/protocol/openid-connect/userinfo" resulted in 401 (Unauthorized); invoking error handler
n.m.b.s.o.CachedUserInfoTokenServices    : Could not fetch user details: class org.springframework.security.oauth2.client.resource.OAuth2AccessDeniedException, Unable to obtain a new access token for resource 'null'. The provider manager is not configured to support it.
p.a.OAuth2AuthenticationProcessingFilter : Authentication request failed: error="invalid_token", error_description="token string here"

它说您的令牌无效。当所有东西都部署在 docker 的同一主机中时,相同的机制才有效。是因为 Keycloak 会阻止令牌验证外部主机吗?我个人对此表示怀疑,因为它并没有阻止我成功登录网关。我刚刚检查了keycloak。通过命令-b 0.0.0.0

请帮助我通过gradle bootRun -Pprod 运行网关。

总之,我可以将我的问题改写为:我只是希望 UI 开发人员能够在其自己的 PC 中测试他的 angular/spring-gateway 项目,而其他服务使用 docker 部署在强大的服务器中(使用 Keycloak 进行身份验证)。并且不可能在 UI 开发人员自己的 PC 上部署这些其他服务。如何在 JHipster 中实现?

【问题讨论】:

【参考方案1】:

在使用网关时将 server.use-forward-headers=true 添加到您的配置中

【讨论】:

以上是关于Jhipster - 在 docker 主机上部署除网关本身、混合 Docker 和本地部署之外的所有内容时,无法使用网关应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Jhipster部署到Heroku返回404

JHipster - 在 AWS Beanstalk 中发布部署 Jhipster 注册表

在容器中运行Jenkins部署主机中的docker应用

在容器中运行Jenkins部署主机中的docker应用

在容器中运行Jenkins部署主机中的docker应用

使用 ObjectRocket 插件将带有 MongoDB 应用程序的 jHipster 部署到 Heroku