Edit max_conns in Kubernetes ingress Ngnix? Edit max_conns in Kubernetes ingress Ngnix? kubernetes kubernetes

Edit max_conns in Kubernetes ingress Ngnix?


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)


According to https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/annotations.md#rate-limiting, there are annotations for limiting the number of connections:

The annotations nginx.ingress.kubernetes.io/limit-connections, nginx.ingress.kubernetes.io/limit-rps, and nginx.ingress.kubernetes.io/limit-rpm define a limit on the connections that can be opened by a single client IP address. This can be used to mitigate DDoS Attacks.

nginx.ingress.kubernetes.io/limit-connections: number of concurrent connections allowed from a single IP address.

nginx.ingress.kubernetes.io/limit-rps: number of connections that may be accepted from a given IP each second.

nginx.ingress.kubernetes.io/limit-rpm: number of connections that may be accepted from a given IP each minute.

You would need to add these annotations in your Ingress rule.