3

我试图限制我的 Nginx 入口中与服务器的并发连接数。

Ngnix 入口是否支持 max_conns?我该如何编辑或添加它?

max_conns=number 限制与代理服务器 (1.11.5) 的同时活动连接的最大数量。默认值为零,表示没有限制。如果服务器组不驻留在共享内存中,则限制适用于每个工作进程。

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

使用 max_conn 的 Nginx conf 示例

upstream backend {
server backend1.example.com  max_conns=3;
server backend2.example.com;}

谢谢

4

2 回答 2

6

因此,为了添加 max_conns(或入口 configmap 不支持的任何其他参数),需要做的是更改模板。

像这样更改模板 /etc/nginx/template/nginx.tmpl :

upstream {{ $upstream.Name }} {
    # Load balance algorithm; empty for round robin, which is the default
    {{ if ne $cfg.LoadBalanceAlgorithm "round_robin" }}
    {{ $cfg.LoadBalanceAlgorithm }};
    {{ end }}

    {{ if $upstream.UpstreamHashBy }}
    hash {{ $upstream.UpstreamHashBy }} consistent;
    {{ end }}

    {{ if (gt $cfg.UpstreamKeepaliveConnections 0) }}
    keepalive {{ $cfg.UpstreamKeepaliveConnections }};
    {{ end }}

    {{ range $server := $upstream.Endpoints }}server {{ $server.Address | formatIP }}:{{ $server.Port }} max_fails={{ $server.MaxFails }} fail_timeout={{ $server.FailTimeout }} max_conns=1;
    {{ end }}
}

(您可以从 pod nginx-ingress-controller 获取完整文件,只需在 pod 上运行 bash 并对其进行 cat 处理)就可以了。现在使用本地 nginx.tmpl 创建一个 configmap:

kubectl create configmap nginx-template --from-file=nginx.tmpl=/localpath/nginx.tmpl

然后使用此 yaml 将卷安装到部署中:

        volumeMounts:
      - mountPath: /etc/nginx/template
        name: nginx-template-volume
        readOnly: true
  volumes:
    - name: nginx-template-volume
      configMap:
        name: nginx-template
        items:
        - key: nginx.tmpl
          path: nginx.tmpl
  • 我需要手动重新启动我的 NGINX 入口,但我编辑了 ReplicationController,因为我没有部署(我猜是因为我在 minikube 上)
于 2018-02-08T20:02:39.490 回答
1

根据https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/annotations.md#rate-limiting,有限制连接数的注解:

注释 nginx.ingress.kubernetes.io/limit-connections、nginx.ingress.kubernetes.io/limit-rps 和 nginx.ingress.kubernetes.io/limit-rpm 定义了可以由单个客户端 IP 地址。这可用于缓解 DDoS 攻击。

nginx.ingress.kubernetes.io/limit-connections:单个 IP 地址允许的并发连接数。

nginx.ingress.kubernetes.io/limit-rps:每秒可以从给定 IP 接受的连接数。

nginx.ingress.kubernetes.io/limit-rpm:每分钟可以从给定IP接受的连接数。

您需要在 Ingress 规则中添加这些注释。

于 2018-02-07T11:26:18.093 回答