From bc447d91b34e74dd3c5a5e9a673901a4079f5011 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Sun, 10 May 2020 13:50:40 +0200 Subject: Premier jet --- src/Technique/Jalon/Interconnexion.md | 44 ++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/Technique/Jalon/Interconnexion.md b/src/Technique/Jalon/Interconnexion.md index 578551b..149a729 100644 --- a/src/Technique/Jalon/Interconnexion.md +++ b/src/Technique/Jalon/Interconnexion.md @@ -1,11 +1,19 @@ *Ce document est une "demande de commentaire". Amendez-le, modifiez le, ajoutez vos réserves ou vos solutions alternatives librement.* +## Contexte + Nous avons une architecture type micro-services. -La plupart de ces services sont consommés en interne et ne sont donc pas exposés sur internet. -Principe de minimisation de la surface d'attaque. -Qui plus est, la communication entre ces services se fait souvent en clair. +Chaque service n'est pas attaché à une machine, il peut en changer pour mieux répartir la charge ou en cas d'incident. +La plupart de ces services sont consommés en interne, leur adresse est découverte grâce au serveur DNS exposé par Consul. Ils ne sont donc pas exposés sur internet. +Principe de minimisation de la surface d'attaque : consommé en interne donc pas de raison d'être disponible en externe. +Qui plus est, la communication entre ces services se fait souvent en clair pour des raisons de simplicités. +Ce n'est pas (trop) problématique car le réseau interne n'est pas (supposé) surveillé. + +## Problème + +Le problème, c'est qu'actuellement, on ne peut pas consommer les services internes d'une infrastructure A depuis une infrastructure B. Par exemple, le serveur LDAP géré par Quentin doit être consommable par le serveur Git géré par Adrien. -Le problème, c'est qu'en interconnectant nos infrastructures, ce qu'on veut c'est pouvoir consommer les services internes d'une infrastructure A depuis une infrastructure B. Par exemple, le serveur LDAP géré par Quentin doit être consommable par le serveur Git géré par Adrien. +## Difficultés techniques D'un point de vue topologie réseau, on a une première contrainte, le NAT en IPv4. En effet, si on a des serveurs derrière un même NAT ils auront envie de communiquer via l'IP interne. @@ -13,6 +21,8 @@ Mais les algos de gestion de membre (membership management) de Consul & co pourr Après, on peut imaginer qu'on leur donne que l'IP externe pour communiquer, et se baser sur le NAT hairpinning de la box pour les communications intra cluster, mais ça rajoute une pression inutile sur la box : tout le traffic inter cluster sera rerouté et réécrit par la box, on se retrouve avec des traitements L3 inutiles. C'est particulièrement critique si on commence à faire du transfert de données (comme Garage par exemple). +## Être adressable sur Internet + Cette complexité devrait évitée à mon avis. Pour cela je propose de baser nos communications de cluster via IPv6 seulement pour pouvoir adresser tout le mone directement. Je propose d'éditer un cahier des charges de la configuration minimale qu'une personne doit remplir pour s'interconnecter à l'infrastructure Deuxfleurs. Voilà une ébauche : - Avoir une IPv6 routable sur Internet @@ -20,6 +30,8 @@ Cette complexité devrait évitée à mon avis. Pour cela je propose de baser no - Avoir au minimum 1Go de RAM - Avoir un processeur x86 +## Trouver un service et chiffrer systématiquement + Maintenant que toutes les machines de toutes les infrastructures peuvent toutes communiquer entre elles, il nous reste encore deux problèmes : - Les services ne sont pas attachés à une machine, et donc pas attachés à une adresse réseau - Le trafic passant en clair sur internet est supposé espionné @@ -28,6 +40,26 @@ Il nous faut donc deux propriétés qui découlent directement de ces deux besoi - Un moyen de permettre à un service C de communiquer avec un service D - Chiffrer systématiquement le traffic qui part sur internet -Voici quelques solutions à notre disposition : +Voici quelques solutions auxquelles je pense : + +### La *low-tech* : TLS au niveau applicatif et Consul DNS en service discovery + +Étant donné que toutes les machines sont adressables en IPv6, on pourrait imaginer continuer dans la lancée actuelle et enregistrer l'IPv6 publique plutôt que l'IPv4 privée. Il faudrait s'assurer que les applications fassent elles-même le TLS au niveau applicatif. Mais ça voudrait dire que les services seraient exposés sur Internet en IPv6 et que notre seule protection serait le controle d'authentification réalisée par l'application (pour l'auth) et le TLS applicatif pas oublié (pour le chiffrement - et l'auth potentiellement en mutual auth). +On pourrait imaginer upgrader ce modèle en rajoutant une règle IPv6 dans le firewall des serveurs pour autoriser le trafic IPv6 global qu'entre serveurs de l'infra. Et seul les ports des services publics actuels seraient ouverts à tous en IPv6. + +### La *networking* : Ajouter un VPN + +Solution étudiée par TeDomum/ACID. Ils partent sur Wesher. Voici leur avis : + + +> On s'est posé la question d'utiliser un service mesh plutôt qu'un mesh d'infrastructure. Et il se trouve que ça collait peu à notre besoin. Il y a trop de choses au dessus pas conçues pour être à poil sur internet et qui rentreraient pas dans le service mesh. +> +> Consul est top si tu veux interconnecter des clusters k8s dans des régions différentes. Mais si tu fais un cluster étendu y'a trop de choses exposées par défaut sans tls ou sans authent sur le réseau d'infra k8s. Et trop de choses dans plein de techno où il attend une forme de l2 partagé ou une proximité réseau, même virtuelle, comme les acl par préfixe IP dans les solutions de stockage, l'allocation de préfixe d'adressage dans les ipam de la plupart des cni, etc. +> +> On pourrait probablement s'en sortir en oubliant le clusters étendu géographique et en dégainant des solutions de synchro multi clusters avec plein de petits clusters et un service mesh par dessus. Mais c'est beaucoup plus complexe de mise en oeuvre et beaucoup plus coûteux qu'un bon vieux vpn en dessous. +> +> Bref. On veut faire simple et efficace. + +### La *micro-service architecture* : utiliser un service mesh -*À venir* +Consul Connect permet de reporter le problème de l'interconnexion des infrastructures non plus au niveau des applications mais au niveau du cluster. Une fois Consul et Consul Connect bien configuré, tout le trafic sera alors chiffré d'un micro service à un autre avec du TLS et de l'authentification mutuelle. Consul sera lui même en charge de trouver comment faire communiquer les éléments. -- cgit v1.2.3