f-50: docs: schéma d'architecture du cluster — routeurs, route reflector, hyperviseurs, plans de données et de contrôle #50

Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
GnomeZworc 2026-10-04 17:44:40 +02:00
commit 6bf0435ea4
Signed by: nicolas.boufideline
GPG key ID: 4406BBBF8845D632
5 changed files with 316 additions and 110 deletions

View file

@ -0,0 +1,154 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 736" width="1000" height="736" role="img" aria-label="Architecture du cluster : routeurs, route reflector, hyperviseurs, plans de données et de contrôle">
<style>
.lbl { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; font-size: 14px; fill: #1f2328; }
.sub { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; font-size: 11px; fill: #57606a; }
.grp { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; font-size: 12px; font-weight: 600; fill: #57606a; letter-spacing: .04em; }
.ctrlt { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; font-size: 11px; fill: #8250df; }
.datat { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; font-size: 11px; font-weight: 600; fill: #0969da; }
.box { fill: #ffffff; stroke: #8c959f; stroke-width: 1.5; }
.group { fill: #f6f8fa; stroke: #d0d7de; stroke-width: 1.5; }
.pill { fill: #ffffff; stroke: #57606a; stroke-width: 1.5; }
.bus { stroke: #57606a; stroke-width: 4; fill: none; stroke-linecap: round; }
.link { stroke: #57606a; stroke-width: 1.8; fill: none; }
.ctrl { stroke: #8250df; stroke-width: 1.6; fill: none; stroke-dasharray: 5 4; }
.data { stroke: #0969da; stroke-width: 3; fill: none; }
.made { stroke: #8c959f; stroke-width: 1.5; fill: none; stroke-dasharray: 2 3; }
.head-ctrl { fill: #8250df; }
.head-data { fill: #0969da; }
.head-made { fill: #8c959f; }
</style>
<defs>
<marker id="a-ctrl" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="head-ctrl" d="M0 0 L10 5 L0 10 z"/></marker>
<marker id="a-data" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path class="head-data" d="M0 0 L10 5 L0 10 z"/></marker>
<marker id="a-made" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="head-made" d="M0 0 L10 5 L0 10 z"/></marker>
</defs>
<rect class="group" x="40" y="20" width="400" height="144" rx="8"/>
<text class="grp" x="60" y="44">ROUTEURS DE CLUSTER · AS 65100</text>
<rect class="box" x="60" y="66" width="170" height="60" rx="6"/>
<text class="lbl" x="145" y="92" text-anchor="middle">routeur 1</text>
<text class="sub" x="145" y="111" text-anchor="middle">169.254.0.1/28</text>
<rect class="box" x="250" y="66" width="170" height="60" rx="6"/>
<text class="lbl" x="335" y="92" text-anchor="middle">routeur 2</text>
<text class="sub" x="335" y="111" text-anchor="middle">169.254.0.2/28</text>
<rect class="group" x="560" y="20" width="400" height="144" rx="8"/>
<text class="grp" x="580" y="44">VM ROUTE REFLECTOR · AS 65000</text>
<text class="lbl" x="580" y="70">lo1 · 10.255.255.1/32</text>
<text class="sub" x="580" y="87">router-id, cluster-id, source des sessions EVPN</text>
<text class="lbl" x="580" y="111">169.254.0.3/28</text>
<text class="sub" x="580" y="128">adresse secondaire sur son interface du segment</text>
<text class="sub" x="580" y="150">hébergée par le cluster lui-même</text>
<path class="ctrl" d="M440 92 L560 92"/>
<text class="ctrlt" x="500" y="84" text-anchor="middle">eBGP · BFD (×2)</text>
<text class="ctrlt" x="500" y="108" text-anchor="middle">annonce lo1 seule</text>
<text class="ctrlt" x="500" y="122" text-anchor="middle">n'accepte rien</text>
<path class="link" d="M145 126 L145 196"/>
<path class="link" d="M335 126 L335 196"/>
<path class="link" d="M760 164 L760 196"/>
<path class="bus" d="M40 196 L960 196"/>
<rect class="pill" x="376" y="177" width="216" height="38" rx="19"/>
<text class="lbl" x="484" y="194" text-anchor="middle">segment underlay · L2</text>
<text class="sub" x="484" y="209" text-anchor="middle">192.168.14.0/24 · 169.254.0.0/28</text>
<rect class="group" x="40" y="262" width="430" height="306" rx="8"/>
<text class="grp" x="60" y="284">HYPERVISEUR 1</text>
<rect class="box" x="274" y="298" width="180" height="46" rx="6"/>
<text class="lbl" x="364" y="317" text-anchor="middle">br-000000</text>
<text class="sub" x="364" y="334" text-anchor="middle">uplink · 192.168.14.11</text>
<rect class="box" x="274" y="366" width="180" height="46" rx="6"/>
<text class="lbl" x="364" y="385" text-anchor="middle">vxlan-&lt;vni&gt;</text>
<text class="sub" x="364" y="402" text-anchor="middle">dans br-&lt;subnet&gt;, sans learning</text>
<rect class="box" x="274" y="434" width="180" height="46" rx="6"/>
<text class="lbl" x="364" y="453" text-anchor="middle">netns du VPC</text>
<text class="sub" x="364" y="470" text-anchor="middle">passerelle, DHCP</text>
<rect class="box" x="274" y="502" width="180" height="46" rx="6"/>
<text class="lbl" x="364" y="521" text-anchor="middle">VM</text>
<text class="sub" x="364" y="538" text-anchor="middle">QEMU / KVM</text>
<path class="link" d="M364 344 L364 366"/>
<text class="sub" x="372" y="359">VTEP</text>
<path class="link" d="M364 412 L364 434"/>
<text class="sub" x="372" y="427">veth</text>
<path class="link" d="M364 480 L364 502"/>
<text class="sub" x="372" y="495">tap</text>
<rect class="box" x="56" y="298" width="180" height="70" rx="6"/>
<text class="lbl" x="146" y="321" text-anchor="middle">FRR</text>
<text class="sub" x="146" y="340" text-anchor="middle">bgpd · AS 64600</text>
<text class="sub" x="146" y="356" text-anchor="middle">advertise-all-vni</text>
<rect class="box" x="56" y="434" width="180" height="46" rx="6"/>
<text class="lbl" x="146" y="453" text-anchor="middle">agent</text>
<text class="sub" x="146" y="470" text-anchor="middle">API REST · Badger</text>
<path class="ctrl" d="M236 352 L255 352 L255 389 L272 389" marker-end="url(#a-ctrl)"/>
<text class="ctrlt" x="255" y="345" text-anchor="middle">FDB</text>
<path class="made" d="M236 457 L272 457" marker-end="url(#a-made)"/>
<text class="sub" x="255" y="450" text-anchor="middle">crée</text>
<rect class="group" x="530" y="262" width="430" height="306" rx="8"/>
<text class="grp" x="656" y="284">HYPERVISEUR 2</text>
<rect class="box" x="546" y="298" width="180" height="46" rx="6"/>
<text class="lbl" x="636" y="317" text-anchor="middle">br-000000</text>
<text class="sub" x="636" y="334" text-anchor="middle">uplink · 192.168.14.12</text>
<rect class="box" x="546" y="366" width="180" height="46" rx="6"/>
<text class="lbl" x="636" y="385" text-anchor="middle">vxlan-&lt;vni&gt;</text>
<text class="sub" x="636" y="402" text-anchor="middle">dans br-&lt;subnet&gt;, sans learning</text>
<rect class="box" x="546" y="434" width="180" height="46" rx="6"/>
<text class="lbl" x="636" y="453" text-anchor="middle">netns du VPC</text>
<text class="sub" x="636" y="470" text-anchor="middle">passerelle, DHCP</text>
<rect class="box" x="546" y="502" width="180" height="46" rx="6"/>
<text class="lbl" x="636" y="521" text-anchor="middle">VM</text>
<text class="sub" x="636" y="538" text-anchor="middle">QEMU / KVM</text>
<path class="link" d="M636 344 L636 366"/>
<text class="sub" x="628" y="359" text-anchor="end">VTEP</text>
<path class="link" d="M636 412 L636 434"/>
<text class="sub" x="628" y="427" text-anchor="end">veth</text>
<path class="link" d="M636 480 L636 502"/>
<text class="sub" x="628" y="495" text-anchor="end">tap</text>
<rect class="box" x="764" y="298" width="180" height="70" rx="6"/>
<text class="lbl" x="854" y="321" text-anchor="middle">FRR</text>
<text class="sub" x="854" y="340" text-anchor="middle">bgpd · AS 64600</text>
<text class="sub" x="854" y="356" text-anchor="middle">advertise-all-vni</text>
<rect class="box" x="764" y="434" width="180" height="46" rx="6"/>
<text class="lbl" x="854" y="453" text-anchor="middle">agent</text>
<text class="sub" x="854" y="470" text-anchor="middle">API REST · Badger</text>
<path class="ctrl" d="M764 352 L745 352 L745 389 L728 389" marker-end="url(#a-ctrl)"/>
<text class="ctrlt" x="745" y="345" text-anchor="middle">FDB</text>
<path class="made" d="M764 457 L728 457" marker-end="url(#a-made)"/>
<text class="sub" x="745" y="450" text-anchor="middle">crée</text>
<path class="link" d="M364 298 L364 196"/>
<path class="link" d="M636 298 L636 196"/>
<path class="ctrl" d="M210 298 L210 246 L357 246"/>
<path class="ctrl" d="M371 246 L612 246 L612 164"/>
<path class="ctrl" d="M854 298 L854 164"/>
<text class="ctrlt" x="384" y="240">iBGP l2vpn evpn · AS 64600</text>
<text class="ctrlt" x="862" y="240">iBGP</text>
<path class="data" d="M458 389 L542 389" marker-start="url(#a-data)" marker-end="url(#a-data)"/>
<text class="datat" x="500" y="378" text-anchor="middle">VXLAN</text>
<text class="datat" x="500" y="406" text-anchor="middle">UDP 4789</text>
<path class="link" d="M40 604 L76 604"/>
<text class="sub" x="84" y="608">lien L2 / interface</text>
<path class="data" d="M220 604 L256 604"/>
<text class="sub" x="264" y="608">plan de données : tunnels VXLAN</text>
<path class="ctrl" d="M470 604 L506 604"/>
<text class="sub" x="514" y="608">plan de contrôle : sessions BGP</text>
<path class="made" d="M716 604 L752 604"/>
<text class="sub" x="760" y="608">créé par l'agent</text>
<text class="sub" x="40" y="640">Les hyperviseurs joignent 10.255.255.1 par leur route par défaut : les routeurs l'ont apprise du route reflector en eBGP, sans rien lui renvoyer.</text>
<text class="sub" x="40" y="658">Le route reflector accepte toute session venant de 192.168.14.0/24 (bgp listen range) et réfléchit les routes EVPN entre hyperviseurs.</text>
<text class="sub" x="40" y="676">Chaque FRR en peuple la FDB des VXLAN locaux — intégration de FRR avec les interfaces créées par two : à qualifier (#50, E5).</text>
<text class="sub" x="40" y="694">MTU du segment : 1550 au moins (VXLAN figé à 1500 par l'agent, + 50 octets d'encapsulation) ; 9000 dans le lab.</text>
<text class="sub" x="40" y="712">ASN, loopback et plages : valeurs de production (#50). Adresses des hyperviseurs : celles du lab. Placement de la VM route reflector : à rédiger.</text>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB