How do I reduce downtime of nginx ingress route when updating a destination pod?

4/2/2020

I have set up an nginx ingres that routes traffic to specific deployments based on host.

host A --> Service A, host B --> Service B

If I update the config for Deployment A, that update completes in less than 2 seconds. However, my nginx ingress goes down for host A after that and takes 5 to 7 seconds to point to Service A with new pod.

How can I reduce this delay? Is there a way to speed up the performance of the nginx ingress so that it points to the new pod as soon as possible ( preferably less than 3 seconds?)

Thank you!

-- crossvalidator
kubernetes
nginx
nginx-ingress
performance

1 Answer

4/2/2020

You can use the nginx.ingress.kubernetes.io/service-upstream annotation to suppress the normal Endpoints behavior and use the Service directly instead. This has better integration with some deployment models but 5-7 seconds is extreme for ingress-nginx to be seeing the Endpoints update. There can be a short gap from when a pod is removed and when ingress-nginx sees the Endpoint removal. You usually fix that with a pre-stop hook that just sleeps for a few seconds to ensure by the time it actually exits, the Endpoint change has been processed everywhere.

-- coderanger
Source: StackOverflow