我们有一个 Java 应用程序服务器在具有 2 个副本的容器中运行。容器网络堆栈是Traefik。此外,我们还有 Apache HTTP Server 和 GSSAPI 模块,用于 Kerberos SSO 身份验证。
Traefik 是这样配置的:
services:
app:
...
deploy:
mode: replicated
replicas: 2
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-public"
- "traefik.http.routers.app.entrypoints=web"
- "traefik.http.routers.app.rule=Host(`www.example.com`) && PathPrefix(`/`)"
- "traefik.http.services.app.loadbalancer.server.port=8080"
- "traefik.http.services.app.loadBalancer.sticky.cookie"
- "traefik.http.services.app.loadBalancer.sticky.cookie.name=AppCookie"
apache:
...
deploy:
mode: replicated
replicas: 2
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-public"
- "traefik.http.routers.apache.entrypoints=web"
- "traefik.http.routers.apache.rule=Host(`www.example.com`) && Path(`/LogIn.form`)"
- "traefik.http.services.apache.loadbalancer.server.port=80"
- "traefik.http.services.apache.loadbalancer.server.port=8080"
- "traefik.http.services.apache.loadBalancer.sticky.cookie"
- "traefik.http.services.apache.loadBalancer.sticky.cookie.name=AppCookie"
身份验证机制预计将像这样工作:
如果 Apache 可以与客户端访问同一应用程序服务器,则此机制非常有效。在 Kubernetes 中,一个 pod 中的多个容器共享网络地址,因此 Apache 代理登录页面为 http://localhost:8080,这就像一个魅力。但是 Docker Swarm 环境不同,我想知道是否有办法将 Apache 指向它重定向的同一主机。
以下哪种方法可行:
是的,使用面向客户端的负载均衡器。负载均衡器具有称为“粘性”的功能,允许客户端在断开连接的情况下连接到同一前端。
NGINX 可能是一个很好的解决方案。它具有负载平衡功能,并具有名为“启用会话持久性”的选项。有许多供应商提供虚拟或物理负载均衡器,并提供付费维护和对本地解决方案的支持。
如果这是云解决方案,大多数云提供商还通过其负载均衡器实现会话持久性。