Getting LoadBalancer Services Working in a Kind Cluster.

LoadBalancer services in Kind stay <pending> forever without a cloud controller. Here is how to fix that with cloud-provider-kind, get a real external IP, and actually validate load balancing across your pods.
Getting LoadBalancer Services Working in a Kind Cluster.

On this page

You create a LoadBalancer service in your Kind cluster, run kubectl get svc, and EXTERNAL-IP is stuck at <pending>. You wait. Still pending. You Google it. Still pending.

This is not a misconfiguration. It is expected behaviour. Kind runs inside Docker and has no cloud provider, so nothing responds to the LoadBalancer request. This walkthrough takes you from that stuck state to a fully functional LoadBalancer with verified traffic distribution across pods, step by step.

The Problem

Kind nodes are Docker containers running on a private bridge network, typically in the 172.20.0.0/16 range. When you create a LoadBalancer service, Kubernetes waits for a cloud controller to provision an external IP. In a managed cloud like EKS, GKE, or AKS, that happens automatically. In Kind, nothing is there to respond.

kubectl get svc -o wide
NAME             TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
alpaca-prod      LoadBalancer   10.96.96.10    <pending>     8080:31291/TCP   35m

The service controller is just sitting there waiting for a cloud provider that does not exist.

A lot of people reach for kubectl port-forward at this point, but that bypasses the Service entirely and pins every request to a single pod. You can use it to reach your app, but you cannot use it to test load balancing.

This post is for subscribers only

Subscribe to LevelUp I.T. newsletter and stay updated.

Don't miss anything. Get all the latest posts delivered straight to your inbox. It's free!
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!