How does the nginx resolver behave when pointed at a Kubernetes Service?

379 views Asked by At

I'm exploring the nginx container as a load balancer. I'm using a Kubernetes Service in the upstream module.

Here is a snippet of my nginx.conf...

upstream backend {
    hash $remote_addr consistent;
    server mgmt-1;        # <-- these entries are Kubernetes Services
    server mgmt-2;
    server mgmt-3;
}

Right now each service maps to only ONE pod. Which of course, is not ideal.

So, the resolver directive for nginx+ is said to consistently update the endpoint IP, in the event that the Service is changed/moved/deleted/ephemeralized, etc.

Question: If I wanted to scale up my pods, resulting in multiple endpoints maintained by one Service, would the nginx resolver extract and load the entire set of endpoints? Or will it not know what to do? Thanks

1

There are 1 answers

0
Justin Tamblyn On

You can test this for yourself. It's quite fun. You spin up a pod running Ubuntu for example and then kubectl exec -it podname /bin/sh into the pod and from there you can run nslookup mgmt-1 (if they're in the same namespace).

What you will find is that the service resolves to a single IP. This IP is unique to the service. When you actually send the service IP traffic on a port it is listening on it will make it to the endpoints.

To answer your question. I do not believe Nginx will be able to tell mgmt-1 has three endpoints (for example) while mgmt-2 has 1 endpoint (for example). Nginx will only see the service IP.

To see the service IP for yourself you can run kubectl get svc/servicename -n namespacename