<p>I'm running a single node k3s installation. The machine it's running on has two NICs installed with two IP addresses assigned. I want the ingress only bind to one of these, but no matter what I tried, nginx will always bind to both/all interfaces.</p>
<p>I'm using the official Helmchart for ingress-nginx and modified the following values:</p>
<pre><code>clusterIP: &quot;&quot;
...
externalIPs:
      - 192.168.1.200
...
externalTrafficPolicy: &quot;Local&quot;
...
</code></pre>
<p>The following doesn't look that bad to me, but nginx is still listening on the other inferface (192.168.1.123) too...</p>
<pre><code>❯ k get service -n ingress-nginx
NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP                   PORT(S)                      AGE
ingress-nginx-controller   LoadBalancer   10.43.30.231   192.168.1.200,192.168.1.200   80:30047/TCP,443:30815/TCP   9m14s

</code></pre>
<p>This is the service as generated by Helm:</p>
<pre><code>kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
  ...
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/version: 0.45.0
    helm.sh/chart: ingress-nginx-3.29.0
  annotations:
    meta.helm.sh/release-name: ingress-nginx
    meta.helm.sh/release-namespace: ingress-nginx
  managedFields:
    ...
spec:
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: http
      nodePort: 30047
    - name: https
      protocol: TCP
      port: 443
      targetPort: https
      nodePort: 30815
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  clusterIP: 10.43.30.231
  clusterIPs:
    - 10.43.30.231
  type: LoadBalancer
  externalIPs:
    - 192.168.1.200
  sessionAffinity: None
  externalTrafficPolicy: Local
  healthCheckNodePort: 32248
status:
  loadBalancer:
    ingress:
      - ip: 192.168.1.200
</code></pre>

rawbertp
<p>You'll want to set the <a href="https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#bind-address" rel="nofollow noreferrer">bind-address</a> in the configmap settings.</p>
<blockquote>
<p>Sets the addresses on which the server will accept requests instead of *. It should be noted that these addresses must exist in the runtime environment or the controller will crash loop.</p>
</blockquote>
