You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3容器内访问OIDC配置端点超时问题求助

问题:Docker Swarm环境下资源服务器容器内访问OIDC配置端点超时

环境配置

  • Docker Swarm 3节点集群(所有实例处于同一网络)
  • 1台Nginx实例:负责将oauth.***请求转发至Eureka Server集群,同时处理其他DNS转发
  • 2台Eureka实例:将oauth.***请求转发至授权服务器(OIDC)
  • 1台授权服务器(OIDC)
  • 1台资源服务器(CRUD服务):在application.properties中配置了spring.security.oauth2.resourceserver.jwt.issuer-uri=https://oauth.b2beyond.org/

问题现象

浏览器可正常访问授权服务器的配置端点 https://oauth.b2beyond.org/.well-known/openid-configuration,但资源服务器容器内部访问该URL时抛出连接超时异常,核心堆栈信息显示连接超时。

已尝试的操作

  • 使用Docker栈名作为地址:问题未解决,还导致Issuer标识变为栈名
  • 在Docker Compose中添加自定义DNS配置:无效果
  • 在容器内添加/etc/hosts条目:无效果
  • 切换使用谷歌DNS(8.8.8.8):无效果
  • 容器内执行nslookup可正常解析域名,但traceroute所有跳数均无响应

解决方案建议

  1. 检查Docker Swarm网络的内部路由规则

    • 确认资源服务器容器所在的Swarm overlay网络是否允许与Nginx/Eureka/授权服务器所在网络互通,排查是否存在网络策略(Network Policy)限制了容器间的流量。
    • 尝试在资源服务器容器内直接ping授权服务器的容器IP或服务名称,验证底层网络连通性,排除域名解析后的路由问题。
  2. 排查Nginx的转发规则与端口映射

    • 检查Nginx对oauth.b2beyond.org的转发配置,确认是否仅监听了宿主机的外部端口,未在Swarm内部网络开放对应的端口,导致容器内请求无法到达Nginx。
    • 验证Nginx是否正确将请求转发至Eureka集群,再由Eureka转发到授权服务器,可在Nginx和Eureka中开启访问日志,追踪请求流向。
  3. 调整资源服务器的Issuer配置为内部服务地址

    • 既然使用Swarm内部服务发现,可以直接将issuer-uri配置为授权服务器的Swarm服务名称(比如http://auth-service:8080/),绕过外部域名的转发链路,减少网络跳转环节。注意需要同步修改授权服务器的配置,确保Issuer声明与资源服务器配置一致。
  4. 检查容器的网络模式与端口冲突

    • 确认资源服务器容器是否使用了host网络模式,若使用该模式可能会与宿主机的网络规则冲突;若使用overlay网络,检查是否存在端口映射错误导致流量无法正常转发。
    • 排查宿主机的防火墙规则,确认Swarm集群节点间的必要端口(如4789、7946等)是否开放,避免节点间网络通信被阻断。
  5. 验证SSL证书的容器内可用性

    • 若授权服务器使用自签名证书,资源服务器容器内可能未信任该证书,导致请求被阻断(部分SSL握手失败也会表现为超时)。可在容器内导入证书到信任存储,或临时关闭SSL验证进行测试(仅用于排查,生产环境不建议)。

内容的提问来源于stack exchange,提问作者Olisan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:51:01