{"id":1839,"date":"2025-02-04T10:24:08","date_gmt":"2025-02-04T09:24:08","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1839"},"modified":"2025-02-04T10:27:07","modified_gmt":"2025-02-04T09:27:07","slug":"java-vers-une-integrite-par-defaut-de-la-jvm","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-vers-une-integrite-par-defaut-de-la-jvm\/","title":{"rendered":"Java : vers une int\u00e9grit\u00e9 par d\u00e9faut de la JVM"},"content":{"rendered":"<p>Cet article est paru pour la premi\u00e8re fois dans le magazine <a href=\"https:\/\/www.programmez.com\/magazine\/article\/java-vers-une-integrite-par-defaut-de-la-jvm\" rel=\"noopener\" target=\"_blank\">Programmez! Hors s\u00e9rie #16<\/a>.<\/p>\n<p>La Machine Virtuelle Java (JVM) est un environnement d&rsquo;ex\u00e9cution qui permet \u00e0 des programmes \u00e9crits en Java (ou dans d&rsquo;autres langages compil\u00e9s en bytecode Java) de s&rsquo;ex\u00e9cuter sur diff\u00e9rents syst\u00e8mes d&rsquo;exploitation et architectures mat\u00e9rielles.<\/p>\n<p>D\u00e8s ses d\u00e9buts, la JVM a \u00e9t\u00e9 pens\u00e9e pour \u00eatre dynamique : elle peut ex\u00e9cuter du code non pr\u00e9sent \u00e0 la compilation par chargement de code \u00e0 chaud. Elle peut aussi appeler des librairies natives, et supporte de nombreuses fonctionnalit\u00e9s de monitoring.<\/p>\n<p>Depuis du code Java, il est aussi possible d\u2019appeler dynamiquement du code Java gr\u00e2ce \u00e0 l\u2019API de r\u00e9flexion, et m\u00eame de faire des acc\u00e8s m\u00e9moire en passant outre les m\u00e9canismes d\u2019allocation de m\u00e9moire de Java gr\u00e2ce \u00e0 la classe Unsafe.<\/p>\n<p>Toutes ces fonctionnalit\u00e9s ont fait de la JVM une des plateformes de choix pour le d\u00e9veloppement d\u2019application d\u2019entreprise.<\/p>\n<p>Mais depuis sa cr\u00e9ation, les principes de s\u00e9curit\u00e9s ont \u00e9volu\u00e9s, les risques inh\u00e9rents \u00e0 la s\u00e9curit\u00e9 des applications et ses impacts \u00e9tant de plus en plus grands, la JVM se devait d\u2019\u00e9voluer pour limiter sa surface d\u2019exposition aux risques tout en gardant les fonctionnalit\u00e9s qui ont fait son succ\u00e8s. Ces changements sont initi\u00e9s depuis tr\u00e8s longtemps, au moins depuis Java 9 et la modularisation de la JVM, mais ce n\u2019est que r\u00e9cemment qu\u2019une r\u00e9flexion globale a vue lieux au sein de la Java Enhancement Proposal (JEP) <em>Integrity by Default<\/em> qui est encore en draft : <a href=\"https:\/\/openjdk.org\/jeps\/8305968\" rel=\"noopener\" target=\"_blank\">JEP draft: Integrity by Default<\/a>. Cette JEP d\u00e9finie ce qu\u2019est l\u2019int\u00e9grit\u00e9 par d\u00e9faut, explique ses raisons et liste les JEP qui y participent. C\u2019est une JEP parapluie qui regroupe de nombreuses autres JEP.<\/p>\n<h2>Qu\u2019est-ce que l\u2019int\u00e9grit\u00e9 par d\u00e9faut ?<\/h2>\n<p>Voici ce qu\u2019en dit la JEP :<\/p>\n<blockquote>Dans le contexte d&rsquo;un programme informatique, l&rsquo;int\u00e9grit\u00e9 signifie que les \u00e9l\u00e9ments constitutifs du programme, ainsi que le programme lui-m\u00eame, sont \u00e0 la fois entiers et valides.<\/blockquote>\n<p>Derri\u00e8re cela, il y a un principe tr\u00e8s simple : la sp\u00e9cification de la JVM doit d\u00e9crire pr\u00e9cis\u00e9ment ce qui est n\u00e9cessaire pour qu\u2019un programme soit valide et son impl\u00e9mentation doit y ob\u00e9ir. Par exemple : la sp\u00e9cification des tableaux d\u00e9finit qu&rsquo;un tableau ne peut \u00eatre acc\u00e9d\u00e9 qu&rsquo;\u00e0 l&rsquo;int\u00e9rieur des limites d\u00e9finies lors de sa cr\u00e9ation ; cette contrainte est garantie par la JVM, qui l\u00e8ve une exception en cas de violation.<\/p>\n<p>Les b\u00e9n\u00e9fices de l\u2019int\u00e9grit\u00e9 sont que :<\/p>\n<ul><li>Le code est pr\u00e9visible : Les variables ont toujours une valeur d\u00e9finie avant d&rsquo;\u00eatre utilis\u00e9es, et les op\u00e9rations sur les donn\u00e9es sont toujours valides.<\/li>\n\n<li>La m\u00e9moire est g\u00e9r\u00e9e de mani\u00e8re s\u00e9curis\u00e9e : Le risque de plantage d\u00fb \u00e0 une mauvaise gestion de la m\u00e9moire est minimis\u00e9.<\/li>\n\n<li>Les programmes multi-threads sont stables : Les objets conservent un \u00e9tat coh\u00e9rent, m\u00eame dans des environnements multit\u00e2ches.<\/li>\n<\/ul>\n<p>L\u2019<strong>encapsulation<\/strong> est un des principes fondamentaux qui permet l\u2019int\u00e9grit\u00e9 de la JVM.<\/p>\n<p>L&rsquo;encapsulation consiste \u00e0 regrouper des donn\u00e9es et les m\u00e9thodes qui les manipulent au sein d&rsquo;une seule entit\u00e9, g\u00e9n\u00e9ralement une classe. Cela permet de prot\u00e9ger les donn\u00e9es d&rsquo;acc\u00e8s externes et de modifications non autoris\u00e9es, en garantissant qu&rsquo;elles ne peuvent \u00eatre manipul\u00e9es que par le biais d&rsquo;interfaces bien d\u00e9finies.<\/p>\n<p>L&rsquo;encapsulation am\u00e8ne de nombreux avantages : exactitude d\u2019un programme, maintenabilit\u00e9, \u00e9volutivit\u00e9, s\u00e9curit\u00e9 et performance.<\/p>\n<p>Attardons-nous sur ceux qui sont directement li\u00e9s \u00e0 l\u2019int\u00e9grit\u00e9 de la JVM :<\/p>\n<ul><li>Exactitude : L&rsquo;encapsulation assure que les donn\u00e9es sont acc\u00e9d\u00e9es et modifi\u00e9es de mani\u00e8re contr\u00f4l\u00e9e, ce qui pr\u00e9vient les effets de bord et les erreurs inattendues.<\/li>\n\n<li>S\u00e9curit\u00e9 : En restreignant l&rsquo;acc\u00e8s aux donn\u00e9es, l&rsquo;encapsulation contribue \u00e0 prot\u00e9ger les informations sensibles contre les acc\u00e8s non autoris\u00e9s.<\/li>\n<\/ul>\n<p>N\u00e9anmoins, il existe des API dans le kit de d\u00e9veloppement Java (JDK) qui peuvent contourner l&rsquo;encapsulation :<\/p>\n<ul><li><strong>AccessibleObject::setAccessible(boolean)<\/strong> : Cette m\u00e9thode permet la r\u00e9flexion profonde, permettant d&rsquo;acc\u00e9der \u00e0 des champs et des m\u00e9thodes priv\u00e9s, m\u00eame si normalement inaccessibles.<\/li>\n\n<li><strong>sun.misc.Unsafe<\/strong> : Cette classe offre des m\u00e9thodes pour acc\u00e9der \u00e0 des m\u00e9thodes et des champs priv\u00e9s, ainsi qu&rsquo;\u00e0 des champs finaux.<\/li>\n\n<li><strong>Java Native Interface (JNI)<\/strong> : JNI permet au code natif d&rsquo;interagir avec des objets Java sans respecter les limites d&rsquo;encapsulation.<\/li>\n\n<li><strong>Instrumentation API<\/strong> : Cette API permet aux agents de modifier le bytecode de m\u00e9thodes, ce qui peut contourner l&rsquo;encapsulation.<\/li>\n<\/ul>\n<p>L\u2019int\u00e9grit\u00e9 par d\u00e9faut de la JVM n\u00e9cessite donc de restreindre par d\u00e9faut le fonctionnement de ces API. L\u2019id\u00e9e n\u2019est pas de les supprimer, mais d\u2019en r\u00e9duire la port\u00e9e ou d\u2019obliger le d\u00e9veloppeur \u00e0 sciemment les autoriser de mani\u00e8re \u00e0 contr\u00f4ler leur utilisation.<\/p>\n<h2>Restreindre la r\u00e9flexion profonde<\/h2>\n<p>Depuis Java 9 et l\u2019introduction de la modularit\u00e9 (<a href=\"https:\/\/openjdk.org\/jeps\/261\" rel=\"noopener\" target=\"_blank\">JEP 261: Module System<\/a>), il est possible de restreindre la r\u00e9flexion profonde en utilisant les modules Java, car la m\u00e9thode <code>AccessibleObject::setAccessible(boolean)<\/code> respecte les limites des modules : une classe d\u2019un module ne peut pas modifier l\u2019accessibilit\u00e9 d\u2019un champ d\u2019une classe d\u2019un autre module.<\/p>\n<p>Ce changement, initi\u00e9 avec Java 9 et la modularit\u00e9 du JDK a \u00e9t\u00e9 mis en place progressivement, les acc\u00e8s non autoris\u00e9 ont \u00e9t\u00e9 tout d\u2019abord d\u00e9courag\u00e9 via l\u2019\u00e9mission d\u2019un warning au lancement de l\u2019application, puis prohib\u00e9 en Java 16. Il est toujours possible d\u2019autoriser la r\u00e9flexion profonde soit globalement (<code>--illegal-access=permit<\/code>) soit au cas par cas via l\u2019ouverture de module (<code>--add-opens<\/code>).<\/p>\n<h2>Restreindre l\u2019utilisation d\u2019Unsafe<\/h2>\n<p>La classe <code>sun.misc.Unsafe<\/code> inclut des m\u00e9thodes qui effectuent une vari\u00e9t\u00e9 d&rsquo;op\u00e9rations de bas niveau sans aucun contr\u00f4le de s\u00e9curit\u00e9.<\/p>\n<p>Un composant qui utilise Unsafe compromet l\u2019int\u00e9grit\u00e9 de la JVM.<\/p>\n<p>Unsafe est rarement utilis\u00e9 par une application Java, n\u00e9anmoins de nombreux frameworks se reposent sur lui ainsi que de nombreux agents Java.<\/p>\n<p>Au fil des ans, de nombreux remplacements via des API support\u00e9es ont vu le jour, l\u2019utilisation d\u2019Unsafe est donc de moins en moins n\u00e9cessaire.<\/p>\n<p>La manipulation de bas niveau des objets dans la heap peut d\u00e9sormais \u00eatre effectu\u00e9e de mani\u00e8re plus s\u00fbre via l&rsquo;API <strong>VarHandle<\/strong>, et la manipulation des donn\u00e9es dans la m\u00e9moire hors heap peut d\u00e9sormais \u00eatre effectu\u00e9e de mani\u00e8re plus s\u00fbre via l&rsquo;API <strong>MemorySegment<\/strong>.<\/p>\n<p>Depuis Java 23 et la <a href=\"https:\/\/openjdk.org\/jeps\/471\" rel=\"noopener\" target=\"_blank\">JEP 471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal<\/a>, les m\u00e9thodes d\u2019acc\u00e8s m\u00e9moire d\u2019Unsafe sont d\u00e9pr\u00e9ci\u00e9es, mais leur utilisation toujours permise. Il est possible d\u2019en restreindre l\u2019utilisation via l\u2019option ligne de commande : <code>--sun-misc-unsafe-memory-access<\/code>.<\/p>\n<p>L\u2019utilisation de ces m\u00e9thodes sera progressivement restreinte dans les prochaines versions de Java. \u00c0 partir de Java 24 elles \u00e9mettent un warning dans les logs de la JVM lors de leur premi\u00e8re utilisation.<\/p>\n<h2>Restreindre l\u2019utilisation de JNI<\/h2>\n<p>Avec Java 24 et la <a href=\"https:\/\/openjdk.org\/jeps\/472\" rel=\"noopener\" target=\"_blank\">JEP 472: Prepare to Restrict the Use of JNI<\/a>, l\u2019acc\u00e8s aux librairies natives sera restreint aussi bien pour JNI que pour la nouvelle API Foreign Function and Memory (FFM).<\/p>\n<p>C\u2019\u00e9tait d\u00e9j\u00e0 le cas pour l\u2019API FFM depuis Java 22.<\/p>\n<p>Une librairie native ne respecte pas l\u2019int\u00e9grit\u00e9 de la JVM, car elle peut :<\/p>\n<ul><li>Avoir un comportement non d\u00e9fini (undefined behavior) qui peut entra\u00eener un crash de la JVM.<\/li>\n\n<li>\u00c9changer de la donn\u00e9e via des byte buffers direct.<\/li>\n\n<li>Acc\u00e9der \u00e0 des champs et des m\u00e9thodes sans contr\u00f4le d\u2019acc\u00e8s.<\/li>\n\n<li>Appeler des fonctions de la JVM de mani\u00e8re incorrecte.<\/li>\n<\/ul>\n<p>Autoriser l\u2019acc\u00e8s aux librairies natives n\u00e9cessite l\u2019utilisation de l\u2019option ligne de commande <code>--enable-native-access<\/code> ou l\u2019attribut de manifeste <code>Enable-Native-Access<\/code> qui peut soit \u00eatre le nom d\u2019un module ou <code>ALL-UNNAMED<\/code> pour autoriser tout le code du classpath.<\/p>\n<p>Pour l\u2019instant, l\u2019utilisation d\u2019une librairie JNI non autoris\u00e9e \u00e9mettra un warning au lancement de l\u2019application, mais leur utilisation sera progressivement restreinte dans les prochaines versions de Java.<\/p>\n<h2>Restreindre l\u2019utilisation de l\u2019API d\u2019instrumentation<\/h2>\n<p>Un agent est un composant qui peut modifier le code d&rsquo;une application pendant que celle-ci est en cours d&rsquo;ex\u00e9cution.<\/p>\n<p>Il peut donc compromettre l\u2019int\u00e9grit\u00e9 de la JVM de nombreuses fa\u00e7ons.<\/p>\n<p>Depuis Java 21 et la <a href=\"https:\/\/openjdk.org\/jeps\/451\" rel=\"noopener\" target=\"_blank\">JEP 451: Prepare to Disallow the Dynamic Loading of Agents<\/a>, le chargement dynamique d\u2019agent Java est restreint.<\/p>\n<p>L\u2019option ligne de commande <code>-XX:+DisableAttachMechanism<\/code> permet de contr\u00f4ler le chargement dynamique d\u2019agent, elle est pour l\u2019instant \u00e0 true par d\u00e9faut.<\/p>\n<p>Pour l\u2019instant, le chargement dynamique d\u2019agent Java non autoris\u00e9e \u00e9mettra un warning au lancement de l\u2019application, mais leur utilisation sera progressivement restreinte dans les prochaines versions de Java. Il sera alors n\u00e9cessaire de d\u00e9clarer tous les agents Java lors du lancement de la JVM via l\u2019option ligne de commande <code>--agent<\/code>.<\/p>\n<h2>Conclusion<\/h2>\n<p>La s\u00e9curit\u00e9 des applications est de plus en plus importante et c\u2019est une bonne chose que Java \u00e9volue pour plus de s\u00e9curit\u00e9 par d\u00e9faut. Cela met aussi plus de pouvoir dans les mains des d\u00e9veloppeurs qui vont pouvoir mieux ma\u00eetriser quelle librairie ou module peut r\u00e9aliser quelle action (r\u00e9flexion, chargement de librairie native&#8230;).<\/p>","protected":false},"excerpt":{"rendered":"<p>Cet article est paru pour la premi\u00e8re fois dans le magazine Programmez! Hors s\u00e9rie #16. La Machine Virtuelle Java (JVM) est un environnement d&rsquo;ex\u00e9cution qui permet \u00e0 des programmes \u00e9crits en Java (ou dans d&rsquo;autres langages compil\u00e9s en bytecode Java) de s&rsquo;ex\u00e9cuter sur diff\u00e9rents syst\u00e8mes d&rsquo;exploitation et architectures mat\u00e9rielles. D\u00e8s ses d\u00e9buts, la JVM a \u00e9t\u00e9 pens\u00e9e pour \u00eatre dynamique : elle peut ex\u00e9cuter du code non pr\u00e9sent \u00e0 la compilation par chargement de code \u00e0 chaud. Elle peut aussi&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-vers-une-integrite-par-defaut-de-la-jvm\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[11,214],"class_list":["post-1839","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-security"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1668,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-hidden-security-features-of-th-jvm-everything-you-didnt-know-and-more-par-steve-poole\/","url_meta":{"origin":1839,"position":0},"title":"Devoxx FR 2023 &#8211; Hidden security features of the JVM &#8211; everything you didn&rsquo;t know and more par Steve Poole","author":"admin","date":"vendredi 14 avril 2023","format":false,"excerpt":"Premi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole. Le Security Manager est d\u00e9pr\u00e9ci\u00e9 mais la JVM a un design fantastique pour la s\u00e9curit\u00e9. Tout d'abord, pourquoi se soucier de la s\u00e9curit\u00e9 ? Premi\u00e8re conf\u00e9rence \u00e0 laquelle je\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1877,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-24-quoi-de-neuf\/","url_meta":{"origin":1839,"position":1},"title":"Java 24 : quoi de neuf ?","author":"admin","date":"vendredi 10 janvier 2025","format":false,"excerpt":"Maintenant que Java 24 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":722,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-10-quoi-de-neuf\/","url_meta":{"origin":1839,"position":2},"title":"Java 10 : quoi de neuf ?","author":"admin","date":"lundi 26 mars 2018","format":false,"excerpt":"Maintenant que Java 10 est sorti, il est temps de se pencher sur les nouveaut\u00e9s de cette version. Comme pour mon pr\u00e9c\u00e9dent article sur java 9, je vais me pencher principalement sur les changements qui impacterons les d\u00e9veloppeurs utilisant Java en laissant de c\u00f4t\u00e9 les changements internes\/anecdotique\/sur des API peu\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":739,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/les-optimisations-de-performances-de-java-9\/","url_meta":{"origin":1839,"position":3},"title":"Les optimisations de performances de Java 9","author":"admin","date":"vendredi 26 janvier 2018","format":false,"excerpt":"Dans un pr\u00e9c\u00e9dent article sur Java 9, j'avais parcouru les principales nouveaut\u00e9s \u00e0 destination des d\u00e9veloppeurs : http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/les-nouveautes-de-java-9-pour-les-developeurs. Je vais ici parcourir les principales nouveaut\u00e9s ax\u00e9es sur la performance Je vais encore reprendre les principales JEP : JEP 143: Improve Contended Locking Optimisation des monitors Java (optimisation des locks) en\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":712,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/demarrage-jvm-8-vs-9\/","url_meta":{"origin":1839,"position":4},"title":"D\u00e9marrage JVM 8 vs 9","author":"admin","date":"jeudi 31 ao\u00fbt 2017","format":false,"excerpt":"Introduction En parcourant la mailing liste d'open JDK (core-lib-dev) j'ai vu plusieurs threads de mail \u00e0 propos d'optimisation de temps de d\u00e9marrage et d'occupation m\u00e9moire d'une JVM \"minimale\". Ce travail a \u00e9t\u00e9 r\u00e9alis\u00e9 en grande partie par Claes Redestad (Oracle) lors du d\u00e9veloppement de Java 9. J'ai donc d\u00e9cid\u00e9 de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1258,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/profiler-une-application-java-dans-un-conteneur-deploye-dans-kubernetes-avec-jfr-java-flight-recorder\/","url_meta":{"origin":1839,"position":5},"title":"Profiler une application Java dans un conteneur d\u00e9ploy\u00e9 dans kubernetes avec JFR &#8211; Java Flight Recorder","author":"admin","date":"lundi 12 avril 2021","format":false,"excerpt":"La plupart des clients chez lesquels j'interviens aujourd'hui utilisent Kubernetes pour d\u00e9ployer leurs applications. Bien que Kubernetes soit un super outil, si on a besoin de ce type d'outil (qui est une discussion dans laquelle je ne rentrerais pas ici), il peut apporter une certaine complexit\u00e9 quant aux moyens de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1839"}],"version-history":[{"count":7,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1839\/revisions"}],"predecessor-version":[{"id":1916,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1839\/revisions\/1916"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}