Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

  • L'Internet

    L'internet est unique. Il est la chose qui ressemble le plus à Dieu.

    Bon, un point communicant sur le réseau universel a une adresse IP (Internet Protocol). 

    IP 

    Cette adresse est unique, certes, mais contrainte, car on peut l'adresser de partout. Pour cela, on dit qu'elle est "routable", car l'envoi d'un message sur le réseau des réseaux, comme son nom l'indique se fait en deux temps.

    IP en effet est un protocole de connexion ENTRE réseaux. On distingue donc l'envoi de messages DANS un réseau et l'envoi de messages ENTRE les réseaux. 

    Un réseau est souvent (mais pas toujours) un ensemble d'adresses IP qui partagent un préfixe. Ce préfixe est caractérisé par une adresse IP (codée sur 32 bits en IP V4) et un nombre de bits, par exemple 24. La plage d'adresses différentes du réseau est alors donnée par le ET logique entre le nombre binaire formé (ici) de 24 bits à "1" à gauche et de l'adresse, ce qui donne un préfixe se terminant par 8 "0" ,  et aussi de tous les suffixes possibles à droite des 24 premiers bits, ici 256 adresses possibles. 

    L'adresse masquée ainsi par le "net mask" (le groupe de "1") est l'adresse propre du réseau.

    Ce qu'on appelle l'internet est le système destiné  à router des messages entre les réseaux ainsi nommés. Il connecte en fait des "routeurs", c’est-à-dire des machines connectées entre elles d'une part, et connectées sur des réseaux d'autre part.

    Un routeur est ainsi capable de recevoir depuis un réseau un message destiné à un autre réseau. Il gère des "tables de routage" qui associent les réseaux de destination possibles aux routeurs à qui il est connecté et donc il lui suffit de déterminer le réseau de destination du message à envoyer, puis d'envoyer le message au routeur associé à ce réseau. 

    Quand un routeur reçoit un message d'un autre routeur, il cherche le réseau de destination du message et envoie le message sur ce réseau, comme le ferait toute machine qui y est connectée. S'il n'est pas connecté sur le réseau destination du message, alors il va relayer le message vers l'un des autres routeurs auquels il est connecté sauf bien sur le routeur qui lui a transmis le message, voir plus bas. 

    Un message IP est formé d'une adresse IP source et d'une adresse IP destination. Cependant, ces adresses ne sont valides que sur l'Internet lui-même et ne sont juste pas utiles sur un réseau physique particulier. Une machine destination est par contre connue sur un réseau particulier par son adresse dite Mac (Media Access Control). Sur tout le réseau, on associe une adresse Mac avec une adresse IP dans des zones de mémoire cache mises à jour sur chaque machine par le protocole ARP (Address Resolution Protocol). 

    Pour envoyer un message IP à une machine sur un réseau, on consulte le cache, trouve l'adresse MAC et envoie le message à la machine ainsi identifiée sur le réseau "physique" auquel on est physiquement connecté.

    Le protocole ARP utilise la capacité d'un réseau physique d'envoyer des messages à TOUTES les machines connectées. Quand le cache ne contient pas l'adresse MAC d'une adresse IP de destination, ET que cette adresse est bien située sur le réseau (on le vérifie en appliquant le "net mask" sur l'adresse, ce qui doit donner l'adresse IP du réseau, comme indiqué plus haut), on demande alors à toutes les machines du réseau la réponse qui est à son tour envoyée à toutes les machines du réseau qui toutes mettent à jour leur cache. 

    Quand la destination d'une adresse n'est sur aucun des réseaux auxquels la machine source du message est connectée, il faut trouver un routeur qui se chargera de l'acheminement. Cela est configuré sur la machine sous la forme de "routes". Une route associe à une adresse de réseau, l'adresse IP (elle joignable) d'un routeur. 

    Un routeur "par défaut" est désigné pour tenter de router les adresses dont la destination n'est sur aucune des routes configurées. 

    Voici donc exposé l'essentiel de IP. On pourrait ajouter que les routeurs sont connectés entre eux par IP bien sur, mais cela n'est pas nécessaire en fait: n'importe quel moyen serait acceptable. On pourrait ajouter que 31 est le masque utilisé pour les réseaux à 2 machines, ce qui convient aux liens point à point. 

    DNS

    Les adresses IP bien que contenues sur un simple entier, et dénotées par 4 octets successifs, nombres de 0 à 255, voudraient être associées à des noms. C'est le rôle du DNS ou Domain Name Service, l'infrastructure distribuée universelle qui permet de gérer de manière centralisée la totalité des adresses IP disponibles universellement.

    Opérée centralement aux USA, mais dupliquée par un certain nombre d'acteurs, LE DNS connecte des DNS locaux organisés par exemple en domaines géographiques (avec les codes des pays, ".fr" pour la France, ".tv" pour le vanuatu) qui gèrent des caches pour les demandes de resolution. Ces caches sont mis à jour régulièrement, en fonction des demandes. 

    Certains domaines (par exemple le .com pour "commercial") sont alloués centralement, mais cachés partout, bien sur. Chaque DNS local peut alors gérer son domaine (".francoiscarmignola.com" par exemple) et y allouer (à gauche) ce qu'il veut, le processus de résolution pouvant être caché partout selon les besoins. 

     

    La virtualisation 

    Pour organiser les communications entre des machines connectées dans ce qu'on appelle un "cluster", typiquement les machines d'un "data center", on peut vouloir regrouper les entités nécessaires d'une manière particulière, de façon à éviter les problèmes de configuration que pose l'utilisation d'IP et de permettre la connexion simplifiée entre de multiples environnements. Le système Kubernetes ou K8S permet cela, au prix d'une complexe organisation réseau qui utilise magnifiquement les caractéristiques des protocoles IP. 

    On commencera par parler de la virtualisation des machines physiques sous la forme de programmes émulant l'environnement fourni par un système d'exploitation. Il faut mentionner bien sûr que cette émulation peut prendre deux formes suivant qu'on émule une machine complètement, y compris son processeur, ce qui permet de considérer un machine comme entièrement virtualisée donc entièrement transportable avec les programmes qu'elle exécute, dans un bloc mémoire, ou bien suivant qu'on émule uniquement le fonctionnement d'un groupe de processus à l'intérieur d'une fraction de l'environnement d'exploitation représentée par son interface extérieur. Cette deuxième approche, qui permet le même résultat global (la virtualisation d'un ensemble de programmes installés et configurés) à un cout bien moindre s'appelle la "conteneurisation", un "conteneur" étant cette fraction utilisable d'une machine, contenue avec ses programmes dans une image transportable qu'on peut lancer rapidement sur n'importe quelle machine. 

    La virtualisation permet la multiplication et donc la mise à l'échelle rapide. Des centaines d'images identiques peuvent alors être lancées sur de multiples machines, le seul problème à résoudre étant l'allocation des individualités, sous la forme d'adresses IP dont il faut organiser la distribution et la configuration. 

     

    Kubernetes

    Le système Kubernetes (K8S) est une solution au problème de l'allocation des adresses aux images virtuelles qu'on souhaite répartir sur un cluster de machines connectées sur un réseau dit réseau des "noeuds" (nodes), porteurs effectifs de la puissance d'exécution. 

    La première décision est celle de considérer les images comme des grains indépendants qu'on peut regrouper pour former le véritable granule à connecter sur le réseau: le "pod". C'est le pod qui disposera d'une adresse IP, toutes les images lancées à l'intérieur la partageant, exactement comme cela se fait dans une machine ordinaire. 

    L'organisation logicielle à l'intérieur du pod sera donc celle d'une machine connectée ordinaire, une machine "virtuelle" en un nouveau sens, elle-même modulaire d'ailleurs, puisque formée de multiples images. 

    La deuxième est de connecter les pods sur un réseau particulier, dit "réseau des pods", à la fois universel, (absolument tous les pods du cluster y sont connectés et donc interconnectés), et aussi distinct du réseau des nœuds. 

    Un pod se trouve ainsi absolument indépendant du nœud sur lequel il s'exécute et la première grande fonction du système est ainsi obtenue, qui est la complète isolation du réseau physique et du réseau "logiciel" utilisé par les programmes. L'attribution des véritables adresses sur de véritables machines est faite indépendamment du logiciel qui se trouve déployable et capable d'être mis à l'échelle exclusivement en manipulant les configurations logicielles. Une fonction radicalement inconnue des systèmes d'exploitation ordinaire est ainsi fournie.

    La mise en relation de pods localisés sur des nœuds différents n'est pas faite par le système Kubernetes lui-même, mais par des extensions (il en existe de multiples) qui mettent en œuvre diverses astuces pour transformer auto magiquement les messages IP envoyés de manière à connecter les pods comme s’ils étaient sur un véritable réseau au sens expliqué plus haut. 

    L'un des dispositifs possibles est expliqué ici. 

    D'abord on va considérer la communication entre pods sur UN nœud donné. Connecté sur un interface réseau particulier commun à toutes les images du pod, un processus qui envoie un message l'envoie à un filtre spécial, configuré avec le pod, qui identifie l'adresse d'un pod de destination comme locale, et transmet le message sur l'interface virtuel qui lui correspond. 

    Pour communiquer entre différents noeuds, le principe général consiste à allouer à chaque nœud un sous-réseau particulier et à gérer sur chaque nœud la table de routage globale correspondante. Dès qu'un pod distant est identifié, on émet le message vers le nœud porteur du sous réseau correspondant. Réciproquement, quand un nœud reçoit un message à destination d'un pod identifié dans le sous réseau dont il est porteur, il transmet le message à son dispositif interne qui finit de l'acheminer.

    Un routage de niveau supérieur est ainsi réalisé. Le réseau des pods est ainsi lui même "virtualisé". 

    Mais il y a plus fort encore. Les pods pouvant être multiples et rendant tous le même "service", on pourrait souhaiter attribuer une identité IP à cet ensemble et introduire une adresse dite de "service", qu'un mécanisme utiliserait pour balancer les messages entre les différents pods associés. 

    Une telle adresse peut être allouée lors de la configuration des pods et être nommée dans un DNS local. 

    Dés ce moment, un pod souhaitant connecter un autre pod peut envoyer un message vers cette adresse là, et les mécanismes internes de Kubernetes sont alors capable de la distinguer d'une adresse ordinaire, de constituer l'ensemble des adresses de pod correspondantes et de distribuer le message vers l'un ou l'autre d'entre eux, en alternance. Le service devient alors bien plus puissant, et capable de supporter des charges arbitraires, suivant le nombre de pods qu'on lui associe. 

    Pour qu'un service soit accessible de l'extérieur, un système simple est mis en oeuvre, dit du "port de noeud" (nodePort). On configure un port (toujours le même numéro de port) sur tous les noeuds du cluster pour envoyer tout message envoyé dessus vers un service particulier. On sait le dispositif d'envoi capable sur tous les noeuds (c'est le principe) de router le message. Dés lors, tout dispositif capable de router un message desitiné à une adresse de service, à condition qu'il  se termine par l'envoi du message sur ce port là de n'importe quelle machine du cluster, peut distribuer du flux sur ce service.

    Il faut noter que l'adresse de service n'est pas "routable" à priori, et que cela pose un problème. Il y a une solution et qui consiste à attribuer l'adresse du service à UN seul noeud du cluster, et à faire en sorte que cette adresse soit annoncée par le protocole ARP mis en oeuvre sur ce noeud. 

    Toute machine connectée sur le réseau des noeuds peut alors envoyer du flux au service avec les procédures ordinaires décrites. Notons qu'une seule machine sert de point d'entrée. Bien que balancée entre plusieurs pods, le flux ne passe d'abord que par un seul point. On pourrait alors introduire un autre dispositif permettant d'entrer dans Kubernetes par plusieurs points d'entrée situés sur des noeuds différents. 

    L'idée consiste à configurer ces noeuds comme des routeurs, et à utiliser une caractéristique du routage qui est que quand un routeur a le choix entre plusieurs routeurs de destination pour un réseau donné, il balance le flux entre les routeurs de destination. Le protocole IP est alors utilisé quasi directement pour assurer la distribution équilibrée des messages entre plusieurs noeuds kubernetes, assurant ainsi une fiabilité et une puissance de traitement maximale.

    BGP 

    On se doit de mentionner ici BGP (Border Gateway Protocol) le protocole dit de "routage" de l'internet et qui permet de connecter arbitrairement des routeurs généraux sur l'internet. Elément essentiel de ce qu'on appelle le "backbone" de l'internet, c'est à dire les artères majeures de l'acheminement de tout le traffic, il permet à un routeur d'"annoncer " ses tables de routage aux routeurs auxquels il est connecté. 

    Les tables de routages des différents routeurs sont alors constituées de proche en proche. En bordure, sur un routeur ainsi informé, on peut accéder à n'importe quel réseau annoncé. Et c'est comme ça que l'internet est unique. Gloire à lui ! Il est la seule chose qui existe.