<p>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 <code>LoadBalancer</code>? Or will I need to use a ingress controller?</p>

<pre><code>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
</code></pre>

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

<pre><code>apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ...
</code></pre>

<p>See <a href="https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-type-loadbalancer" rel="noreferrer">Using source IP</a>.</p>
