Skip to main content
Version: 1.11.0

Provisioning an external IP address for local Kubernetes

Some platforms for deploying local Kubernetes clusters don't have the ability to provide external IP addresses when creating Kubernetes services with the service type LoadBalancer. The following steps enable this ability for a few platforms. You should follow these steps before installing Epinio.


The provision of LoadBalancer IP is enabled by default.


  • Install jq

  • Install and configure MetalLB

  kubectl apply -f
kubectl apply -f
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

SUBNET_IP=`docker network inspect kind | jq -r '.[0].IPAM.Config[0].Gateway'`
# Use the last few IP addresses

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
namespace: metallb-system
name: config
config: |
- name: default
protocol: layer2
- ${SUBNET_IP}/28


Install and configure MetalLB:

INTERFACE=`ip route | grep default | awk '{print $5}'`
IP=`ifconfig $INTERFACE | sed -n '2 p' | awk '{print $2}'`
microk8s enable metallb:${IP}/16

Digital Ocean

When installing Epinio on Rancher-provisioned RKE2 or RKE1 clusters on Digital Ocean, you might see this error message:

error installing Epinio:
timed out waiting for LoadBalancer IP on traefik service
Ensure your kubernetes platform has the ability to provision a LoadBalancer IP address.

If this happens you need to configure RKE/RKE2 with an external cloud provider such as the Digital Ocean CC Manager.