3.16

Voir en anglais

3.16 Passerelles API et maillage de services

Vue d’ensemble et motivation

Au moment où vous divisez un programme en de nombreux services, une nouvelle question apparaît : qui est responsable du trafic entre eux, et du trafic entrant de l’extérieur ? Vous pouvez répondre mal à cette question en dispersant les mêmes préoccupations (authentification, nouvelles tentatives, délais d’expiration, limites de débit, journalisation) dans chaque service à la main, ou vous pouvez y répondre bien en poussant ces préoccupations dans une couche partagée que chaque service hérite gratuitement. Ce chapitre porte sur deux telles couches. Une passerelle API se trouve à la porte d’entrée et gère le trafic entrant depuis les clients. Un maillage de services se trouve entre vos services et gère le trafic circulant entre eux. Ils résolvent des problèmes liés à des endroits différents, et confondre les deux est une erreur courante et coûteuse.

L’industrie nomme les deux directions du trafic avec une métaphore de boussole. Le trafic nord-sud est le trafic qui traverse la frontière de votre système : une application mobile, un navigateur, ou un partenaire qui appelle. Le trafic est-ouest est le trafic qui reste à l’intérieur de votre système : le service A appelant le service B appelant le service C pour satisfaire une requête. Une passerelle API est la spécialiste du nord-sud. Un maillage de services est le spécialiste de l’est-ouest. Garder cette distinction nette est l’idée la plus utile de ce chapitre, parce qu’elle vous dit quel outil possède quelle politique, et elle vous empêche de faire le même travail deux fois.

Pour les grandes équipes, ces couches sont comment vous imposez une politique une fois au lieu de cent fois. Quand l’authentification, le chiffrement en transit, et la limitation de débit vivent dans une couche partagée, un correctif de sécurité est livré à chaque service le jour où vous déployez la couche, plutôt que d’attendre une centaine d’arriérés. Dans les contextes d’entreprise et gouvernementaux, cette centralisation est souvent le point : les auditeurs veulent un endroit unique et prouvable où l’accès est vérifié et le trafic est chiffré, et une passerelle ou un maillage partagé leur donne exactement ce point d’imposition de politique. Ce chapitre s’appuie sur les styles architecturaux du chapitre 3.2, les réalités des systèmes distribués du chapitre 3.3, et les fondamentaux réseau du chapitre 3.13, et les transforme en conseils concrets sur qui gère votre trafic.

Principes clés

  • Séparez le nord-sud (passerelle) de l’est-ouest (maillage) ; laissez chacun posséder sa direction.
  • Poussez les préoccupations transversales dans une couche partagée pour les écrire une fois, pas par service.
  • Adoptez un maillage de services seulement quand le nombre de services rend le câblage par service le coût le plus grand.
  • Définissez un point d’imposition de politique par préoccupation ; ne laissez jamais la passerelle et le maillage faire le même travail.
  • Gardez les services minces : la plateforme gère le transport, le service gère la logique métier.
  • Préférez le réseau basé sur l’identité et zéro confiance à la confiance basée sur la position réseau.
  • Achetez la complexité opérationnelle d’un maillage les yeux ouverts, et mesurez si cela rapporte.

Recommandations

Comprendre ce que fait une passerelle API

Une passerelle API est un point d’entrée unique qui se trouve devant vos services et médie chaque requête du monde extérieur. Dans sa forme la plus simple, c’est un proxy inverse intelligent (un serveur qui reçoit les requêtes client et les transmet au bon backend), mais une passerelle mérite son nom en faisant bien plus que transmettre. Elle route chaque requête vers le bon service basé sur le chemin, l’hôte, ou les en-têtes. Elle authentifie l’appelant (vérifie qui il est) et autorise la requête (vérifie ce qu’il peut faire), pour qu’un service derrière elle puisse faire confiance qu’une requête a déjà passé la porte d’entrée. Elle impose la limitation de débit (plafonner les requêtes par client dans le temps) et les quotas (plafonner l’usage total sur une fenêtre plus longue) pour qu’un client bruyant ou abusif ne puisse pas affamer le reste.

Une passerelle refaçonne aussi le trafic. La transformation de requête réécrit les en-têtes, traduit entre protocoles, ou adapte le format d’un ancien client aux attentes d’un nouveau service. La composition d’API permet à la passerelle de ventiler une seule requête entrante vers plusieurs services et de coudre leurs réponses en une seule, pour qu’un client fasse un appel au lieu de six. Le support de versionnage vous permet d’exécuter v1 et v2 d’une API côte à côte et de router chaque client vers la version qu’il attend, ce qui vous achète de la marge pour évoluer sans casser personne. Concentrer ces préoccupations à la périphérie garde vos services concentrés sur la logique métier et vous donne un endroit pour observer, sécuriser, et limiter tout ce qui entre. La conception des API que la passerelle protège est le sujet du chapitre 2.3, et les vérifications d’identité qu’elle effectue s’appuient sur le chapitre 4.7.

