C'est une question de scale et de besoins. Si t'as 3 microservices oui K8s natif ça passe. Si t'as 200 services sur plusieurs clusters avec des équipes différentes qui touchent au code t'es mort sans un Service Mesh.
mTLS automatisé sans toucher au code des apps c'est un gain SecOps juste énorme. Les politiques de trafic avancées sont un must pour les déploiements complexes.
mTLS c'est bien beau mais à quel prix ? Le sidecar Envoy c'est un point de défaillance de plus. Si Envoy pète ta connectivité inter-service est morte. Et si t'as une latence anormale est-ce que c'est l'app Envoy ou le réseau ? Bonne chance pour debugger.
La charge CPU et mémoire pour chaque pod ça se voit sur la facture cloud en fin de mois c'est du FinOps à l'envers.
Le debugging c'est plus facile avec un Service Mesh si tu sais l'utiliser. Toute l'observabilité est là. Tracing distribué out of the box avec des outils comme Jaeger ou Zipkin.
Les Golden Signals de chaque service sont collectés automatiquement. Tu as une visibilité que tu n'auras jamais avec des outils K8s natifs sans instrumenter chaque ligne de code de chaque service.
Exactement. Tu externalises les préoccupations réseau et sécurité du code applicatif. Les développeurs n'ont plus à se soucier de retries de timeouts de circuit breaking ou de savoir si la connexion est sécurisée.
C'est le rôle de la plateforme de gérer ça. C'est l'essence du Platform Engineering.
Et si ton Service Mesh est mal configuré tu te retrouves avec des règles de firewalling implicites un enfer. Une erreur de config et tout ton trafic est bloqué. C'est le genre de chose que t'as pas envie de debug à 4h du mat.
Les CRD d'Istio sont d'une complexité rare même pour des ingénieurs aguerris.
La complexité initiale est là oui. Mais le gain de résilience et de sécurité n'a pas de prix. Tu mets en place des politiques de déploiement en canary ou blue/green en quelques lignes de YAML. Sans Service Mesh c'est un script Bash de 200 lignes et des prières.
L'automatisation du mTLS avec SPIFFE/SPIRE c'est la seule solution viable pour gérer l'identité des services à grande échelle.
Parfaitement. Et pour les environnements avec des exigences SecOps élevées c'est non négociable. Avoir une preuve cryptographique de l'identité de chaque service qui communique sur le réseau interne. Auditable.
Tu peux pas faire ça avec des Network Policies qui sont du simple firewalling L3/L4.
Le déploiement en canary on peut le faire avec un bon Ingress Controller comme Nginx ou Traefik avec des poids. Moins complet qu'Istio certes mais tellement plus simple à opérer.
Et pour le mTLS tu peux monter cert-manager pour gérer tes certificats et les injecter dans tes pods. C'est de l'effort oui mais ça reste plus transparent que d'avoir un proxy pour chaque app.
Un proxy pour chaque app c'est le modèle sidecar. C'est justement ça qui permet d'intercepter tout le trafic et d'appliquer les politiques de manière transparente pour l'application.
Essayer de réimplémenter ça avec des outils natifs K8s c'est faire du Service Mesh avec les pieds.
Et l'uniformité des politiques. Si chaque équipe déploie sa propre implémentation de retry ou de timeout en fonction du langage ou du framework tu as un chaos d'interopérabilité.
Le Service Mesh force une uniformité essentielle pour la stabilité des Distributed Systems.
La "résilience" via le Service Mesh c'est de la poudre aux yeux si ton application n'est pas résiliente de base. Un circuit breaker ne sauvera pas une base de données qui crash.
Ça ajoute de la complexité sur un problème qui doit être résolu à la base dans le code applicatif.
C'est complémentaire pas substituable. L'application doit être résiliente mais le Service Mesh ajoute une couche de protection réseau que l'app ne peut pas toujours contrôler.
Et la visibilité c'est crucial. Tu peux voir chaque requête chaque latence chaque erreur entre services ce que tes logs d'app ne te donneront pas sans instrumenter de manière absurde.
La capacité à injecter des fautes pour tester la résilience (Chaos Engineering) est facilitée par le Service Mesh. Tu peux tuer le trafic entre deux services simuler une latence sans toucher aux pods.
C'est un outil puissant pour les SRE et le DevOps.
Oui enfin pour faire du Chaos Engineering t'as des outils dédiés comme LitmusChaos ou Chaos Mesh. Pas besoin de rajouter une usine à gaz comme Istio.
Et puis le plus gros problème c'est la migration. Tu balances ça sur une infra existante t'en as pour 6 mois à régler les problèmes de DNS de certificats de latence fantôme.
La migration est un projet oui mais le ROI est là pour les systèmes complexes. La sécurité par défaut l'observabilité de bout en bout et la gestion de trafic avancée.
Tu peux même intégrer ça avec de l'eBPF pour la couche réseau basse si tu veux encore plus de contrôle et d'observabilité.
eBPF c'est une autre technologie super intéressante mais qui ne résout pas tous les problèmes de la couche 7. Un Service Mesh fait de la gestion d'identité de l'autorisation de la couche 7.
Ce sont des niveaux d'abstraction différents.
Et le coût des ressources ? On en revient toujours au FinOps. Si tu ne l'exploites pas à 80% de ses capacités tu surdimensionnes ton infra pour rien.
Un cas d'usage précis comme du mTLS obligatoire pour la régulation oui mais pas un déploiement systématique.
Bon je vois les arguments des deux côtés.
La complexité et l'overhead sont réels et je comprends les réticences. Mais la sécurité le mTLS et l'observabilité automatique sont des arguments très forts pour nos microservices critiques.
Je pense qu'il faut viser une adoption progressive. Commencer par les services les plus sensibles en terme de sécurité ou ceux qui nécessitent des schémas de déploiement complexes. Pas un big bang sur toute l'infra.
Merci pour les perspectives très tranchées ça aide à y voir plus clair.
Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
cohen-emile
Membre depuis le 16/11/2024Je pige pas l'engouement autour des Service Mesh genre Istio ou Linkerd.
On nous rajoute des sidecars partout qui consomment de la CPU et de la RAM, qui ajoutent des points de défaillance, et qui rendent le debug des requêtes inter-services un cauchemar.
Est-ce que K8s nativement avec des Network Policies et un Ingress correct c'est pas largement suffisant pour 90% des boîtes ?