我的Kubernetes集群使用一个copySet来运行N个相似的Pod。由于资源限制,每个pod只能处理一个websocket连接。我的Kubernetes使用Nginx入口控制器。
有没有办法使Nginx每个Pod只调度一个传入的Websocket连接,并且在缺少可用Pod的情况下,拒绝传入的连接?
答案 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-conns
:https://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,但这意味着额外的复杂性。