Utiliser le motif backend-for-frontend pour les clients divergents

Une seule API à usage général sert souvent une application web, une application mobile, et des intégrations partenaires à la fois, et elle les sert tous légèrement mal. Le client mobile veut de petites charges utiles et peu d’allers-retours parce que la bande passante et la batterie sont rares ; le client web peut gérer des réponses plus bavardes et plus riches ; le partenaire veut un contrat stable qui ne le surprend jamais. Le motif backend for frontend (BFF) résout cette tension en donnant à chaque classe de client sa propre passerelle mince, sur mesure pour les besoins de ce client, se trouvant devant les services partagés derrière elle.

Un BFF est une passerelle avec une audience plus étroite. Le BFF mobile compose et rogne les réponses pour que l’application fasse un appel efficace ; le BFF web expose une forme plus complète ; le BFF partenaire détient un contrat évoluant lentement et soigneusement versionné. Chaque équipe peut faire évoluer son propre BFF sans attendre les autres, ce qui est souvent le vrai gain, parce que cela découple les équipes client les unes des autres. Le coût est plus de pièces mobiles et de la logique dupliquée à travers les BFF, donc réservez le motif aux cas où les besoins client divergent vraiment. Quand chaque client veut la même chose, une passerelle est plus simple et meilleure.

Comprendre ce que fait un maillage de services

Un maillage de services gère le trafic est-ouest entre vos services, et il le fait sans demander à ces services de changer leur code. Le maillage classique fonctionne en déployant un proxy sidecar (un petit processus proxy qui fonctionne aux côtés de chaque instance de service et intercepte tout son trafic réseau). Votre service pense qu’il parle directement à un autre service ; en réalité, il parle à son sidecar local, qui gère le vrai appel réseau. Parce que chaque requête passe maintenant à travers un proxy que la plateforme contrôle, le maillage peut imposer un comportement uniformément à travers chaque service, dans chaque langage, sans bibliothèque partagée à garder synchronisée.

Qu’est-ce qu’il impose ? Premièrement, le TLS mutuel (mTLS), où les deux côtés de chaque connexion présentent des certificats et chiffrent le trafic, donc les appels service-à-service sont authentifiés et privés par défaut. Deuxièmement, la gestion de trafic : le maillage peut déplacer un petit pourcentage de trafic vers une nouvelle version pour une livraison canari, diviser le trafic par en-tête pour le test, ou miroiter le trafic vers un service fantôme. Troisièmement, la résilience : nouvelles tentatives, délais d’expiration, et disjoncteurs (les motifs du chapitre 2.20) appliqués à la couche plateforme, configurés par politique plutôt que codés dans chaque service. Quatrièmement, l’observabilité : parce que chaque requête passe à travers un proxy, le maillage émet des métriques, journaux, et traces distribuées cohérents pour tout le trafic service-à-service, alimentant les pratiques d’observabilité du chapitre 9.2. L’auteur du service n’écrit rien de tout cela et obtient tout cela.

Connaître le motif sidecar et les alternatives sans sidecar

Le modèle sidecar est élégant mais pas gratuit. Chaque instance de service exécute maintenant un conteneur proxy supplémentaire qui consomme de la mémoire et du CPU, et chaque appel fait deux sauts réseau supplémentaires (dans le sidecar local et hors du distant), ajoutant un peu de latence. À une poignée de services, cette surcharge est invisible ; à travers des milliers de pods, elle devient une vraie ligne dans votre facture de calcul et votre budget de latence. Ce coût a piloté une vague d’approches sans sidecar, ou sans proxy.

Deux directions comptent. L’une déplace les fonctions de maillage hors d’un sidecar par pod et dans un proxy par nœud, pour que de nombreux services sur la même machine partagent un proxy au lieu de chacun exécuter le sien ; cela échange un peu d’isolation contre une grande baisse de surcharge. L’autre approche sans proxy intègre la logique du maillage directement dans le service à travers une bibliothèque mince ou le runtime, retirant entièrement les sauts supplémentaires au coût d’une dépendance par langage. Un développement plus récent pousse certaines fonctions de maillage dans le noyau du système d’exploitation en utilisant eBPF (une technologie pour exécuter des programmes en bac à sable à l’intérieur du noyau Linux), qui peut imposer une politique et collecter de la télémétrie avec moins de surcharge qu’un proxy en espace utilisateur. Vous n’avez pas besoin de parier sur un gagnant aujourd’hui. Vous avez besoin de savoir que la taxe de sidecar est réelle, que des alternatives existent, et que vos choix de plateforme ne devraient pas vous enfermer hors de les adopter plus tard. Ces motifs se trouvent sur la fondation d’orchestration de conteneurs du chapitre 8.3.

Décider quand un maillage mérite sa complexité

