Retour aux articles
  • 07.02.2020

Consul, un vrai couteau suisse par Xavier Pestel

Consul, un vrai couteau suisse par Xavier Pestel

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 ?
  Consul Hashicorp  

2- Installation

Architecture

 

architecture consul

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 :

Répertoire et user consul

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

1__pbcwaca7nlb5s10w0ijlg  

Agent Fichier de configuration : json

  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

Services Fichier de configuration : json

SystemD

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

- args : custom

- script

- http

- tls

- grpc

SystemD

SystemD

SystemD

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 https://192.168.57.10:8500/v1/catalog/services | jq

curl https://192.168.57.10:8500/v1/catalog/service/myapp | jq

curl https://192.168.57.10:8500/v1/agent/members | jq

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

curl https://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

DNS SRV

dnsmasq

DNS SRV

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/)

Linkerd

Méthode

  • Host (header)

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

1_nmi3ako48zkpr23darnb2w

Méthode

  • Route

https://127.0.0.1:4141/myapp

Linkerd

6- LB — ex : HAProxy

1_641lhzusqbogmhcjv2hp5a

HAProxy

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

Consul Template

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

hashicorp/consul-template

1_e77cxbslfzeuuhebsyl5eq

Template

  • GO template (~ Jinja)
  1_u2_n0bhhpj-cwbo2tl_azq     GO template (~ Jinja)    

7- Prometheus

● Autodiscovery : consul fourni les targets

● Route prometheus : métriques de consul

● Consul exporter : état des services etc

Prometheus

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

https://192.168.57.15:9090/graph

Autodiscovery

Route consul

- Métriques de consul

- Etat des services

- Etat des instances

- Temps de réponse de consul

- etc

Autodiscovery

Consul exporter

- ajout d’une route prometheus

- spécifique services (état…)

- docker ou classique

Consul exporter

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

Inventory dynamique

9- Conf : key/value

  key/value    

Et bien plus …

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

À bientôt pour un prochain meetup !

- La Team Mobiskill