VM route reflector#
Le route reflector est le point de rendez-vous du plan de contrôle : plutôt que de maintenir une session entre chaque paire d’hyperviseurs, chaque hyperviseur ouvre une session vers le route reflector, qui redistribue.
Il tourne lui-même en machine virtuelle, ce qui crée une dépendance circulaire à traiter explicitement : la VM qui porte le plan de contrôle du cluster est hébergée par le cluster.
Adressage#
Le route reflector est sur le même segment L2 que les hyperviseurs, avec trois adresses :
Adresse |
Interface |
Rôle |
|---|---|---|
une adresse de |
interface principale |
celle de n’importe quelle machine du segment ; les réponses aux hyperviseurs en partent |
|
interface principale, adresse secondaire |
le lien avec les routeurs de cluster ( |
|
|
|
Les hyperviseurs ne connaissent que la loopback : ils ouvrent leur session vers 10.255.255.1
par leur passerelle (192.168.14.1), les routeurs l’ayant apprise du route reflector en eBGP.
Aucune adresse d’hyperviseur n’est déclarée côté route reflector : il accepte toute session venant
du segment (bgp listen range).
L’adresse du lien est une adresse secondaire de l’interface principale, pas une interface à
part : même L2, même MAC sur le fil, une interface de moins qu’avec un ipvlan. Elle doit
survivre aux renouvellements DHCP de l’adresse principale : la déclarer dans la configuration
réseau du système, pas la poser à la main.
Note
Non vérifié sur l’image de production. Avec NetworkManager, la forme attendue est :
nmcli connection modify <connexion> +ipv4.addresses 169.254.0.3/28
nmcli connection add type dummy ifname lo1 con-name lo1 \
ipv4.method manual ipv4.addresses 10.255.255.1/32 ipv6.method disabled
Ces commandes restent à valider sur l’image golden.
Configuration de FRR#
bgpd et bfdd activés dans /etc/frr/daemons.
frr defaults traditional
hostname rr1
log syslog informational
!
ip prefix-list RR-LOOPBACK-OUT seq 10 permit 10.255.255.1/32
!
route-map NO-IN deny 999
description deny
exit
!
router bgp 65000
no bgp default ipv4-unicast
bgp router-id 10.255.255.1
bgp cluster-id 10.255.255.1
neighbor CLUSTER peer-group
neighbor CLUSTER remote-as 65100
neighbor CLUSTER bfd
neighbor 169.254.0.1 peer-group CLUSTER
neighbor 169.254.0.1 description router-1
neighbor 169.254.0.2 peer-group CLUSTER
neighbor 169.254.0.2 description router-2
neighbor fabric peer-group
neighbor fabric remote-as 64600
neighbor fabric local-as 64600 no-prepend replace-as
neighbor fabric capability extended-nexthop
neighbor fabric update-source 10.255.255.1
bgp listen range 192.168.14.0/24 peer-group fabric
bgp listen limit 200
!
address-family ipv4 unicast
network 10.255.255.1/32
neighbor CLUSTER activate
neighbor CLUSTER prefix-list RR-LOOPBACK-OUT out
neighbor CLUSTER route-map NO-IN in
exit-address-family
!
address-family l2vpn evpn
neighbor fabric activate
neighbor fabric route-reflector-client
exit-address-family
!
exit
!
Ce qu’elle établit :
Routeurs de cluster (groupe
CLUSTER) : eBGP vers l’AS 65100, avec BFD, en IPv4 unicast. Le route reflector n’annonce que sa loopback (RR-LOOPBACK-OUT) et n’accepte rien (NO-IN) : il ne reçoit aucune route des routeurs.Hyperviseurs (groupe
fabric) : voisins dynamiques, toute session venant de192.168.14.0/24étant acceptée, jusqu’à 200.local-as 64600 no-prepend replace-asfait que, du point de vue des hyperviseurs, la session est en iBGP dans l’AS 64600 — celui de leur configuration — alors que le route reflector est en AS 65000 face aux routeurs.EVPN : seule famille activée vers les hyperviseurs, qui sont ses clients (
route-reflector-client) : il réfléchit les routes EVPN de chacun vers tous les autres.
Avertissement
Les tunnels ne survivent pas à la perte du route reflector. Avec un seul route reflector
et sans graceful-restart, à l’arrêt de FRR sur le route reflector, la session EVPN des
hyperviseurs tombe aussitôt, FRR retire les routes apprises et, avec elles, le VTEP distant et l’entrée d’inondation du VXLAN — plus
aucun paquet ne passe entre hyperviseurs, à 30 s comme à 90 s. Au redémarrage de FRR sur le
route reflector, VTEP distant et trafic reviennent 31 s plus tard. Le trafic entre VM d’un
même hyperviseur n’est pas concerné. La redondance (deux route reflectors) ou
graceful-restart sont les deux leviers ; ni l’un ni l’autre n’est encore qualifié.
Note
À rédiger. Reste à documenter :
la création de la VM : ressources, subnet et mode utilisés (
bridge, pour pouvoir la lancer sur n’importe quel hyperviseur), et s’il s’agit d’une VM créée par l’agent comme les autres ou d’un cas particulier — l’image, elle, est l’image golden de Construction de l’image qcow2 ;la redondance : une seule VM route reflector, ou deux, et sur quels hyperviseurs ;
la procédure de reconstruction — l’état du cluster pendant l’absence du route reflector est décrit ci-dessus : plus de trafic entre hyperviseurs ;
la procédure d’amorçage : ce qui fonctionne, et dans quel ordre, quand on démarre un cluster entier depuis zéro — le premier hyperviseur n’a pas de session FRR établie tant que cette VM n’existe pas, cf. Premier hyperviseur.
Points de vigilance#
Avertissement
L’agent ne réattache pas les VM existantes à son démarrage, et les processus QEMU ne survivent pas à un redémarrage de l’hyperviseur. Le redémarrage de l’hyperviseur qui héberge le route reflector est donc un événement à part entière : la procédure de remise en service doit être écrite, et testée.
Avertissement
instance-id valant le nom de la VM, recréer la VM route reflector sous le même nom sur le
même disque fait que cloud-init ne rejoue pas le user-data. Cf.
Metadata et cloud-init.