Un maillage de services est puissant et vraiment compliqué à exploiter. Il ajoute un plan de contrôle à exploiter, des proxys à mettre à niveau, des certificats à faire pivoter, et une nouvelle couche à déboguer quand une requête disparaît. Cette complexité vaut la peine d’être achetée quand vous avez assez de services pour que câbler ces préoccupations à la main, par service et par langage, coûte plus que d’exploiter le maillage. Le signal approximatif est l’échelle et la diversité polyglotte : des dizaines ou centaines de services, écrits dans plusieurs langages, où une bibliothèque partagée pour mTLS et les nouvelles tentatives serait un cauchemar à garder cohérente. À cette échelle, un maillage se rembourse en uniformité et sécurité prouvable.

Le maillage ne mérite pas sa complexité quand vous avez une poignée de services, un seul langage, ou une petite équipe. Pour un système modeste, une bonne bibliothèque ou un framework peut vous donner mTLS, nouvelles tentatives, et métriques avec bien moins de fardeau opérationnel qu’un maillage complet, et une simple passerelle plus des bibliothèques client sensées couvrent souvent tout ce dont vous avez besoin. Adopter un maillage parce que c’est à la mode, avant que votre échelle ne l’exige, est une façon courante de passer un an à exploiter une infrastructure qui résout un problème que vous n’avez pas. Commencez avec la passerelle, ajoutez des motifs de résilience dans le code ou les bibliothèques, et recourez à un maillage quand le compte de services et de langages rend l’approche par service la plus coûteuse. C’est la même discipline de « est-ce que cela mérite sa complexité » vers laquelle reviennent encore et encore les chapitres cloud et systèmes distribués (3.11 et 3.3).

Éviter le double traitement là où passerelle et maillage se chevauchent

Les passerelles et les maillages se chevauchent, et le chevauchement est là où les équipes se blessent elles-mêmes. Les deux peuvent faire des nouvelles tentatives, les deux peuvent imposer des délais d’expiration, les deux peuvent vérifier l’identité, les deux peuvent collecter de la télémétrie. Si la passerelle réessaie une requête trois fois et que le maillage la réessaie aussi trois fois à chaque saut interne, une nouvelle tentative client peut exploser en des dizaines d’appels backend et transformer un petit accroc en tempête de nouvelle tentative. Si les deux couches imposent un délai d’expiration et que l’interne est plus long que l’externe, l’externe abandonne pendant que l’interne continue de travailler, gaspillant de l’effort sur une réponse que personne ne lira.

La correction est une division du travail claire, consignée et convenue. Assignez chaque préoccupation à exactement une couche. La passerelle possède les préoccupations nord-sud : authentification de l’utilisateur final, limites de débit et quotas externes, transformation de requête, et composition d’API pour les clients. Le maillage possède les préoccupations est-ouest : mTLS service-à-service, nouvelles tentatives internes et disjoncteurs, et déplacement de trafic entre versions de service. Là où une préoccupation pourrait vivre dans l’une ou l’autre, choisissez un propriétaire et faites passer l’autre couche. Configurez les budgets de nouvelle tentative et les hiérarchies de délai d’expiration pour qu’un délai d’expiration externe soit toujours plus long que le travail interne qu’il attend. Le but est que chaque requête ait exactement un endroit qui gère chaque préoccupation, et qu’aucune requête ne soit réessayée, authentifiée, ou journalisée deux fois par accident.

Traiter passerelle et maillage comme des points d’imposition de politique pour la confiance zéro

La raison la plus profonde d’exploiter ces couches est l’architecture de sécurité. La confiance zéro est le principe selon lequel aucune requête n’est fiable à cause d’où elle vient ; chaque requête doit prouver son identité et son autorisation, même à l’intérieur de votre propre réseau. L’ancien modèle faisait confiance à tout ce qui était déjà à l’intérieur du périmètre, ce qui signifiait qu’un service violé pouvait se déplacer librement. La confiance zéro remplace la confiance basée sur la position réseau par une confiance basée sur l’identité à chaque saut, et les passerelles et maillages sont les points d’imposition naturels où cette identité est vérifiée.

La passerelle est le point d’imposition de politique pour l’identité externe : elle vérifie l’utilisateur final ou le partenaire avant que quoi que ce soit n’atteigne vos services. Le maillage est le point d’imposition de politique pour l’identité de charge de travail : chaque service obtient une identité cryptographique, mTLS la prouve à chaque appel, et la politique décide quels services peuvent parler à lesquels. Ensemble, ils vous donnent une défense en profondeur, où une requête est vérifiée à la périphérie et encore entre services, pour qu’une compromission d’un service n’accorde pas de mouvement libre au reste. Dans les déploiements multi-cluster et multi-région, un maillage peut étendre ce tissu d’identité à travers les frontières de cluster, pour qu’un service dans un cluster s’authentifie auprès d’un service dans un autre avec les mêmes garanties mTLS qu’il utilise localement, vous donnant un réseau zéro confiance cohérent même à mesure que l’empreinte se répand. Les fondations d’identité ici se rattachent directement au chapitre 4.7.

