Question
Im trying to limit the number of concurrent connection to servers in my Nginx ingress.
is max_conns supported in Ngnix ingress? how can i edit or add it?
max_conns=number limits the maximum number of simultaneous active connections to the proxied server (1.11.5). Default value is zero, meaning there is no limit. If the server group does not reside in the shared memory, the limitation works per each worker process.
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
exmple of an Nginx conf using max_conn
upstream backend {
server backend1.example.com max_conns=3;
server backend2.example.com;}
thanks
Answer
So, what needed to be done in order to add max_conns (or any other parameter that is not supported by the ingress configmap) - is to change the template.
changing the template /etc/nginx/template/nginx.tmpl like this:
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 }}
}
(you can get the full file from the pod nginx-ingress-controller, just run bash on the pod and cat it) will do the trick. now create a configmap with the local nginx.tmpl:
kubectl create configmap nginx-template --from-file=nginx.tmpl=/localpath/nginx.tmpl
and then mount a volume to the deployment with this 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
- i needed to restart my NGINX ingress manually but i edited the ReplicationController because i didn't have a deployment (i guess its because im on minikube)