<p>So I am using the <a href="https://kubernetes.github.io/" rel="nofollow noreferrer">kubernetes NGINX Ingress Controller</a> and installed it via the <a href="https://kubernetes.github.io/ingress-nginx/deploy/#using-helm" rel="nofollow noreferrer">helm</a> chart.</p>
<p>I didn't find any real documentation for the chart but referencing the <a href="https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/values.yaml" rel="nofollow noreferrer">values.yaml</a>, I changed the controller.kind value to DaemonSet.</p>
<p>So the first part of this question, is this a good practice. I couldn't find any information about this, but one controller might not be enough to handle all incomming traffic, also we ran into some issues, where the node running ingress controller was down. I hope having the controller run as DaemonSet is sufficient, both regarding the availability and also regarding performance?</p>
<p>The second and more <strong>important</strong> part of the question is, how could I have multiple loadbalancers in such a setup? Since one loadbalancer might not be able to handle all traffic, we want to add multiple Loadbalancers, but as far as I understand, there will be one Service of type Loadbalancer created. How can I have multiple Loadbalancers?</p>
<p>Also is it possible to do this through a helm chart configuration?</p>

<p>Nginx Ingress Controller is not a load balancer, so when you say one load balancer would not be enough, I guess you mean one Ingress Controller pod would not be enough. In that case, creating several load balancers would not really help, as you would get more cloud provider load balancers pointing to the same Ingress Controller.</p>
<p>Now, Having a <code>DaemonSet</code> for IC might seem a good idea, but it is not. Especially when you have tens or hundreds of nodes, in which case you might have tens or hundreds of IC pods that you don't really need. You might need 5, for 40 nodes.</p>
<p>The proper way would be to change the object back to <code>Deployment</code>, create a <code>HorizontalPodAutoscaler</code> object for that <code>Deployment</code>, to scale based on a threshold that you will set. You might need to install <a href="https://github.com/kubernetes-sigs/metrics-server" rel="nofollow noreferrer">metrics server</a> for that. If you have the issue of having a node autoscaler, for example, that might take a node down at any moment, you should set a <code>PodDisruptionBudget</code> object, to prevent these cases. PDBs will prevent a node from being drained, and the node autoscaler would take down another node. You could also set an <code>Anti-affinity</code> against itself to prevent two IC pods to be deployed on the same node, to do the extra mile.</p>
