根据经过身份验证的用户设置负载均衡器

时间:2018-01-16 00:35:59

标签: deployment load-balancing canary-deployment

我正在尝试设置一个负载均衡器,该负载均衡器会重定向到用户的特定应用程序版本。到目前为止,我正在使用蓝/绿部署策略(所以一旦我创建了一个应用程序的新版本,我创建了新的环境并重定向了那里的流量)。现在我想改变这种方法。我希望能够指定在认证后看到新站点的用户(更有经验或其他),而其他用户仍然会被重定向到旧站点。如果新版本出现问题,所有用户都会看到旧版本。目前我的负载均衡是在apache中进行的,并且身份验证是在应用程序级别完成的。这甚至可能吗?我知道我可以在应用程序中对其进行硬编码但是如果新功能中存在错误并且新用户仍然被重定向到该怎么办?然后,我需要停止所有用户的应用程序并回滚到旧版本,我认为这很糟糕。我正在考虑使用外部CAS但是如果有可能的话就找不到任何信息。所以我想问一下是否可能,是否有任何工具(可能是一些apache插件)用于此目的?

1 个答案:

答案 0 :(得分:1)

这是一个使用nginx

的工作解决方案
  1. 创建conf.d/balancer.conf
  2. 将代码放入其中(见下文)
  3. docker run -p8080:8080 -v ~/your_path/conf.d:/etc/nginx/conf.d openresty/openresty:alpine
  4. 使用curl来玩它
  5. balancer.conf:

    map $cookie_is_special_user $upstream {
        default http://example.com;
        ~^1$ http://scooterlabs.com/echo;
    }
    
    server {
        listen 8080;
        resolver 8.8.8.8;
    
        location / {
            proxy_pass $upstream;
        }
    }
    

    测试

    curl --cookie "is_special_user=1" http://localhost:8080
    

    它将返回scooterlabs.com转发收到的请求的内容

    curl http://localhost:8080
    

    制作example.com的内容

    解释

    • 我们的想法是,在他们像往常一样获得授权后,您可以通过后端应用为您将其视为特殊的用户设置一个特殊的Cookie
    • 当然只有两个应用程序版本都在同一个域上提供才能使两个版本看到cookie
    • 之后,根据cookie值
    • 将它们平衡到所需的服务器
    • 您可以通过调整nginx配置文件轻松禁用此类路由
    • 使用这种方法,您可以提出更复杂的方案,例如在1-10范围内设置随机cookie值,然后逐渐切换配置文件中的一些特殊用户,即从那些开始价值1,之后1-2等