Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VolcampIO 2023 - Infra : Donnez de l'autonomie ...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →
Avatar for ju_hnny5 ju_hnny5
October 15, 2023

VolcampIO 2023 - Infra : Donnez de l'autonomie à vos développeurs avec OctoDNS.pdf

Le service DNS est maintenant indispensable dans notre vie de tous les jours.
Quand on est amené à gérer des services DNS que ça soit "on-premise" ou sur du Cloud, c'est toujours un peu compliqué de s'y retrouver et de gérer tout ça en limitant les erreurs, de manière centralisée.

Ainsi, n'avez-vous jamais rêvé de gérer vos enregistrements en tant que code, d'une manière unique et centralisée, quelle que soit le fournisseur de service DNS ? C'est maintenant chose possible avec OctoDNS.

Depuis que celui-ci a été rendu à la communauté, il ne cesse de gagner en popularité, le but de cette conférence sera de vous expliciter le fonctionnement de celui-ci et de vous donner des cas pratiques.
Les cas pratiques seront abordés par le biais de petites démonstrations comme exemple : "Migrer d'on-premise vers du cloud en une commande", pour que vous puissiez visualiser toute la puissance de l'outil.

Pour terminer je vous ferais un retour d'expérience que nous avons eu chez Deezer en l'implémentant et pourquoi l'avoir choisi plutôt qu'un autre.

Avatar for ju_hnny5

ju_hnny5

October 15, 2023

Other Decks in Technology

