在 Kubernetes 入口 Ngnix 中编辑 max_conns?

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

我正在尝试限制 Nginx 入口中服务器的并发连接数量。

Ngnix ingress 支持 max_conns 吗?我如何编辑或添加它?

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

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

使用 max_conn 的 Nginxconf 示例

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

谢谢

nginx kubernetes nginx-reverse-proxy kubernetes-ingress
2个回答
7
投票

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

像这样更改模板 /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 上)

1
投票

根据https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/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 规则中添加这些注释。

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