Consul, un vrai couteau suisse par Xavier Pestel

Mobiskill
Mobiskill
Sep 27 · 5 min read

Vous n’avez pas pu assister au Mobitalks Infra #1 ? Pas de panique ! Voici un récap’ de la présentation faite par Xavier Pestel, DevOps chez Oscaro.com
& Youtubeur xavki : docker, ansible, kubernetes, haproxy...

1- Qu’est-ce que Consul ?

Notion de service

émergé avec les microservices (découpage d’applications monolithes)

un service dispose de plusieurs instances

twelve factors

principe :

  • découpage par brique métier
  • petites équipes de développement
  • évolutions/itérations plus faciles (CI/CD…)
  • isolation et résilience
  • scalabilité

Consul (Hashicorp)

registry de services

découverte de services/instances

interrogeable par API : facilite la mise à jour de configurations et permet :

  • enregistrements port/ip des instances
  • entrées/sorties de pool (rolling update)
  • healthcheck des instances
  • mise à jour dynamique des configurations
  • stockage clefs/valeurs
  • interface graphique
  • Policies/ACL : droits d’accès par token (lecture, écriture…)
  • Intentions : quels services accèdent auxquels ?

2- Installation

Architecture

Processus simple et classique

  1. Download du binaire
  2. Positionnement dans le PATH
  3. Création d’un user et répertoires (datas et configuration)
  4. Fichiers de configurations (conf + ACL + UI)
  5. Création d’un service systemd
  6. Activation et Démarrage

Rq : ajout d’ACL (production) avec gestion de rôles et token

Répertoire et user :

Master
Fichier de configuration : json

  • advertise : connue des autres machines
  • client_addr : adresse d’écoute
  • datacenter : groupe
  • data_dir
  • domain : dns srv
  • encrypt : clef
  • x_join : master
  • ui : activation de la GUI

Agent
Fichier de configuration : json

Services
Fichier de configuration : json

  • nom de service
  • tags : plus utiles qu’on le pense
  • timeout
  • interval
  • check :

- args : custom

- script

- http

- tls

- grpc

SystemD

- nom de service

- tags : plus utiles qu’on le pense

- timeout

- interval

- check :

- args : custom

- script

- http

- tls

- grpc

3- Interactions, API, module ansible

CLI

○ consul members

○ consul catalog nodes

○ consul catalog services

○ consul maint -enable

○ consul catalog -disable

○ consul catalog reload

○ consul kv put monrep/monfichier.conf @monfichier.txt

○ consul get monrep/monfichier.conf

API

○ curl http://192.168.57.10:8500/v1/catalog/services | jq

○ curl http://192.168.57.10:8500/v1/catalog/service/myapp | jq

○ curl http://192.168.57.10:8500/v1/agent/members | jq

○ curl http://192.168.57.10:8500/v1/catalog/node/<id_node> | jq

○ curl http://192.168.57.10:8500/v1/catalog/node/<id_node> | jq

○ clefs / valeurs

○ entrée d’instances

○ entrée de services

○ maintenance

4- DNS SRV

- url service

- instances

- priorité : instance de sauvegarde

- poids : si même priorité pondération

dnsmasq

5- Mesh — ex : Linkerd

Linkerd

  • LoadBalancer (retryable notamment)
  • ReverseProxy
  • Bonne prise en compte de consul
  • Controler Ingress (k8s)

Deux méthodes

  • host (header)
  • route (/nom_service/)

Méthode

  • Host (header)

curl -H ‘Host:myapp’ http://127.0.0.1:4040

Méthode

  • Route

http://127.0.0.1:4141/myapp

6- LB — ex : HAProxy

HAProxy

  • loadbalancer reconnu
  • reverse proxy
  • controller ingress (k8s)

Consul Template

  • lecture des données de consul
  • édition dynamique de fichier
  • lancement d’une commande
  • aussi bien service que key/value

Template

  • GO template (~ Jinja)

7- Prometheus

● Autodiscovery : consul fourni les targets

● Route prometheus : métriques de consul

● Consul exporter : état des services etc

Autodiscovery

- Métriques des instances applicatives

- Entrées et sorties des noeuds

- Exploitations possibles :

- tags

- ports

- hostname

- service

Ex :

- remplacement du port métriques

- renseignement de labels

- filtre sur tags

http://192.168.57.15:9090/graph

Route consul

- Métriques de consul

- Etat des services

- Etat des instances

- Temps de réponse de consul

- etc

Consul exporter

- ajout d’une route prometheus

- spécifique services (état…)

- docker ou classique

8- Ansible

Inventory dynamique

  • utilisation de la base consul
  • filtre : noms de services
  • filtre : tags

https://github.com/ansible/ansible/blob/devel/ contrib/inventory/consul_io.py

9- Conf : key/value

Et bien plus …

● création de GUI à la volée :

  • portail de swaggers

● alerting : consul-alerts

● … la limite de l’imagination

https://www.slideshare.net/PierreSouchay/2019-0528-s re-consul-criteo-meetup

Mobiskill

Written by

Mobiskill

Mobiskill, c’est une équipe de consultants experts en recrutement mais surtout des passionnés du web et du mobile !