【问题标题】:How to allow only one connection per pod using nginx ingress controller如何使用 nginx 入口控制器只允许每个 pod 一个连接
【发布时间】:2019-10-20 13:16:24
【问题描述】:

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

有没有办法让 nginx 每个 pod 只调度一个传入的 websocket 连接,并且在缺少可用 pod 的情况下,拒绝传入的连接?

【问题讨论】:

  • 嗨@user1886318,以下答案是否解决了您的问题?

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

我对 Kubernetes Nginx 入口设置不是非常熟悉,但假设它公开了一些用于设置服务器组的 Nginx 配置选项,在 server 函数中有一个名为 max_conns 的参数可以让你限制到给定服务器的连接数。假设入口控制器中有一个映射,应该可以为每个正在创建并添加到引擎盖下的 Nginx 配置的服务器设置max_conns=1

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

【讨论】:

    【解决方案2】:

    您可以使用 periodSecond 相对较低的 readinessProbe,并且显然将 {success,failure}Threshold 设置为 1,以便尽快释放或不释放 Pod。

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 2020-03-19
      • 2012-01-05
      • 1970-01-01
      • 2020-02-10
      • 2013-05-08
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多