Compromis : avantages et inconvénients

ApprocheAvantagesInconvénients
Passerelle APIUn endroit pour l’authentification, les limites de débit, la composition, le versionnageUn point de passage unique à échelonner et garder hautement disponible
Backend for frontendChaque client obtient une API sur mesure, évoluant indépendammentPlus de passerelles à exploiter ; logique dupliquée à travers les BFF
Maillage de services (sidecar)mTLS uniforme, nouvelles tentatives, observabilité sans changement de codeSurcharge de proxy, latence, et un plan de contrôle à exploiter
Maillage sans sidecar / sans proxySurcharge et latence plus basses que les sidecars par podMoins mature ; isolation plus faible ou dépendance par langage
Résilience basée sur bibliothèqueSimple à exploiter ; pas d’infrastructure supplémentaireDuplication par langage ; difficile à garder cohérent à l’échelle
Maillage à travers les clustersIdentité zéro confiance cohérente partoutComplexité opérationnelle et réseau significative

La tension centrale est l’uniformité contre le coût opérationnel. Une couche partagée vous achète de la cohérence, une sécurité prouvable, et une politique que vous écrivez une fois, mais c’est un vrai système que vous devez exploiter, échelonner, sécuriser, et déboguer, et il s’insère dans le chemin de chaque requête. Résolvez la tension par l’échelle et le besoin. Une passerelle rapporte presque toujours au moment où vous avez des clients externes, parce que les préoccupations qu’elle centralise sont celles que vous ne pouvez pas éviter. Un maillage rapporte plus tard, quand le nombre de services et de langages rend le câblage par service le chemin le plus coûteux. En dessous de ce seuil, les bibliothèques et une simple passerelle vous donnent la majeure partie du bénéfice pour une fraction du coût. Au-dessus, l’uniformité du maillage vaut son poids. L’erreur dans les deux directions est d’adopter par mode plutôt que par besoin : un maillage trop tôt est une année de rasage de yak, et un maillage sauté trop tard est cent implémentations incohérentes et codées à la main de mTLS.

