Can't get load balancer in a healthy state

Posted October 28, 2018 5.3k views
Load BalancingKubernetes

Howdy! I’m trying out the k8s beta and it’s been great so far. I have two clusters, both with load balancers sitting in front. One of the load balancers is working great and has had no issue. The second hasn’t been in a healthy state since I created it. The droplets are hosting a third party app that doesn’t respond to /, but it does have another healthcheck URL.

The solution it seems was to put nginx in front of the app, which I’ve done and it responds with a 200 on /, but the load balancer still thinks the droplet is unhealthy. I’ve tried various configurations for TCP and HTTP checks on various ports.

Using kubectl proxy, I’ve been able to get a 200 response from the / endpoint, so I’m not really sure what else I need to do. Any help would be great. For reference, here’s my nginx and k8s service config:


These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Submit an Answer
3 answers

I think I have this solved. The solution, I think, involved two parts. The first is that I added a selector to my service config that targeted the pod via a label. The second was that my nginx config was setting the server_name to localhost rather than I think is required for k8s deployments.

@unixynet Thansk for the reply! With my nginx config, however, running a HEAD / successfully returns a 200. Here’s the output from cURL.

curl -isb -X HEAD

HTTP/1.1 200 OK
Audit-Id: 475e996e-99fd-4303-9d0f-01ea240c68ef
Content-Length: 2
Content-Type: text/plain; charset=utf-8
Date: Tue, 30 Oct 2018 01:40:00 GMT
Server: nginx/1.14.0


The LB does a HEAD. Make sure your proxy returns the proper HTTP code for that or can translate it to a GET.