如何使用Nginx Ingress控制器在每个Pod中仅允许一个连接

时间:2019-10-20 13:16:24

标签: kubernetes kubernetes-ingress nginx-ingress

我的Kubernetes集群使用一个copySet来运行N个相似的Pod。由于资源限制,每个pod只能处理一个websocket连接。我的Kubernetes使用Nginx入口控制器。

有没有办法使Nginx每个Pod只调度一个传入的Websocket连接,并且在缺少可用Pod的情况下,拒绝传入的连接?

2 个答案:

答案 0 :(得分:3)

我对Kubernetes Nginx入口设置不是很熟悉,但是假设它公开了一些用于设置服务器组的Nginx配置选项,在server函数中有一个名为max_conns的参数这样您就可以限制到给定服务器的连接数。假设入口控制器中存在映射,则应该有可能为要创建的每个服务器设置max_conns=1,并将其添加到后台的Nginx配置中。

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

编辑:一些粗略的研究,看来这确实是可能的。似乎您可以根据此处的参数主列表在ConfigMap中将其指定为nginx.org/max-connshttps://github.com/nginxinc/kubernetes-ingress/blob/master/docs/configmap-and-annotations.md

答案 1 :(得分:-1)

您可以将readinessProbe periodSecond 一起使用,并且将{success,failure}Threshold设置为1,以便尽可能快地释放Pod。< / p>

基本上,您可以设置脚本或简单的HTTP端点,以在建立连接的情况下返回失败的状态代码:因此Pod端点将从服务端点列表中删除,并且不会由Ingress选择控制器。

请记住,此解决方案可能会受到竞争条件的影响,但这是最简单的解决方案:更好的解决方案可能是使用Service Mesh,但这意味着额外的复杂性。