Questions à discuter avec votre équipe

  1. Pour chaque préoccupation transversale (authentification, nouvelles tentatives, délais d’expiration, limitation de débit, chiffrement, télémétrie), quelle couche unique la possède, et tout le monde peut-il nommer le propriétaire sans deviner ? C’est la question qui prévient le double traitement, et la plupart des équipes n’y ont jamais répondu explicitement, ce qui signifie que la réponse diffère par service et par auteur. Apportez une liste concrète de préoccupations sur le côté gauche et vos couches (bibliothèque client, passerelle, maillage, service individuel) en haut, et remplissez la grille ensemble. Les endroits où deux cellules sont cochées pour une préoccupation sont vos tempêtes de nouvelle tentative et inversions de délai d’expiration qui attendent de se produire. Les lignes vides sont les préoccupations que personne ne gère du tout. Le livrable est une table unique convenue, publiée où chaque équipe peut la voir, qui dit qu’exactement une couche possède chaque préoccupation et les autres passent au travers. Cette table vaut plus que toute quantité de configuration de passerelle ou de maillage, parce que c’est la chose qui empêche les deux couches de se battre.

  2. Avons-nous réellement assez de services et de diversité de langage pour justifier un maillage de services, ou sommes-nous sur le point d’acheter un plan de contrôle pour résoudre un problème que nous n’avons pas ? Un maillage est un engagement opérationnel sérieux, et la réponse honnête pour de nombreuses équipes est qu’une bonne bibliothèque plus une passerelle les servirait mieux aujourd’hui. Apportez le vrai compte de vos services, le nombre de langages dans lesquels ils sont écrits, et une évaluation honnête de combien la logique réseau dupliquée vous fait réellement mal en ce moment. Puis apportez l’autre côté : qui exploitera le maillage, mettra à niveau ses proxys, fera pivoter ses certificats, et sera appelé quand il fait un mauvais routage. Si la douleur du câblage par service est plus petite que le coût d’exploiter le maillage, vous avez votre réponse, et c’est d’attendre. Si vous vous noyez dans du mTLS incohérent et du code de nouvelle tentative à travers des dizaines de services polyglottes, le maillage mérite sa place. Le point est de décider sur preuve, pas sur ce qu’une conférence a fait paraître le maillage.

  3. Où se trouve notre frontière zéro confiance aujourd’hui, et que se passe-t-il si un service interne est compromis ? De nombreux systèmes font encore confiance à tout ce qui est déjà à l’intérieur du réseau, ce qui signifie qu’un seul service violé peut se déplacer latéralement et atteindre tout le reste, et les équipes le découvrent souvent seulement pendant un incident. Parcourez le rayon d’impact honnêtement : si un attaquant possède un de vos services, que peut-il appeler, que peut-il lire, et qu’est-ce qui l’arrête ? Apportez votre réponse actuelle sur comment les appels service-à-service sont authentifiés et chiffrés, et soyez spécifique sur quels appels sont protégés par mTLS et lesquels sont une confiance en clair basée sur le fait d’être sur le même réseau. L’action qui suit est un plan délibéré pour l’accès basé sur l’identité à chaque saut, avec la passerelle vérifiant l’identité externe et le maillage ou un équivalent vérifiant l’identité de charge de travail, pour qu’une compromission soit contenue plutôt que catastrophique. Même si vous n’êtes pas prêt à exploiter un maillage complet, nommer où se trouve réellement la frontière de confiance est le premier pas honnête.

  4. Si notre palier de passerelle API échouait en ce moment, quelle part du système s’éteint, et avons-nous testé cet échec plutôt que de le supposer ? La passerelle centralise tant que sa panne met tout ce qui est derrière elle hors ligne, et les grandes équipes tendent à sous-investir dans sa redondance précisément parce qu’elle fonctionne discrètement jusqu’à ce qu’elle ne le fasse pas. Pesez les tirages concurrents : une seule passerelle simple est facile à raisonner et bon marché à exploiter, tandis qu’un palier échelonné horizontalement et multi-zone coûte plus et ajoute sa propre configuration et complexité de basculement. Apportez de vrais chiffres à la discussion, incluant combien d’instances fonctionnent aujourd’hui, à travers combien de zones de disponibilité, quel est le temps de basculement, et quand vous avez pour la dernière fois exécuté une journée de jeu qui a tué la passerelle exprès. Pour les plateformes d’entreprise et gouvernementales portant des engagements de disponibilité ou des niveaux de service légaux, ajoutez la pénalité contractuelle ou réglementaire pour une panne, parce qu’une porte d’entrée sans redondance est un risque de disponibilité que vous avez discrètement accepté au nom de chaque service et chaque citoyen derrière elle.

  5. Avons-nous mesuré la taxe de sidecar que notre maillage facture réellement, et avons-nous un plan pour les alternatives sans sidecar et eBPF, ou la payons-nous aveuglément ? À l’échelle, la surcharge de proxy par pod en calcul et latence cesse d’être invisible et devient une vraie ligne dans le budget, pourtant de nombreuses équipes exécutent des milliers de sidecars sans jamais mesurer le coût. La tension est entre la maturité et l’isolation du modèle sidecar d’un côté et la surcharge plus basse des proxys par nœud, bibliothèques sans proxy, ou approches eBPF de noyau de l’autre, qui sont plus récentes et échangent une certaine isolation ou ajoutent une dépendance par langage. Apportez les chiffres mesurés : mémoire et CPU consommés par les proxys à travers la flotte, la latence de queue ajoutée par saut, et quelle fraction de votre facture de calcul le maillage représente. Pour une grande entreprise exploitant le maillage à travers des milliers de pods, ou une plateforme gouvernementale sous examen budgétaire, c’est une décision de dépense que le contrôle finira par questionner, donc connaître la taxe et si vos choix de plateforme gardent les alternatives moins chères ouvertes est de la diligence raisonnable de base.

  6. Chaque classe de client a-t-elle vraiment besoin de son propre backend for frontend, ou sommes-nous sur le point de dupliquer la logique à travers des passerelles pour des clients qui veulent en fait la même chose ? Le motif BFF découple les équipes client et laisse chacune faire évoluer un contrat sur mesure, mais chaque nouveau BFF est une autre passerelle à exploiter, sécuriser, et garder synchronisée, et la logique dupliquée à travers eux devient discrètement une taxe de maintenance. Les considérations concurrentes sont l’autonomie d’équipe et l’efficacité spécifique au client contre le coût opérationnel et la dérive de nombreuses passerelles quasi identiques. Apportez des preuves de combien les besoins des clients divergent réellement : tailles de charge utile, comptes d’aller-retour, cadence de versionnage, et à quelle fréquence le changement d’un client aurait bloqué un autre sous une seule passerelle partagée. Dans une grande organisation avec de nombreuses équipes client, ou une plateforme gouvernementale servant une application web publique, une application mobile, et des intégrations partenaires à la fois, la question honnête est de savoir si la divergence justifie la prolifération, parce qu’un BFF par client qui veulent tous la même forme est un étalement que vous paierez pour maintenir pendant des années.

Regard sectoriel

Jeune pousse. Livrez une passerelle API et sautez le maillage. Avec une poignée de services et une toute petite équipe, une seule passerelle gère l’authentification, les limites de débit, et la composition, pendant qu’une bibliothèque client partagée vous donne mTLS et nouvelles tentatives pour une fraction du coût d’un plan de contrôle. Votre ressource la plus rare est l’attention d’ingénierie, donc un maillage que vous ne pouvez pas exploiter est un passif, pas un fossé défensif. Gardez la passerelle assez redondante pour survivre à la mort d’un nœud, et revisitez le maillage seulement quand le compte de services et la diversité de langage forcent réellement la question.

