Deploying KIND

The documentation for KIND is fantastic and its quick start guide will have you up and running in no time.

Find Address Pool for kube-vip

We will need to find addresses that can be used by kube-vip:

1docker network inspect kind -f '{{ range $i, $a := .IPAM.Config }}{{ println .Subnet }}{{ end }}'

This will return a CIDR range such as and from here we can select a range.

Deploy the kube-vip Cloud Controller

1kubectl apply -f

Add our Address range

1kubectl create configmap --namespace kube-system kubevip --from-literal range-global=

Install kube-vip

Get latest version

We can parse the GitHub API to find the latest version (or we can set this manually)

KVVERSION=$(curl -sL | jq -r ".[0].name")

or manually:

export KVVERSION=vx.x.x

The easiest method to generate a manifest is using the container itself, below will create an alias for different container runtimes.


alias kube-vip="ctr run --rm --net-host$KVVERSION vip /kube-vip"


alias kube-vip="docker run --network host --rm$KVVERSION"

Deploy kube-vip as a DaemonSet

1kube-vip manifest daemonset --services --inCluster --arp --interface eth0 | kubectl apply -f -


1kubectl apply -f
1kubectl expose deployment nginx-deployment --port=80 --type=LoadBalancer --name=nginx
1kubectl get svc
2NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
3kubernetes   ClusterIP       <none>          443/TCP        74m
4nginx        LoadBalancer   80:31236/TCP   6s