Docker Overlay Networks : comment fonctionne l’Overlay Docker ?
Utiliser Docker en production demande une compréhension profonde de la technologie, et d’être capable de debugger des problèmes complexes, d’analyser des comportements inattendus ou de résoudre des dégradations de performance. C’est pourquoi nous avons essayé de comprendre au mieux les différents composants techniques utilisés par Docker. Un des plus gros challenges de Docker étant de gérer les communications entre les conteneurs, notre objectif est ici d’expliquer comment fonctionne en détail l’Overlay Docker.
En effet, par défaut, les conteneurs sont locaux à la machine sur laquelle ils s’exécutent, sur un réseau privé, non accessible pour les conteneurs sur d’autres hosts (sauf à exposer des ports locaux sur les machines). Pour répondre à cette problématique d’une communication large et simplifiée entre les conteneurs, plusieurs stratégies sont possibles.
La stratégie employée par Kubernetes, consiste à considérer que chaque host a son propre réseau docker, avec son plan d’adressage, afin de faire du routage entre les hosts d’une machine à l’autre et d’un conteneur à l’autre. Kubernetes ne propose pas nativement de solution et il faut s’appuyer sur d’autres outils tels que flannel ou le routage proposé par le fournisseur Cloud (Amazon ou Google par exemple).
Une autre stratégie consiste à virtualiser un lien de niveau 2 entre les conteneurs pour qu’ils se voient comme s’ils étaient sur le même sous-réseau Ethernet . Pour faire cela, Docker utilise VXLAN, qui permet de tunneler le trafic d’un host à l’autre, en encapsulant les trames Ethernet dans des paquets IP. Afin d’expliquer en détail le fonctionnement de l’Overlay de Docker, j’ai rédigé une série de trois articles techniques à la suite de la présentation de ce sujet lors de la DockerCon 2017 à Austin. Les slides sont disponibles ici, et tout le code utilisé est disponible sur GitHub.
Fonctionnement de l’Overlay Docker
Dans cette partie, nous examinons en détail la construction de l’overlay Docker. Quels sont les composants réseaux utilisés lorsque des containers sont connectés via un overlay ? Comment sont-ils agencés et comment rendent-ils possible la communication ?
Deep dive into Docker Overlay Networks : Part 1
Fonctionnement de VXLAN
Ici nous étudions comment fonctionne VXLAN et comment Docker distribue les informations entre les hosts (le « control plane » de VXLAN qui permet à un host de savoir sur quel host se trouve une adresse MAC ou quelle adresse MAC est associée à une IP donnée).
Deep dive into Docker Overlay Networks : Part 2
Créer un overlay manuellement
Dans cette dernière partie, il s’agit de créer un overlay avec des commandes linux standards et de voir comment distribuer les informations entre les hosts dynamiquement (mon exemple s’appuie sur Consul). Créer la configuration pour tunneler le trafic entre les hosts n’est pas si complexe, mais la difficulté est de faire en sorte que les conteneurs se trouvent. Il faut établir la correspondance entre l’adresse IP et l’adresse mac, de façon à savoir sur quel hôte physique est chaque conteneur. Cette partie découverte est relativement complexe.
Dans un premier temps, nous réalisons cette étape manuellement, avant de voir comment la rendre dynamique pour simuler ce que fait Docker.
Deep dive into Docker Overlay Networks : Part 3
Une stratégie alternative avec BGP
Lors de la prochaine DockerCon à Copenhague, mon talk sera dédié à l’utilisation d’une solution standard pour la diffusion des informations nécessaires à VXLAN (BGP avec l’extension EVPN). Cette stratégie alternative de découverte s’appuie sur des standards du marché, et pourrait rendre l’overlay docker compatible avec d’autres technologies qui font du VXLAN.
Aujourd’hui la solution proposée par Docker est efficace et simple d’utilisation car elle est entièrement packagée. En revanche cette solution ne permet pas de se connecter simplement à des services qui ne sont pas dans l’environnement Docker, ce que permettrait une solution standard.