Petite entreprise. Vous n’avez pas d’équipe de plateforme pour exploiter un maillage, donc appuyez-vous sur ce que votre plateforme d’hébergement ou produit de passerelle vous donne prêt à l’emploi : TLS géré, limitation de débit intégrée, et une passerelle hébergée plutôt qu’une que vous corrigez vous-même. Cadrez le choix comme acheter contre construire, et achetez, parce qu’une passerelle API gérée coûte moins que les heures-ingénieur pour exploiter la vôtre. Traitez le chiffrement service-à-service interne comme une fonctionnalité que votre plateforme fournit, pas un projet que vous dotez en personnel.

Grande entreprise. Avec des centaines de services à travers de nombreuses équipes et langages, un maillage mérite sa complexité, et le vrai travail est la gouvernance : une division du travail écrite pour que passerelle et maillage ne traitent jamais deux fois une préoccupation, mTLS et télémétrie uniformes, et une équipe de plateforme qui possède les mises à niveau de proxy et la rotation de certificat. Les auditeurs veulent un point d’imposition unique et prouvable pour l’accès et le chiffrement, donc standardisez l’interface et faites de la politique quelque chose que les équipes héritent plutôt que réimplémentent. Gérez la taxe de sidecar comme une vraie ligne budgétaire, et gardez les options sans sidecar ouvertes pour ne pas être enfermé hors d’approches moins chères plus tard.

Gouvernement. Les règles d’approvisionnement, la transparence, et la redevabilité publique façonnent l’architecture. Traitez la passerelle et le maillage comme l’épine dorsale zéro confiance que les régulateurs attendent : chaque citoyen et partenaire authentifié à la porte d’entrée, chaque appel interne authentifié et chiffré par identité de charge de travail, et une piste d’audit à chaque point d’imposition prouvant où l’accès a été vérifié et où le trafic a été chiffré. Favorisez les normes ouvertes et la configuration portable plutôt que l’enfermement propriétaire que les règles d’approvisionnement peuvent interdire, et publiez, là où approprié, comment la plateforme protège les données citoyennes à mesure qu’elles traversent chaque frontière.

Exemples

Jeune pousse. Une start-up de douze personnes exploite huit services derrière une seule passerelle API. La passerelle gère tout le travail nord-sud : elle authentifie les utilisateurs avec une vérification de jeton, impose des limites de débit par plan pour que les utilisateurs du niveau gratuit ne puissent pas submerger le système, et compose quelques points de terminaison bavards en appels uniques adaptés au mobile. Pour le trafic est-ouest, elle saute délibérément un maillage de services, parce que huit services dans deux langages ne justifient pas un plan de contrôle. Au lieu de cela, ils obtiennent mTLS et nouvelles tentatives depuis une bibliothèque client partagée et la gestion de certificat intégrée de leur plateforme, et ils collectent des traces avec un agent léger. Quand ils ajoutent plus tard un client mobile dédié avec des besoins de charge utile plus serrés, ils introduisent un backend for frontend mobile à côté de la passerelle web existante. Ils revisitent la question du maillage chaque année et continuent de décider, correctement, qu’ils n’ont pas encore franchi le seuil où cela rapporterait.

Grande entreprise. Une banque multinationale exploite plusieurs centaines de services à travers de nombreuses équipes et langages, et ici un maillage de services mérite sa complexité. Chaque service obtient une identité de charge de travail et mTLS par défaut, donc tout le trafic interne est authentifié et chiffré sans qu’aucune équipe n’écrive de code cryptographique, ce qui satisfait à la fois l’organisation de sécurité et les auditeurs qui veulent un point d’imposition unique et prouvable. Le maillage applique des nouvelles tentatives, délais d’expiration, et disjoncteurs uniformes par politique, et il déplace le trafic graduellement pour les livraisons canari pour qu’un mauvais déploiement touche un pour cent des utilisateurs avant de tous les toucher. Un palier de passerelles API protège le trafic externe et partenaire, possédant l’authentification, les quotas, et le versionnage, avec une règle écrite ferme selon laquelle les nouvelles tentatives internes vivent seulement dans le maillage et les limites de débit externes vivent seulement dans les passerelles, pour que les deux couches ne traitent jamais deux fois une requête. Une télémétrie cohérente de chaque proxy alimente une plateforme d’observabilité centrale qui permet à un seul ingénieur d’astreinte de tracer une requête à travers des dizaines de sauts de service.

