Skip to main content

Install MetalLB

MetalLB est un service de load-balancer pour cluster bare metal Kubernetes.

Il permet de configurer un service load balancer avec les services qui seront déployés sur le cluster. Ce service permet de compenser les inconvénients des outils "NodePort" et "externalIPs", qui limitent une bonne utilistion en production.

Lien vers la documentation officielle: https://metallb.universe.tf/installation/

Installation de MetalLB

Ces étapes sont à faire sur la machine Master uniquement.

Prérequis

Si vous utiliser kube-proxy en mode IPVS, depuis Kubernetes v1.14.2 il faut obligatoirement activer le mode strictARP.

sudo kubectl edit configmap -n kube-system kube-proxy

Et modifier les lignes suivantes:

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true

Récupération de l'outil

Nous allons créer un dossier contenant les fichiers de configuration de MetalLB. Puis télécharger et exécuter les fichiers yaml.

mkdir metallb
cd metallb
wget https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/namespace.yaml
wget https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/metallb.yaml

sudo kubectl apply -f namespace.yaml
sudo kubectl apply -f metallb.yaml

Si c'est la première fois que vous installer MetalLB sur le cluster, il faut créer un secret spécifique (cette action n'est donc pas à faire en cas de réinstallation ou de mise à jour).

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

Pour controler que l'installation c'est correctement déroulée:

sudo kubectl get pods -n  metallb-system -o wide

La réponse de l'exécution doit donner:

  • 1 controller
  • 1 speaker par node

Tous les pods doivent avoir le status running.

metallb pods

Configuration

Dans ce tuto nous allons utiliser la configuration la plus simple à mettre en place: layer2. D'autres configurations sont disponibles ici (ex: BGP).

Il suffit de créer un fichier metallb-config.yaml.

sudo nano metallb-config.yaml

Et de modifier la range IP selon votre reseau.

apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.4.150-192.168.4.180

Et d'appliquer le fichier.

sudo kubectl apply -f metallb-config.yaml

Féliciations 🎉 !! L'installation de MetalLB est finie (avouez que c'est plutôt simple).

Utilisation

Pour bénéficier de l'attribution automatique d'IP (attribution d'une externalIp) de MetalLB il suffit simplement de renseigner dans votre service Kubernetes le type LoadBalancer.

Comme dans l'exemple ci dessous.

apiVersion: v1
kind: Service
metadata:
name: your-service
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: your-app
type: LoadBalancer