AWS 弹性负载均衡器背后的 Jenkins 实例并启用粘性

Jenkins instance behind AWS Elastic Load balancer and enable stickiness

我按照以下文档创建了一个包含两个 AWS Jenkins 实例的目标组。

https://www.jenkins.io/doc/tutorials/tutorial-for-installing-jenkins-on-AWS/

然后我创建了一个 ALB 并使用目标组作为侦听器。

我使用了 Amazon ACM 并在我的 ALB 上启用了 HTTPS。我在 ALB DNS 名称的 Route 53 中添加了一条 CNAME 记录。

现在,当我尝试使用 CNAME 登录时,我观察到以下情况

有没有办法让我知道我是否正在部署 Web 应用程序(第 3 方,如 Jenkins),是否以及何时需要启用粘性以及执行此操作的副作用?

提前致谢。

负载均衡器将流量发送到 TG 中的一个 EC2 实例。 Jenkins 使用会话令牌和 cookie 进行响应,以便您的浏览器和服务器保持同步。

当只有 1 个实例时,所有流量都发送给它。 当有两个或更多实例时,流量将依次发送到每个实例,这是典型的 round-robin 行为。

问题是 Jenkins 控制器不是可集群资源。 基本上 Jenkins A 不知道其他 Jenkins 的存在。

所以,发生的事情是登录请求转到 Jenkins A,它以会话令牌响应,然后发生登录重定向,您的浏览器发出对仪表板页面的请求并发送会话令牌,这请求被发送到 Jenkins B,Jenkins B 立即否认会话令牌的所有知识并将您弹回登录页面。

Jenkins 的建议是拥有一个主实例和一个“热”备用实例,当主实例出现故障时,备用实例将联机。

如果您正在 运行 构建集群以构建更多东西,那么您可能需要 运行 更多代理并将它们连接到控制器,以便它们可以由 AutoScaling 组配置需要时放大,安静时缩小。