Gouvernement. Une administration fiscale nationale modernise une plateforme de dépôt orientée citoyen et traite la passerelle et le maillage comme l’épine dorsale d’une architecture zéro confiance que les régulateurs exigent. Une passerelle API est la porte d’entrée contrôlée : chaque citoyen et chaque partenaire y est authentifié et autorisé, des limites de débit externes protègent le système pendant le pic d’échéance de dépôt, et les anciens formats client sont transformés à la périphérie pour que les intégrations héritées continuent de fonctionner. Derrière, un maillage de services donne à chaque service interne une identité cryptographique et impose mTLS à chaque appel, donc aucun service n’est fiable simplement pour être à l’intérieur du réseau, et la politique d’accès liste explicitement quels services peuvent appeler lesquels. Parce que la plateforme s’étend sur plusieurs centres de données pour la résilience, le maillage étend les mêmes garanties d’identité et de chiffrement à travers les clusters, donnant un réseau zéro confiance cohérent à l’échelle nationale. Chaque point d’imposition émet une piste d’audit, donc l’agence peut prouver aux organes de contrôle exactement où l’accès a été vérifié et où le trafic a été chiffré.

Argumentaire économique : motivations, retour sur investissement et coût total de possession

Le retour sur une passerelle est facile à voir et généralement grand. Au lieu que chaque service réimplémente l’authentification, la limitation de débit, et la journalisation de requête, vous construisez cela une fois à la périphérie et chaque service en hérite. Un correctif de sécurité ou une nouvelle politique de limite de débit est livré en un déploiement plutôt qu’une centaine, ce qui raccourcit le temps pour fermer une vulnérabilité et abaisse le coût de chaque audit, parce qu’il y a un endroit unique à inspecter. Les fonctionnalités de composition et de versionnage réduisent les allers-retours client et vous permettent de faire évoluer les API sans casser les appelants, ce qui réduit à la fois les coûts de latence et la taxe de coordination entre équipes. Pour presque tout système avec des clients externes, une passerelle se rembourse rapidement.

Le maillage de services a un argumentaire économique plus subtil, parce que son coût total de possession est réel et continu. Vous payez pour le calcul et la latence des proxys, pour les ingénieurs qui exploitent le plan de contrôle, et pour la courbe d’apprentissage de déboguer une nouvelle couche. Ce coût est justifié quand l’alternative (des implémentations par service et par langage de mTLS, nouvelles tentatives, et télémétrie) serait plus grande et, pire, incohérente de façons qui créent des lacunes de sécurité et des pannes. À haute échelle, le maillage convertit cent solutions fragiles codées à la main en une uniforme et prouvable, et le ROI apparaît comme moins d’incidents de sécurité, des déploiements sûrs plus rapides à travers le déplacement de trafic, et une observabilité considérablement meilleure. En dessous de cette échelle, le calcul honnête favorise souvent les bibliothèques et une passerelle, et le mouvement discipliné est d’attendre. Pour faire valoir cela auprès de la direction, connectez la passerelle aux métriques qu’elle suit déjà (temps pour remédier aux vulnérabilités, coût d’audit, surcharge de coordination d’API) et connectez le maillage au confinement d’incident de sécurité, à la sécurité de déploiement, et au coût de la duplication polyglotte qu’il remplace.

Anti-patterns et pièges

  • Maillage avant d’en avoir besoin : adopter un maillage de services complet à une poignée de services, achetant un plan de contrôle pour résoudre un problème que vous n’avez pas encore.
  • Doubles nouvelles tentatives : la passerelle et le maillage réessaient tous les deux, donc un appel client se multiplie en une tempête de nouvelle tentative backend qui amplifie une panne.
  • Inversion de délai d’expiration : un délai d’expiration interne plus long que l’externe, donc l’appelant abandonne pendant que l’appelé continue de travailler sur une réponse que personne ne lira.
  • Passerelle comme monolithe : fourrer de la logique métier dans la passerelle jusqu’à ce qu’elle devienne un goulot d’étranglement partagé que chaque équipe doit coordonner pour changer.
  • Point de défaillance unique : exploiter une instance de passerelle sans redondance, donc la panne de la porte d’entrée fait tomber chaque service derrière elle.
  • Faire confiance au réseau : traiter tout ce qui est à l’intérieur du périmètre comme sûr, donc un service compromis peut se déplacer latéralement et atteindre tout.
  • Propriété qui se chevauche : aucune division du travail écrite, donc la même préoccupation est gérée dans les deux couches par accident et personne ne sait laquelle fait autorité.
  • Prolifération de BFF : monter un backend for frontend par client quand les clients veulent la même chose, multipliant les passerelles et dupliquant la logique sans gain.
  • Ignorer la taxe de sidecar : déployer des milliers de sidecars sans mesurer la surcharge de calcul et de latence, puis se demander où est passé le budget.

