
MetalLB
MetalLB est une solution de load balancing pour les environnements Kubernetes qui n'ont pas accès aux load balancers réseau typiques offerts par les fournisseurs de cloud.
Qu'est-ce que MetalLB ?
MetalLB est un load balancer implémenté en tant qu'application à l'intérieur de votre cluster Kubernetes. Il permet d'exposer les services de votre cluster Kubernetes à l'Internet ou à d'autres réseaux externes de manière similaire à la façon dont les services de type LoadBalancer fonctionnent sur les clouds publics.
Fonctionnalités principales
Load Balancing: MetalLB peut distribuer le trafic entrant entre les pods d'un service Kubernetes, garantissant une distribution équilibrée des requêtes ou des connexions pour améliorer la performance et la disponibilité.
Protocoles de routage: MetalLB supporte deux modes principaux de fonctionnement :
Mode Layer 2: MetalLB peut répondre aux requêtes ARP (Address Resolution Protocol) ou NDP (Neighbor Discovery Protocol pour IPv6) pour les adresses IP allouées aux services, permettant à votre routeur de réseau de diriger correctement le trafic vers les bons pods.
Mode BGP (Border Gateway Protocol): MetalLB peut interagir avec des routeurs exécutant BGP pour annoncer les routes vers les adresses IP allouées aux services, permettant ainsi une intégration plus dynamique et évolutive avec des réseaux plus complexes.
Préparation
Si vous utilisez kube-proxy en mode IPVS, depuis la version 1.14.2 de Kubernetes, vous devrez activer le mode ARP strict.
Notez que vous n'en avez pas besoin si vous utilisez kube-router comme proxy de service, car il active par défaut le mode ARP strict.
Vous pouvez réaliser cela en modifiant la configuration de kube-proxy dans le cluster actuel:
kubectl edit configmap -n kube-system kube-proxyet définissez:
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: trueInstallation
Nous allons faire l'installation avec helm entulisant le repository https://metallb.github.io/metallb
helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallbConfiguration
Pool d'allocation d'adresse
Pour contoler les allocations d'adresse IP au sein de MetalLB et optimiser les ressources réseaux, vous devez créer un fichier reprend ces informations
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: mon-range-ip
namespace: metallb-system
spec:
addresses:
- 192.168.10.0/24Pour prévenir l'allocation automatique, vous pouvez rajouter l'option autoAssign sur false
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: mon-range-ip
namespace: metallb-system
spec:
addresses:
- 192.168.10.0/24
autoAssign: falseSépcifier le mode L2
En mode L2 un seul noeud est élu pour annoncer l'IP
Afin de limiter l'ensemble des noeuds pour une anonce donnée le selecteur de noeuds doit etre défini. Pour cela nous allons spécifier dans le L2Advertisement le ipAddressPools et l'interface du noeud.
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: mon-L2Advertisement
namespace: metallb-system
spec:
ipAddressPools:
- mon-range-ip
interfaces:
- eth0Cette L2Advertisement fera en sorte que MetalLB annonce les services associés aux IPs de mon-range-ip uniquement depuis les interfaces eth0 de tous les nœuds.
Mis à jour