如何使用Nginx入口控制器仅允许一个Pod进行一个连接

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

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

是否有办法使Nginx每个Pod只调度一个传入的Websocket连接,如果缺少可用的Pod,则拒绝传入的连接?

kubernetes kubernetes-ingress nginx-ingress
2个回答
0
投票

您可以将readinessProbe与相对较低的periodSecond一起使用,并且很明显,readinessProbe设置为1以便尽可能快地释放Pod。

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

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


0
投票

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

max_conns=1

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