Modèle de maturité

  • Niveau 1 (Initier) : Les services se parlent directement sans couche partagée. L’authentification, les nouvelles tentatives, et les délais d’expiration sont codés à la main par service et incohérents. Le trafic interne est souvent en clair et fiable pour être sur le réseau, et il n’y a pas d’endroit unique pour imposer une politique ou observer le trafic. Les décisions sont réactives, prises service par service à mesure que les problèmes surgissent.
  • Niveau 2 (Développer) : Une passerelle API protège le trafic externe et centralise l’authentification, la limitation de débit, et le routage, mais les préoccupations est-ouest sont gérées par des bibliothèques partagées avec une adoption inégale. Certains services ont mTLS ; beaucoup non. Les équipes reconnaissent la distinction nord-sud contre est-ouest, pourtant la propriété est informelle et les pratiques diffèrent d’une équipe à l’autre.
  • Niveau 3 (Standardiser) : Les préoccupations nord-sud et est-ouest sont proprement séparées avec une division du travail écrite appliquée à travers l’organisation. La passerelle possède l’identité externe, les quotas, et la composition ; un maillage ou une couche de bibliothèque cohérente possède mTLS interne, nouvelles tentatives, et télémétrie. Les chevauchements sont résolus pour qu’aucune préoccupation ne soit traitée deux fois, le trafic interne est chiffré et vérifié par identité par défaut, et la norme est documentée et imposée plutôt que laissée à la discrétion de chaque équipe.
  • Niveau 4 (Gérer) : La couche de trafic est mesurée et contrôlée par rapport à des références. Vous suivez la taxe de sidecar en calcul et latence de queue par saut, la disponibilité de passerelle et maillage contre des budgets d’erreur, les incidents d’amplification de nouvelle tentative et d’inversion de délai d’expiration, la couverture mTLS comme pourcentage des appels internes, et le temps pour pousser un changement de politique à travers la flotte. Les métriques conditionnent les décisions : une mise à niveau de proxy, un nouveau budget de nouvelle tentative, ou une règle canari est jugée sur données contre une référence plutôt que sur intuition, et toute dérive de la norme déclenche une correction.
  • Niveau 5 (Orchestrer) : Passerelle et maillage sont des points d’imposition de politique pour une architecture zéro confiance mature, avec l’identité vérifiée à chaque saut à travers les clusters et régions. Le déplacement de trafic pilote une livraison progressive sûre, l’observabilité est uniforme et riche, et l’organisation évalue et adopte continuellement les approches sans sidecar, sans proxy, et eBPF là où elles rapportent. La couche de trafic est intégrée à la planification de sécurité, livraison, et capacité, et elle s’adapte à mesure que l’échelle, les langages, et le tableau de risque changent.

Pistes de réflexion

  1. Si votre passerelle API unique tombait en ce moment, combien de services deviendraient inaccessibles, et quel est votre plan pour rendre la porte d’entrée redondante ?
  2. Quelle préoccupation dans votre système est actuellement gérée à la fois dans la passerelle et un service (ou une bibliothèque), et comment prouveriez-vous qu’elle n’est pas traitée deux fois ?
  3. À quel nombre de services et de langages votre équipe conviendrait-elle qu’un maillage a finalement mérité sa complexité, et à quelle distance êtes-vous de cette ligne ?
  4. Si un attaquant compromettait un service interne demain, quels autres services pourrait-il atteindre, et quelle vérification d’identité l’arrêterait ?
  5. Les approches de maillage sans sidecar ou basées sur eBPF sont-elles assez mûres pour votre plateforme aujourd’hui, et que mesureriez-vous pour décider ?
  6. Chacun de vos clients divergents a-t-il vraiment besoin de son propre backend for frontend, ou êtes-vous sur le point de dupliquer de la logique qui pourrait rester partagée ?

Points clés à retenir

  • Séparez le trafic nord-sud (géré par une passerelle API) du trafic est-ouest (géré par un maillage de services) ; chacun possède sa direction, et les confondre cause du double traitement.
  • Une passerelle centralise le routage, l’authentification, l’autorisation, la limitation de débit, les quotas, la transformation de requête, la composition, et le versionnage, pour que les services restent minces et que la politique vive à un endroit.
  • Un maillage de services vous donne mTLS, déplacement de trafic, nouvelles tentatives et disjoncteurs au niveau plateforme, et observabilité uniforme sans changer le code de service, classiquement à travers des proxys sidecar.
  • Adoptez un maillage seulement quand le compte de services et de langages rend le câblage par service le chemin le plus coûteux ; en dessous, les bibliothèques plus une passerelle gagnent, et la taxe de sidecar est assez réelle pour être surveillée.
  • Traitez passerelle et maillage comme les points d’imposition de politique d’une architecture zéro confiance, assignez chaque préoccupation transversale à exactement une couche, et vérifiez l’identité à chaque saut à travers les clusters.

Références et lectures complémentaires

  • Sam Newman, Building Microservices: Designing Fine-Grained Systems
  • Chris Richardson, Microservices Patterns: With Examples in Java
  • Lee Calcote et Zack Butcher, Istio: Up and Running
  • Ken Owens, Alois Reitbauer, et autres ; le Cloud Native Landscape de la CNCF et la documentation de maillage de services
  • Evan Gilman et Doug Barth, Zero Trust Networks: Building Secure Systems in Untrusted Networks
  • Scott Rose, Oliver Borchert, Stu Mitchell, et Sean Connelly, Zero Trust Architecture, NIST Special Publication 800-207
  • Susan Fowler, Production-Ready Microservices