6

I'm getting the node IP address instead of the client IP. Is it possible to get the client IP with a service of type LoadBalancer? Or will I need to use a ingress controller?

apiVersion: v1
kind: Service
metadata:
  name: app-svc
  labels:
    name: app-svc
    environment: dev
spec:
  type: LoadBalancer
  loadBalancerIP: XXX.XXX.XXX.XXX
  ports:
    - name: http-port
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
      name: app-deploy
lmcarreiro
  • 5,312
  • 7
  • 36
  • 63

1 Answers1

16

You do not need any Ingress controller. However it is required to set the value of the spec.externalTrafficPolicy Service field to "Local" (the default is "Cluster") in Microsoft Azure.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ...

See Using source IP.

Antoine Cotten
  • 2,673
  • 18
  • 37
  • for fast experiment I use `kubectl edit svs/pentagon-balancer` and just change `Cluster` to `Local`. Now I can see real user IP in `X-Forwarded-For` header on backend – kore666 Apr 11 '19 at 08:02