</code></pre></div><ul><li>Use Helm to install the additional instance of the ingress controller</li><li>Ensure you have Helm working (refer to the <ahref=https://helm.sh/docs/>Helm documentation</a>)</li><li>We have to assume that you have the helm repo for the ingress-nginx controller already added to your Helm config. But, if you have not added the helm repo then you can do this to add the repo to your helm config;</li></ul><divclass=highlight><pre><span></span><code>helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
</code></pre></div><ul><li>Make sure you have updated the helm repo data;</li></ul><divclass=highlight><pre><span></span><code>helm repo update
</code></pre></div><ul><li>Now, install an additional instance of the ingress-nginx controller like this:</li></ul><divclass=highlight><pre><span></span><code>helm install ingress-nginx-2 ingress-nginx/ingress-nginx \
</code></pre></div><p>If you need to install yet another instance, then repeat the procedure to create a new namespace, change the values such as names & namespaces (for example from "-2" to "-3"), or anything else that meets your needs.</p><p>Note that <code>controller.ingressClassResource.name</code> and <code>controller.ingressClass</code> have to be set correctly. The first is to create the IngressClass object and the other is to modify the deployment of the actual ingress controller pod.</p><h3id=i-cant-use-multiple-namespaces-what-should-i-do>I can't use multiple namespaces, what should I do?<aclass=headerlinkhref=#i-cant-use-multiple-namespaces-what-should-i-dotitle="Permanent link"> ¶</a></h3><p>If you need to install all instances in the same namespace, then you need to specify a different <strong>election id</strong>, like this:</p><divclass=highlight><pre><span></span><code>helm install ingress-nginx-2 ingress-nginx/ingress-nginx \
</code></pre></div><h2id=retaining-client-ipaddress>Retaining Client IPAddress<aclass=headerlinkhref=#retaining-client-ipaddresstitle="Permanent link"> ¶</a></h2><p>Please read <ahref=../user-guide/retaining-client-ipaddress/>Retain Client IPAddress Guide here</a>.</p><h2id=kubernetes-v122-migration>Kubernetes v1.22 Migration<aclass=headerlinkhref=#kubernetes-v122-migrationtitle="Permanent link"> ¶</a></h2><p>If you are using Ingress objects in your cluster (running Kubernetes older than version 1.22), and you plan to upgrade your Kubernetes version to K8S 1.22 or above, then please read <ahref=../user-guide/k8s-122-migration/>the migration guide here</a>.</p><h2id=validation-of-path>Validation Of <strong><code>path</code></strong><aclass=headerlinkhref=#validation-of-pathtitle="Permanent link"> ¶</a></h2><ul><li><p>For improving security and also following desired standards on Kubernetes API spec, the next release, scheduled for v1.8.0, will include a new & optional feature of validating the value for the key <code>ingress.spec.rules.http.paths.path</code>.</p></li><li><p>This behavior will be disabled by default on the 1.8.0 release and enabled by default on the next breaking change release, set for 2.0.0.</p></li><li><p>When "<code>ingress.spec.rules.http.pathType=Exact</code>" or "<code>pathType=Prefix</code>", this validation will limit the characters accepted on the field "<code>ingress.spec.rules.http.paths.path</code>", to "<code>alphanumeric characters</code>", and <code>"/," "_," "-."</code> Also, in this case, the path should start with <code>"/."</code></p></li><li><p>When the ingress resource path contains other characters (like on rewrite configurations), the pathType value should be "<code>ImplementationSpecific</code>".</p></li><li><p>API Spec on pathType is documented <ahref=https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types>here</a></p></li><li><p>When this option is enabled, the validation will happen on the Admission Webhook. So if any new ingress object contains characters other than alphanumeric characters, and, <code>"/,","_","-"</code>, in the <code>path</code> field, but is not using <code>pathType</code> value as <code>ImplementationSpecific</code>, then the ingress object will be denied admission.</p></li><li><p>The cluster admin should establish validation rules using mechanisms like "<code>Open Policy Agent</code>", to validate that only authorized users can use ImplementationSpecific pathType and that only the authorized characters can be used. <ahref=https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#strict-validate-path-type>The configmap value is here</a></p></li><li><p>A complete example of an Openpolicyagent gatekeeper rule is available <ahref=https://kubernetes.github.io/ingress-nginx/examples/openpolicyagent/>here</a></p></li><li><p>If you have any issues or concerns, please do one of the following:</p></li><li>Open a GitHub issue</li><li>Comment in our Dev Slack Channel</li><li>Open a thread in our Google Group <ahref=mailto:ingress-nginx-dev@kubernetes.io>ingress-nginx-dev@kubernetes.io</a></li></ul><h2id=why-is-chunking-not-working-since-controller-v110>Why is chunking not working since controller v1.10 ?<aclass=headerlinkhref=#why-is-chunking-not-working-since-controller-v110title="Permanent link"> ¶</a></h2><ul><li><p>If your code is setting the HTTP header <code>"Transfer-Encoding: chunked"</code> and the controller log messages show an error about duplicate header, it is because of this change <ahref=http://hg.nginx.org/nginx/rev/2bf7792c262e>http://hg.nginx.org/nginx/rev/2bf7792c262e</a></p></li><li><p>More details are available in this issue <ahref=https://github.com/kubernetes/ingress-nginx/issues/11162>https://github.com/kubernetes/ingress-nginx/issues/11162</a></p></li></ul></article><