Mettre en place MetalLB
MetalLB s'intègre à votre cluster Kubernetes et fournit une implémentation d'équilibrage de charge réseau. En bref, il vous permet de créer des services Kubernetes de type LoadBalancer dans des clusters qui ne s'exécutent pas sur un fournisseur de cloud et qui ne peuvent donc pas simplement s'appuyer sur des produits payants pour fournir des équilibreurs de charge.
Introduction
Lorsqu'on utilise Kubernetes en configuration "Bare metal", comme c'est le cas ici, et que l'on configure un "Ingress Controller" pour exposer les services, l'Ingress n'a pas de "External IP", c'est un peu la loose.
Pour pallier à ce problème, il est nécessaire d'installer une ressource de type "Load Balancer". Dans cet article, nous allons voir comment configurer MetalLB et Calico pour y parvenir.
Important
Si vous utilisez kube-proxy en mode IPVS, depuis Kubernetes v1.14.2 vous devez activer le mode ARP strict.
Notez que vous n'avez pas besoin de cela si vous utilisez kube-router comme service-proxy car il active le mode strict ARP par défaut.
Vous pouvez y parvenir en éditant la configuration de kube-proxy dans le cluster actuel :
kubectl edit configmap -n kube-system kube-proxy
Définir :
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true
kubectl get cm -n kube-system kube-proxy -o yaml
mode: "ipvs"
Kube-proxy est en IPVS.
Installation des manifests
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.7/config/manifests/metallb-native.yaml
metallb-system
. Les composants du manifeste sont :
- Le déploiement
metallb-system/controller
. Il s'agit du contrôleur de la grappe qui gère l'attribution des adresses IP. - Le daemonset
metallb-system/speaker
. Il s'agit du composant qui utilise le(s) protocole(s) de votre choix pour rendre les services accessibles.
Les comptes de service pour le contrôleur et le haut-parleur, ainsi que les autorisations RBAC dont les composants ont besoin pour fonctionner.
Configuration avec Calico et l'utilisation Layer 2 configuration
J'ai identifié un Issue très galère qui empeche la création de la ressource IPAddressPool
pour la pool d'addresse utiliser par MetalLB & de la ressource L2Advertisement
.
Après avoir appliquer le manifest, on va desactiver le "WebHook" qui bloque a chaque fois la création de ces ressources.
Merci Github, Reddit et autre forums obscure qui m'ont permis de trouver une solution viable !
- On va récupérer la configuration du webhook du pod controller.
kubectl -n metallb get validatingwebhookconfiguration -o yaml > patch-webhook-metallb.yaml
patch-webhook-metallb.yaml
.
Et au niveau de
name: metallb-webhook-service
namespace: metallb-system
path: /validate-metallb-io-v1beta1-ipaddresspool
port: 443
failurePolicy: Fail
service:
name: metallb-webhook-service
namespace: metallb-system
path: /validate-metallb-io-v1beta1-l2advertisement
port: 443
failurePolicy: Fail
matchPolicy: Equivalent
Le
failurePolicy: Fail
on le passe àfailurePolicy: Ignore
Il faut appliquer le manifest patcher.
kubectl apply -f patch-webhook-metallb.yaml
Configuration MetalLB
Maintenant qu'on a fait l'installation on va créer nos ressources qui sera utiliser par les Ingress Controler
.
Création IPAddressPool
Crée le fichier ippools.yaml :
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
namespace: metallb-system
name: ippool
spec:
addresses:
- 1X.X.X.90-1X.X.X.101
- 10.103.1.0/24
1X.X.X.90-1X.X.X.101
, et la range qui sera attribué à nos ingress-controller.
Le subnet 10.103.1.0/24
, correspond à l'utilisation interne.
On applique :
kubectl apply -f ippools.yaml
Création L2Advertisement
Le L2Advertisement s'occupe de répondre aux requêtes ARP. Ce n'est pas du load balancing, et ce n'est pas parfait, mais c'est simple à mettre en place. On pourrait aussi utiliser le BGP, mais un autre jours....
Crée le fichier l2adv.yaml
:
kind: L2Advertisement
metadata:
name: arpsetup
namespace: metallb-system
spec:
ipAddressPools:
- ippool
On applique :
kubectl apply -f `l2adv.yaml`
Exploitation
Il faudra lire l'article : Installation Traefik