Dans les articles précédents, nous avons pu explorer les types de services fournis par Kubernetes. Notamment le type Load Balancer qui ne peut fonctionner qu'avec l'aide de composant externe de type Load Balancers. Nous avons vu que dans un environnement Cloud Service Provider, la fourniture et la synchronisation des Load Balancers externes se faisait facilement via des mécanismes d'automatisation embarqués. Lorsque l'on travaille avec des implémentations de Nodes On Premise sur du Bare Metal ou sur des VM, les services de types Load Balancer nécessitent des composants additionnels pour fournir un mécanisme d'adresse virtuelle (VIP).
Dans ce post, nous allons nous intéresser à l'implémentation de Metal LB.

Ainsi suite à une application de service de type Load Balancer sur un Node en mode VM, le champs external IP reste en état "Pending". Pour répondre à ce problème, Metal LB offre une implémentation de Load Balancer qui s'intègre avec les équipements réseaux standards.

Pour cela, Metal LB utilise deux principales fonctionnalités : l'Allocation d'adresse et l'annoncement externe.

Allocation d'Adresse

Dans un environnement Cloud Provider, le fait de demander un Load Balancer va provoquer l'assignement d'une adresse IP pour vous. Dans un environnement Bare-metal, Metal LB est responsable de cet allocation.
C'est à vous de fournir un Pool d'adresse IP qui pourra être utilisé pour allouer les adresses. La gestion des adresses est réalisée par Metal LB qui commissionne et décommissionne les adresses lors du cycle de vie d'un service LB.

Annoncement Externe

Une fois qu'une adresse est allouée à un service, le réseau externe doit savoir qu'elle existe et doit pouvoir y accéder. Metal LB utilise pour cela deux méthodes, Niveau 2 avec ARP/NDP et niveau 3 avec BGP.

Méthode de niveau 2

En mode niveau 2, l'un des Nodes du cluster prend le contrôle et utilise ARP (pour IPv4) ou NDP (pour IPv6) pour rendre ces IPs joignables sur le réseau local.

Ce mécanisme a l'avantage d'être simple et de fonctionner sans avoir besoin de rajouter des fonctionnalités avancées sur le réseau externe.

D'un point de vue Load Balancing, ce n'est pas la méthode la plus optimisée car dans ce mode, l'intégralité du trafic sera transmis à un seul Node et c'est Kube-proxy qui s'occupera ensuite de propager le trafic vers les pods concernés par le service.
C'est en fait un mécanisme efficace de failover mais pas de Load Balancing. Si le Node principale n'est plus disponible, un autre Node de la "member list" sera utilisé de façon automatique.

Les deux limitations principales de ce mode sont : l'utilisation d'un seul Node et la potentielle lenteur du Failover.

Pour finir avec ce mode, il ressemble beaucoup à l'usage de Keepalived, qui est sensiblement le même mécanisme, mais avec l'utilisation de VRRP. Metal LB utilise ARP et la "member list" pour assurer la tolérance de panne. Il ne possède donc pas les limitations du protocole VRRP (255 instances load balancer) mais n'est pas interopérable avec les routeurs tierce qui utilisent VRRP.

Méthode de niveau 3 (BGP)

Avec ce mode, tous les Nodes établissent un Peering BGP avec les routeurs Externes afin de diffuser les adresses IP des services LB. Cela permet de mettre en place un mécanisme de Load Balancing et d'appliquer un meilleur contrôle de distribution en s'appuyant sur les mécanismes de Policy BGP.

Avec BGP, le Load Balancing est principalement assuré sur une base "par connexion" grâce à un "packet hash".

Bien que le load balancing soit possible, il est très limité et cela nécessite de mettre en œuvre BGP sur les routeurs externes.

Pour finir sur ce mode, il est intéressant de noter qu'il est possible de déployer BGP via FRR comme backend et cela ajoute quelques fonctionnalités telles que :

  • Sessions BGP avec le support de BFD
  • Support d'IPv6 pour BGP et BFD
  • Multi Protocol BGP

Je reparlerai de FRR dans un article dédié.

Installation et configuration

Pour ce qui est de l'installation et la configuration de Metal LB, je vous laisse regarder la documentation officielle qui est très bien faite.

Dans les prochains articles nous nous intéresserons à Cilium en tant que CNI pour avoir plus de fonctionnalités réseaux et sécurité avancées.