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 审计?

spring boot跨域设置

dockerdocker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

带有 Docker 容器化 Spring Boot 应用程序的 HTTPS 不起作用

docker 镜像正在运行,但无法在 Spring Boot 应用程序中访问 REST 端点