我的Kubernetes集群使用copysetSet运行N个相似的Pod。由于资源限制,每个pod只能处理一个websocket连接。我的Kubernetes使用Nginx入口控制器。
是否有办法使Nginx每个Pod只调度一个传入的Websocket连接,如果缺少可用的Pod,则拒绝传入的连接?
您可以将readinessProbe
与相对较低的periodSecond一起使用,并且很明显,readinessProbe
设置为1以便尽可能快地释放Pod。
[基本上,您可以设置脚本或简单的HTTP端点,以防在建立连接后返回失败的状态代码:因此Pod端点将从服务端点列表中删除,并且不会由Ingress Controller选择。
[请记住,此解决方案可能会受到竞争条件的影响,但这是最简单的一种:更好的解决方案可能是使用Service Mesh,但这意味着额外的复杂性。
我对Kubernetes Nginx入口设置不是很熟悉,但是假设它公开了一些用于设置服务器组的Nginx配置选项,在{success,failure}Threshold
函数中有一个名为server
的参数,您可以通过它来限制与给定服务器的连接数。假设入口控制器中存在映射,则应该有可能为要创建的每个服务器设置max_conns
,并将其添加到后台的Nginx配置中。
max_conns=1