在AWS NLB后面的nginx集群中共享SSL会话

问题描述 投票:0回答:1

此外,Nginx describes a configuration表示“ 使用AWS Network Load Balancer的AWS上NGINX Plus的主动-主动HA”。 AWS NLB(网络负载平衡器)平衡OSI第4层与其后的nginx服务器之间的连接,这些服务器执行第7层应用程序负载平衡。我们有一个类似的设置(使用nginx,而不是NGINX Plus),并且想要使用网络负载平衡器,因为我们传入的流量非常多,并且当前需要4个nginx服务器来处理所有这些。我们需要从UDP负载平衡到HTTP / 2和WebSockets的所有内容。

Nginx example中明显缺少的功能是它不支持TLS。我们需要支持TLS。理想情况下,我们将通过让NLB终止TLS来支持TLS,但是尽管Amazon最近在其NLB中添加了该功能,但我们使用的是Kubernetes 1.12,integrating NLB termination of TLS非常复杂,因此已推迟到Kubernetes 1.15,甚至可以反向移植到kops 1.14被拒绝太难。因此,当我们等待nginx和EKS赶上来,并且考虑到做到这一点的开发人员很难做到这一点时,我们将继续终止nginx服务器上的TLS。

这通常有效,但是您可能知道,SSL握手非常昂贵,我们希望减少这种费用。 reduce the number of handshakes提供2种通往nginx的方式。第一种方法是通过单个TCP / TLS连接发送多个请求,它与NLB配合良好,并且我们会尽可能多地使用客户的支持。不幸的是,第二个“重用SSL会话参数以避免并行和后续连接的SSL握手”,该命令无法正常工作。为了重用SSL会话参数,每个SSL握手都会创建一个SSL会话,以后的连接可以通过指定SSL会话ID来使用这些会话参数。这样一来,网络浏览器就可以打开6个并行TCP连接,而只需要进行一个完整的SSL握手(对于第一个连接),而其余5个使用相同的SSL会话。

ssl_session_cache提供了ssl_session_cache来跟踪服务器端的这些会话,但是如所记录的那样,它最多仅限于单个服务器上所有工作程序之间共享的单个缓存。仅使用1台服务器时,这是极好的,而使用多于一台服务器时,总比没有好,但实际上在使用4台服务器时,它并没有多大帮助。除非所有6个浏览器连接都转到同一服务器,否则一个连接将转到拒绝会话ID的服务器,这将导致该会话重新开始握手并使新连接的先前会话ID无效,即使它们在适当情况下仍然有效已路由。

想到的解决方案是使用memcached之类的内容来扩展memcached,以便所有ssl_session_cache服务器将具有相同的缓存。 (出于各种原因,我们宁愿不使用SSL会话票证,其中最引人注目的是,在我们的特定情况下,很多客户不会使用它们。)我看到nginx从使用kubernetes/ingreses-nginx转向kubernetes/ingreses-nginx,因为它需要nginx并添加了OpenResty支持和nginx模块,并且存在lua,但是我不知道如何导航所有lua模块集成。我在lua module for memcached模块上找到的文档表明,该文档旨在用于内容缓存,而不是内部的SSL会话缓存。

因此,(1)是否存在某种预先构建的方式,供开源memcached或OpenResty在多个服务器之间共享lua? (2)尝试从memcached模块中构建共享缓存似乎合理,如果是这样,我该如何实际去做呢?

ssl nginx lua memcached openresty
1个回答
0
投票

您无法更好地说明问题!

我目前有完全相同的问题,并且忙于寻找一些用于lua resty的内存缓存会话插件。

[我们还有多个在NLB后面运行的openresty lua auto ssl ec2实例,该实例通过http内部将流量路由到其他ec2实例。

这都可以,但是会话必须在NLB后面的openresty服务器(ec2)之间进行粘性/共享,以使Web套接字正常工作。

如果您更接近答案,也请告诉我。如果我也能找到解决方案,也会告诉您。

:)

© www.soinside.com 2019 - 2024. All rights reserved.