<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
  <channel>
    <title>Blog Cardinal Codes</title>
    <link>https://cardinalcodes.com/fr/blog/</link>
    <description>Ingénierie souveraine, réseaux carrier-grade, Kubernetes bare-metal et IA on-premise : les notes de terrain de Cardinal Codes.</description>
    <language>fr</language>
    <lastBuildDate>Sun, 20 Sep 2026 01:12:03 GMT</lastBuildDate>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="https://cardinalcodes.com/fr/rss.xml"/>
    <creativeCommons:license>https://creativecommons.org/licenses/by/4.0/</creativeCommons:license>
    <item>
      <title>Souverain de conception, pas de slogan</title>
      <link>https://cardinalcodes.com/fr/blog/sovereign-by-design/</link>
      <guid isPermaLink="true">https://cardinalcodes.com/fr/blog/sovereign-by-design/</guid>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <author>contact@cardinalcodes.com (Cardinal Codes)</author>
      <description>Pourquoi un labo indépendant construit toute sa stack sur une infrastructure qu&apos;il contrôle, et ce que la souveraineté coûte réellement en termes d&apos;ingénierie.</description>
      <content:encoded><![CDATA[<p>Chaque éditeur vend de la souveraineté désormais. Le mot a tellement dérivé de son sens qu’il couvre désormais n’importe quoi hébergé dans une juridiction dont le drapeau vous plaît. Nous l’employons dans un sens plus strict : <strong>vous êtes souverain d’un système quand vous pouvez l’exploiter, l’auditer, le reconstruire et l’arrêter sans demander la permission de personne.</strong></p>
<p>Cette définition a des conséquences. Elle exclut la commodité avant d’exclure les fournisseurs.</p>
<h2 id="ce-que-cela-signifie-concrètement">Ce que cela signifie concrètement</h2>
<p><strong>Concrètement, une infrastructure souveraine repose sur quatre engagements non négociables : les données restent là où vous les posez sans sous-traitant dans le chemin ; la piste d’audit est locale et physique ; chaque système est reproductible depuis un dépôt Git sur du matériel que vous pouvez toucher ; et chaque composant a un chemin de sortie documenté avant son adoption.</strong></p>
<p>Pour nous, une infrastructure souveraine, c’est quatre engagements :</p>
<ol>
<li><strong>Les données restent là où vous les avez posées.</strong> Aucun sous-traitant dans le chemin de requête sans décision explicite, et vous savez le nommer.</li>
<li><strong>La piste d’audit est locale.</strong> Journaux, prompts, documents : si un régulateur ou un client demande où cette donnée vit physiquement, la réponse est une baie, pas une région.</li>
<li><strong>Reconstruire est une commande, pas un projet.</strong> Tout ce que nous opérons est décrit en code et reproductible depuis un dépôt Git sur du matériel que l’on peut toucher.</li>
<li><strong>La sortie est conçue à l’entrée.</strong> Si un composant disparaît demain, le chemin de migration est documenté avant l’adoption du composant.</li>
</ol>
<p>Rien de tout cela n’est exotique. Les opérateurs réseau carrier-grade travaillent ainsi depuis des décennies. Ce qui a changé, c’est que l’outillage convient enfin aux petites équipes : Talos Linux pour un Kubernetes déclaratif, Ansible pour le métal, GitOps pour le cycle de vie.</p>
<h2 id="ce-que-cela-coûte">Ce que cela coûte</h2>
<p><strong>La souveraineté échange du labeur opérationnel contre du contrôle : vous patchez vos propres hyperviseurs, possédez l’astreinte de 3 h du matin pour un disque en fin de vie, et maintenez la rotation TLS et le capacity planning qu’une plateforme managed absorberait. Le compromis vaut le coup pour les charges qui comptent : données de planification, télémétrie, identité client. Pas pour tout.</strong></p>
<p>L’honnêteté exige l’étiquette de prix. La souveraineté échange du labeur opérationnel contre du contrôle. Vous patcherez vos propres hyperviseurs. Vous posséderez l’astreinte de 3 h du matin quand un disque décidera de prendre sa retraite avant l’heure. Vous maintiendrez la rotation TLS, les restaurations de sauvegarde et le capacity planning qu’une plateforme managée absorberait invisiblement.</p>
<p>Notre position est que ce compromis vaut le coup <strong>pour les charges de travail qui comptent</strong> : données de planification, télémétrie de sécurité, tout ce qui touche à l’identité d’un client. Pour le reste, le pragmatisme est une qualité, pas un renoncement. Le savoir-faire, c’est de tracer la ligne délibérément au lieu de l’hériter d’un deck marketing.</p>
<h2 id="pourquoi-cela-compte-pour-lia">Pourquoi cela compte pour l’IA</h2>
<p><strong>Les grands modèles de langage rendent la souveraineté urgente : les équipes collent contrats, identifiants et données clients dans des chats externes avec pour seule protection un accord de sous-traitance. La réponse : inférence locale pour les documents sensibles, passerelle d’assainissement devant toute API externe, et évaluations reproductibles versionnées comme tout artefact.</strong></p>
<p>Les grands modèles de langage ont déplacé les lignes. Des équipes collent désormais contrats, identifiants et données clients dans des fenêtres de chat hébergées on ne sait où, et la réponse conformité est un accord de sous-traitance que personne ne lit.</p>
<p>Les mêmes quatre engagements s’appliquent, presque inchangés :</p>
<ul>
<li>Inférence locale pour les documents sensibles, avec des poids de modèle que l’on peut épingler et auditer.</li>
<li>Une passerelle d’assainissement devant toute API externe, masquant les identifiants avant l’envoi.</li>
<li>Des campagnes d’évaluation reproductibles, avec prompts et sorties versionnés comme n’importe quel artefact.</li>
</ul>
<p>C’est le raisonnement derrière les produits que nous construisons chez Cardinal Codes, et c’est le fil que vous trouverez dans chaque article de ce blog : les décisions d’infrastructure comme décisions de souveraineté.</p>
<p>Bienvenue dans les notes de terrain.</p>]]></content:encoded>
      <dc:date>Wed, 02 Sep 2026 00:00:00 GMT</dc:date>
      <category>sovereignty</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Communautés BGP, quelques leçons du terrain</title>
      <link>https://cardinalcodes.com/fr/blog/bgp-communities-field-notes/</link>
      <guid isPermaLink="true">https://cardinalcodes.com/fr/blog/bgp-communities-field-notes/</guid>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <author>contact@cardinalcodes.com (Cardinal Codes)</author>
      <description>Ingénierie de trafic avec les communautés BGP entre deux datacenters : ce qui a marché, quelle astreinte a sonné la nuit, et les checklists qui en sont sorties.</description>
      <content:encoded><![CDATA[<p>Les communautés sont la plus vieille astuce du livre BGP, et toujours la plus sous-utilisée. Une communauté, c’est juste une étiquette que l’on attache à une route, mais les upstreams honorent un vocabulaire de plus en plus riche : prepend, épinglage de local-preference, blackhole, indications de région anycast. Utilisées cohéremment, elles transforment un setup bi-datacenter d’un « espoir de bascule » en un véritable volant de pilotage.</p>
<p>Cet article rassemble ce que nous avons vérifié en production lors de l’ingénierie d’un peering redondant pour un environnement opérateur, anonymisé comme toujours.</p>
<h2 id="le-socle">Le socle</h2>
<p><strong>La topologie de référence est deux datacenters annonçant le même préfixe RIPE /32 via deux transitaires chacun, reliés par un interconnect privé pour la synchronisation. Toute la politique de steering tient en quatre valeurs de communautés BGP : prepend x1, x2, x3 et un blackhole protégé, appliquées cohéremment sur les deux sites.</strong></p>
<p>La topologie est volontairement ennuyeuse : deux datacenters, un bloc RIPE /32 annoncé des deux côtés, interconnect privé pour la synchro. Les deux sites reçoivent les tables complètes de deux transitaires chacun. Ce qui est intéressant, ce n’est pas le schéma, c’est la politique qui y est attachée.</p>
<figure>
  <img src="/blog/bgp-topology.svg" alt="Deux datacenters annonçant le même préfixe /32 via deux transitaires, avec un interconnect privé et une politique de prepend par communautés" loading="lazy" width="640" height="300">
  <figcaption>Toute la politique de steering tient en quatre valeurs de communautés.</figcaption>
</figure>
<h2 id="les-communautés-qui-ont-fait-leurs-preuves">Les communautés qui ont fait leurs preuves</h2>
<p><strong>Trois conventions de communautés BGP ont porté tout le poids du steering : une échelle de prepend canonique (x1, x2, x3) détenue par un seul ASN, une réécriture des communautés entrantes en bordure dans cet espace canonique, et une communauté blackhole à débit limité protégée comme une règle de pare-feu. L’idée clé : maîtriser le vocabulaire de bout en bout.</strong></p>
<p>Trois conventions ont porté tout le poids :</p>
<pre><code class="language-text"># Lisible, stable, documenté dans la base de peering
65000:100   prepend x1 vers le voisin marqué
65000:200   prepend x2
65000:300   prepend x3
65000:666   blackhole (filtre URF, protégé par max-prefix)
</code></pre>
<p>Deux détails comptent plus que le schéma lui-même :</p>
<ol>
<li><strong>Un seul ASN possède le vocabulaire.</strong> Mélanger votre numérotation avec la table de communautés de chaque transit, c’est s’assurer des astreintes de 3 h du matin. On réécrit les communautés entrantes en bordure dans notre espace canonique, et seul l’espace canonique apparaît dans les route-maps.</li>
<li><strong>La communauté blackhole est gardée.</strong> Elle n’est annoncée qu’aux upstreams qui la filtrent correctement, et elle est limitée en débit de notre côté. Une communauté qui supprime du trafic est assez puissante pour mériter la même revue qu’une règle de pare-feu.</li>
</ol>
<h2 id="les-checklists">Les checklists</h2>
<p><strong>Deux artefacts opérationnels sont nés d’incidents de production : une procédure de drain par service et par direction qui déplace le trafic avec les communautés BGP avant de toucher aux sessions, avec les compteurs de paquets attendus à chaque étape, et un cron « prove it » de sondes synthétiques depuis l’extérieur des deux sites qui alerte quand le chemin gagnant diverge du chemin attendu.</strong></p>
<p>Après l’astreinte inévitable (une maintenance où les annonces d’un site étaient retirées une minute entière avant que celles de l’autre site ne soient acceptées, laissant une fenêtre de rien), deux artefacts ont émergé :</p>
<ul>
<li><strong>Une procédure de drain</strong> : par service, par direction, les étapes pour déplacer le trafic avec les communautés avant de toucher aux sessions, avec les compteurs de paquets attendus à chaque étape.</li>
<li><strong>Un cron « prove it »</strong> : des sondes synthétiques depuis l’extérieur des deux sites qui alertent quand le chemin gagnant n’est pas celui prévu. Du steering sans observation, c’est juste de la latence avec de la confiance en plus.</li>
</ul>
<h2 id="ce-que-nous-ferions-différemment">Ce que nous ferions différemment</h2>
<p><strong>Démarrer en actif-actif dès le premier jour avec une préférence par communautés au lieu de primaire/secours. Les configurations de secours s’ossifient vite : le jour où vous en avez besoin, elles décrivent un réseau qui n’existe plus. Et traitez votre politique de communautés comme de la documentation exécutable : l’écrire fait partie de la livrer.</strong></p>
<p>Annoncer depuis les deux sites dès le premier jour avec des prepends, au lieu de démarrer en primaire/secours et d’évoluer ensuite. Les configurations de secours s’ossifient : le jour où vous en avez besoin, elles décrivent un réseau qui n’existe plus. L’actif-actif avec préférence par communautés se dégrade plus gracieusement que l’actif-n’importe-quoi.</p>
<p>Si vous ne devez retenir qu’une chose : votre politique de communautés n’est pas de la configuration, c’est de la documentation qui s’exécute. Traitez sa rédaction comme une partie de sa livraison.</p>]]></content:encoded>
      <dc:date>Wed, 26 Aug 2026 00:00:00 GMT</dc:date>
      <category>bgp</category>
      <category>networking</category>
      <category>infrastructure</category>
      <category>case-study</category>
    </item>
  </channel>
</rss>
