Spring Boot 控制器跨 docker pod 重定向
Posted
技术标签:
【中文标题】Spring Boot 控制器跨 docker pod 重定向【英文标题】:SpringBoot controler redirect across docker poods 【发布时间】:2019-01-03 07:12:13 【问题描述】:我们在 Kubernetes 中部署了一个 SpringBoot Web 应用程序 docker 容器,具有 3 个副本。当控制器重定向到同一个控制器中的不同 url 时,我们通过 flashAttributes 传递一个对象。当我们运行 1 个 pod 时,一切正常。但是当我扩展到 3 个 pod 时,该对象的所有内部属性都设置为 Null。有没有人遇到过这个问题?如果是这样,请给出解决方案?
谢谢,
SR
【问题讨论】:
【参考方案1】:Kubernetes 可以将多个请求从会话发送到部署中的不同 pod。这就是数据丢失的原因,因为数据可能在一个 pod 的内存中,但另一个 pod 根本没有该数据。
为避免这种情况 - 您可以在 Redis 等外部存储中维护会话缓存,也可以使用粘性会话,以便将给定会话的请求发送到同一个 pod。
一些指向解决方案的指针
Using Redis for external session data
Sticky sessions - 这种方法需要使用 nginx 作为入口控制器
【讨论】:
谢谢维沙尔!不幸的是,我们还没有 Redis 解决方案。我们使用的是 Nginx,但我认为我们切换到了 Traefik。我正在尝试使用 Traefik 的粘性,但会玩得更多。我确实启用了亲和力。但似乎没有工作。如果有任何例子,请告诉我。以上是关于Spring Boot 控制器跨 docker pod 重定向的主要内容,如果未能解决你的问题,请参考以下文章
spring boot集成用docker构建的rabbitmq
如何跨单个项目的不同 Spring Boot 微服务实现 JPA 审计?
dockerdocker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志