RFC 1 - Classification et réplication des services
Préambule
L'infrastructure de catgrl.org a été construite en ayant en tête deux sites, contenant chacun la totalité des services. Cette situation se ressent sur l'architecture, et ne permet pas facilement de savoir comment héberger un site partiel. Le but de ce document est de classifier les services en fonction des méthodes et besoins de réplication.
Les services sont séparés en 4 catégories :
- Les services nécessaires
- Les services d'infrastructure
- Les services simples
- Les services complexes
Les serveurs DNS externes sont traités séparément.
1. Services nécessaires
Chaque site DOIT héberger les services suivants :
- Wireguard, afin de se connecter aux autres sites de l'infrastructure
- Un serveur DNS interne. Celui-ci est statique, et est entièrement déployé par Ansible (pas un DNS secondaire dépendant d'un autre site)
Afin de simplifier le déploiement de cette couche nécessaire, je propose de les réunir en une seule machine, que je propose d'appeler "catbox", en référence aux noms des routeurs tout en un proposés par les fournisseurs d'accès internet.
La catbox PEUT également héberger les services suivants :
- Un serveur de backup
2. Services d'infrastructure
Ces services sont à destination des autres services hébergés sur le site. Ils ne sont nécessaires que lorsque le site contient des services les nécessitant.
Si utile, chaque site DEVRAIT héberger les services suivants :
- Un réplicat PostgreSQL
- Un Reverse Proxy (nginx)
- Du monitoring (Prometheus et Grafana)
- Un Load Balancer interne (haproxy)
- Un serveur de backup (sur la catbox ou sur un serveur dédié)
3. Services simples
Un service est dit "simple" lorsqu'il est soit entièrement statique (par exemple, le site web externe de l'association), ou n'utilise que le cluster PostgreSQL pour stocker ses données (par exemple Vaultwarden).
Chaque site DEVRAIT héberger une instance de chaque service simple si ses ressources lui permettent.
Aujourd'hui, les services concernés sont les suivants :
- Site web externe de l'association
- Interface d'alias
- LDAP
- Vaultwarden
- Webmail
4. Services complexes
Un service est dit "complexe" lorsqu'il n'est pas simple. Deux cas de figure peuvent se poser :
- Le service est clusterisable. Chaque site DEVRAIT en héberger une instance si ses ressources lui permettent. Les services consernés sont les suivants :
- Proxmox Mail Gateway
- LemonLDAP
- Backend mail
- Le service n'est pas clusterisable. Ces services seront gérés au cas par cas, avec un seul site à la fois contenant une version active du service. Les services concernées sont les suivants :
- Forgejo
- Bookstack
5. DNS externe
Le service de DNS externe est particulier, car il ne peut pas être entièrement géré par ansible avec des instances indépendantes, car les modifications doivent se propager afin de permettre au challenge ACME par DNS de fonctionner. De plus, le DNS utilisant de l'UDP, il n'est pas possible de faire de failover dessus. Je propose donc de les déplacer directement sur les fronts.
Chaque serveur Front DOIT héberger un serveur DNS externe. L'un d'eux est choisi comme serveur principal. Le changement de serveur principal peut être fait à tout moment par Ansible.
> La catbox PEUT également héberger les services suivants : Un serveur de backup
Est-ce que mettre le service de backup dans la catbox est réellement pertinent ? Comme c'est un service optionnel, je pense qu'il pourrait être séparé de la catbox qui contient les services essentiels
> Si utile, chaque site DEVRAIT héberger les services suivants
> Chaque site DEVRAIT héberger une instance de chaque service simple si ses ressources lui permettent.
J'hésite entre DEVRAIT et PEUT pour cette partie. Une raison particulière pour avoir mis DEVRAIT ? À partir du moment ou ce n'est pas un hard requirement, il faut dans tous les cas prendre en compte le fait qu'un service peut ne pas héberger tous ces services, autant donner l'option, non ?
Idem pour le DEVRAIT pour les services clusterisables. En particulier pour le PMG, il faut que je vérifie ça, mais de mémoire chaque PMG est associée à une IP de sortie frontend dans le schéma actuel.
Pour le dns externe: je lance une discussion sur xmpp, j'ai besoin de détails pour mieux comprendre la problématique que tu cite, mais dans l'absolu ta proposition de les héberger sur les front me semble raisonable: De toute façons ils ne contiennent que des informations publiques, ça ne me pose pas de problème qu'elles soient sur la partie front de l'infra qui ne sera pas hébergée sur du matériel à nous.
Aucun commentaire à afficher
Aucun commentaire à afficher