Transcript

  1. Vous pouvez migrer de l’on-prem’ vers du Cloud en moins

    de 5mn*? 🤯 *sous réserve de l’effet démo …
  2. ~#whoami Julien Briault 😎 (ex) SecOps consultant chez IT/Infrastructure Manager

    (bénévole) aux Network Engineer / SRE chez Auteur principal sur blog.jbriault.fr #Networking #FOSS #Dev #Music @ju_hnny5
  3. Le DNS permet d’associer un nom compréhensible, à une adresse

    IP. On associe donc une adresse logique, le nom de domaine, à une adresse physique l’adresse IP. … mais pas que ! 🤔 @ju_hnny5
  4. Enregistrement type : A Enregistrement A (Address) : Il associe

    un nom de domaine à une adresse IP IPv4. Par exemple, il peut être utilisé pour associer "www.example.com" à l'adresse IP "192.0.2.1". @ju_hnny5
  5. Enregistrement type : AAAA Enregistrement AAAA (IPv6 Address) : Il

    fonctionne de la même manière que l'enregistrement A, mais il associe un nom de domaine à une adresse IP IPv6. Les adresses IPv6 sont utilisées pour prendre en charge le protocole IPv6 et sont plus longues que les adresses IPv4. @ju_hnny5
  6. Enregistrement type : CNAME Enregistrement CNAME (Canonical Name) : Il

    permet de créer des alias pour un nom de domaine. Par exemple, vous pouvez créer un enregistrement CNAME pour associer un sous-domaine comme "blog.example.com" à un autre domaine existant, comme "www.example.com". @ju_hnny5
  7. Enregistrement type : MX Enregistrement MX (Mail Exchanger) : Il

    spécifie les serveurs de messagerie qui acceptent les e-mails destinés à un domaine. Cela permet de rediriger le trafic de messagerie vers les serveurs appropriés. @ju_hnny5
  8. Enregistrement type : TXT Il permet de stocker du texte

    libre associé à un nom de domaine. Il est souvent utilisé pour fournir des informations supplémentaires, tels que les politiques de sécurité ou les clés de vérification de domaine (utilisées par les services de messagerie). @ju_hnny5
  9. Enregistrement type : PTR Le record PTR (Pointer) est un

    type d'enregistrement DNS utilisé pour effectuer une translation inverse de l'adresse IP vers le nom de domaine. Contrairement aux autres types d'enregistrements DNS qui associent un nom de domaine à une adresse IP, le record PTR associe une adresse IP à un nom de domaine. @ju_hnny5
  10. Des 90s à 2005 : L’âge d’or de Bind 🤠

    Les balbutiements de l’automatisation (gestion de configuration, pet vs cattle) Une administration via Telnet/SSH : ◦ Modification dans un fichier de zone ◦ Les utilisateurs doivent posséder un minimum de connaissances pour ne pas casser le fichier de zone … 😬 N'expose pas d’API
  11. L’arrivée de PowerDNS* : la modernité 😍 Une API REST

    Gestion simplifiée des zones Une CLI performante Un gros défaut : une API mono tenant. *pdns_server (authoritative server)
  12. Une solution écrasante AWS Route53 😱 Gain de temps de

    gestion des instances on-prem : • Pas besoin de gérer la répartition de charge avec dnsdist Possibilité de gestion “as-code” avec des outils comme Terraform* ou Ansible* par exemple. *https://www.terraform.io/ *https://www.ansible.com/ Source : https://bit.ly/42U3GrZ
  13. Gérer ses enregistrements avec Ansible ? • Le module Ansible

    Route53 n’est pas idempotent (enfin, pas totalement)… • Il est lent quand on possède un très grand nombre de zones/enregistrements. • Il atteint rapidement les limites d’appels d’API Route 53 (environ 5 requêtes /sec). • Pas de possibilité de migrer des enregistrements on-prem vers Route53 simplement (ou sans passer par scripting/adaptation).
  14. Gérer ses enregistrements avec Terraform ? • Tout comme Ansible,

    lent quand on possède un très grand nombre de zones/enregistrements. • Format très (trop) verbeux …
  15. Gérer ses enregistrements avec Terraform ? Idéal pour des petites

    zones (dans des projets restreints). Un enfer quand on souhaite migrer d’un provider à un autre. • Le format n’étant pas identique. • Obligé de “scripter” pour transférer. AWS Route53 GCP Cloud DNS
  16. OctoDNS, késako ? • Créé par GitHub pour gérer leur

    infrastructure DNS • Première release (Licence MIT) en 2017 • Écrit en Python (3) 🤨 • Outil dit “déclaratif” et qui ne possède pas d’état • Outil CLI • Permet de migrer rapidement d’un provider DNS à un autre (pratique en cas de panne). 🔥 • Liste non exhaustive des providers supportés :
  17. Facile à installer et configurer ! 🤗 L’installation se fait

    via PyPI. Pour installer les providers : @ju_hnny5
  18. Configuration explicite et accessible • Au format YAML • Définition

    des zones gérées • Définition des sources et destination
  19. Création d’enregistrement accessible • Utilisation du format YAML pour déclarer

    ses enregistrements. • Exemple pour déclarer foo.example.org : OctoDNS Terraform
  20. Migrer/ récupérer facilement une zone 😳 • Permet de migrer

    d’un provider à l’autre sans effort particulier via la commande octodns-sync.* ◦ Peu importe la ou les source(s) ou la ou les destination(s). • Permet de récupérer le contenu d’une zone et de le convertir au format OctoDNS via la commande octodns-dump. @ju_hnny5
  21. Ce qu’il ne fait pas : • Ne permet pas

    de gérer la configuration des serveurs DNS. ◦ Il n’est pas là pour remplacer des outils comme Ansible. • Ne permet pas de changer la configuration des registrar (ex : Gandi). @ju_hnny5
  22. Nouveautés 🚀 • Dynamic Zone Config ◦ Se base sur

    le nom de fichier de zone (exemple : zones/totozone.com.yaml) zones: # This is a dynamic zone config. The source(s), here `config`, will be # queried for a list of zone names and each will dynamically be set up to # match the dynamic entry. '*': sources: - config targets: - ns1 - route53
  23. Nouveautés 🚀 • Héritage statique ◦ Dupliquer le contenu d’une

    zone sur d’autres zones: example.com.: &dual_target sources: - config targets: - ns1 - route53 # these have the same setup as example.com., but will have their own files # in the configuration directory for records. third.tv.: *dual_target fourth.tv.: *dual_target
  24. Nouveautés 🚀 • Héritage statique ◦ Dupliquer le contenu d’une

    zone sur d’autres ◦ Arrivée du système d’alias pour simplifier la chose example.net.: # example.net. is an exact copy of example.com., there will not be an # example.net.yaml file in the config directory as `alias` includes # duplicating the records of the aliased zone along with its config. alias: example.com.
  25. L’autonomie 🫶 • Définition d’un cadre (ex : dépôt Git

    avec workflow + CICD) • L’autonomie n’empêche pas le contrôle ! 🫶 ◦ L’équipe propriétaire du dépôt possède un droit de véto sur les modifications (ex : équipe réseau). • Des CODEOWNERS pour plus d’efficacité. 😯
  26. L’autonomie • La communication 🤓 ◦ Des channels dédiés ▪

    Chan dédié aux questions portant sur le fonctionnement d’OctoDNS ou sur un besoin d’accompagnement. • Ex : #discuss-octodns
  27. L’autonomie • La communication 🤓 ◦ Des channels dédiés ▪

    Chan dédié aux modifications sur le ou les dépôts OctoDNS (via un bot Github par exemple (et son template définit dans .github/PULL_REQUEST_TEMPLATE.md).
  28. L’autonomie • Gain : ◦ Augmentation de la vélocité du

    développeur. ◦ Retire du toil aux équipes d’infrastructure/réseau (sauf la partie de review. ◦ Permet d’éviter les erreurs en passant par une application orchestrée par CI/CD des modifications.
  29. L’autonomie • Gain : ◦ Retour arrière facile (via git

    revert) en cas d’erreur (sur la zone même). ◦ Obtenir plus de contexte (avec les commits) sur les modifications apportées : ▪ Permet également de suivre qui a fait une modification. ▪ Permet de répondre à : “pourquoi cette modif” ?
  30. Workflow* sur une Pull Request (PR) *Workflow simple, utilisé chez

    Deezer 1. Nouvelle PR avec des enregistrements créée 2. Validation de la syntaxe (via octodns-validate & yamllint) 3. Application sur l’environnement de staging 4. Report de l’état des enregistrements de l’env de staging 5. Pr validée ✅
  31. Workflow* au merge sur master 1. Merge de la branche

    sur master 2. Application sur l’env de prod 3. Report de l’état des enregistrements de l’env de prod 4. Enregistrements dispos ! *Workflow simple, utilisé chez Deezer