1

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.

I'm using the official Helmchart for ingress-nginx and modified the following values:

clusterIP: ""
...
externalIPs:
      - 192.168.1.200
...
externalTrafficPolicy: "Local"
...

The following doesn't look that bad to me, but nginx is still listening on the other inferface (192.168.1.123) too...

❯ 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

This is the service as generated by Helm:

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
rawbertp
  • 13
  • 6

1 Answers1

1

You'll want to set the bind-address in the configmap settings.

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.

strongjz
  • 4,271
  • 1
  • 17
  • 27