如何处理特使的短暂港口用尽

时间:2018-05-29 12:47:12

标签: kubernetes port reverse-proxy envoyproxy

反向代理代表客户端处理多个请求的问题之一是,经过一段时间的重负载后,从envoy节点到后端节点的传出连接数将耗尽临时端口

假设我们为envoy节点分配了多个ip addreses / hostnames,有没有办法通知envoy在连接到后端时以循环方式使用这些ip地址/主机名?

参考文献:

  1. https://blog.box.com/blog/ephemeral-port-exhaustion-and-web-services-at-scale/
  2. https://making.pusher.com/ephemeral-port-exhaustion-and-how-to-avoid-it/
  3. https://www.nginx.com/blog/overcoming-ephemeral-port-exhaustion-nginx-plus/
  4. https://github.com/kubernetes/kubernetes/issues/27398

1 个答案:

答案 0 :(得分:3)

最有希望的选择是找到一种在代理/ LB和后端服务器之间启用TCP多路复用的方法。

  

What is TCP Multiplexing?

     

TCP多路复用是一种主要由负载均衡器和应用程序交付控制器(以及一些独立的Web应用程序加速解决方案)使用的技术,使设备能够重用"现有的TCP连接。这类似于持久HTTP 1.1连接的工作方式,即单个HTTP连接可用于检索多个对象,从而减少TCP开销对应用程序性能的影响。

     TCP复用允许基于TCP的应用程序(通常是HTTP / Web)发生同样的事情,除了重用仅限于1个客户端,连接可以在许多客户端上重用,从而提高效率。 Web服务器和性能更快的应用程序。

可以找到关于TCP多路复用的另一个很好的解释here

另一个选择是在L4网络Load Balancer后面的池中添加更多代理实例,并将一个实例的连接限制设置为合理的值。 每个代理都会带来一定的负载而没有问题。如果需要在加载中处理周期性突发,则可能需要将自动扩展策略设置为代理池。