How to setup load balancer with ingress nginx controller

2/18/2021

I am new to microservices. I have few apps to deploy as microservices.

I need a API and Load balancer. For API gateway I come to know about Ingress Nginx. But I am not sure hot setup load balancing. However I could configure it for API gateway as below.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: example.dev
      http:
        paths:
          - path: /api/users/?(.*)
            backend:
              serviceName: auth-srv
              servicePort: 3000
          - path: /api/orders/?(.*)
            backend:
              serviceName: order-srv
              servicePort: 3000
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000

I also have one confusion: enter image description here

Load balancer sits before API Gateway i.e nginx controller,

How would it I configure Ingress-Nginx for load balancing?

Because load balancer will redirect request to nginx controller

So, Load balancer -> API Gateway > /api/orders

Now, /api/orders -> order-srv -> pods

Clearly Load balancer should decide to which pod it should route the request?

How can I achieve that?

-- confusedWarrior
docker
kubernetes
microservices
nginx

1 Answer

2/18/2021

Well, this is something like -

You got a request from external world and that has been at first level intercepted at load balancer layer and API Gateway should be one of the Microservices where you will keep all of the URL mappings say - /api/orders/{orderId} brings this to your API Gateway and in that API Gateway you can have a logic to redirect this to some order service behind the scenes via Fully Qualified Domain Name of order service (FQDN) :portNumber/{uri}

So its good idea to simply route traffic to frontend and API Gateway via your ingress rules , i.e.

- path: /?(.*) will take it to client service or frontend

- path: /api/?(.*) this shall take it to API Gateway service which has routing map to all of the services appearing behind the scenes

-- Tushar Mahajan
Source: StackOverflow