在 Kubernetes 入口 Ngnix 中编辑 max_conns?

xFi*_*ler 3 nginx kubernetes nginx-reverse-proxy kubernetes-ingress

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

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

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

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

使用 max_conn 的 Nginx 配置示例

upstream backend {
server backend1.example.com  max_conns=3;
server backend2.example.com;}
Run Code Online (Sandbox Code Playgroud)

谢谢

xFi*_*ler 6

因此,为了添加 max_conns(或 ingress 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 }}
}
Run Code Online (Sandbox Code Playgroud)

(您可以从 pod nginx-ingress-controller 获取完整文件,只需在 pod 上运行 bash 并对其进行 cat 操作)即可解决问题。现在使用本地 nginx.tmpl 创建一个配置映射:

kubectl create configmap nginx-template --from-file=nginx.tmpl=/localpath/nginx.tmpl
Run Code Online (Sandbox Code Playgroud)

然后使用此 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
Run Code Online (Sandbox Code Playgroud)
  • 我需要手动重启我的 NGINX 入口,但我编辑了 ReplicationController 因为我没有部署(我猜是因为我在 minikube 上)