Infrastructure avec Kubernetes

Younes
interactive object
Published in
3 min readSep 2, 2018

Chez Interactive Object, on a commencé à travailler avec les conteneurs Docker depuis 2015. On utilisait Rancher comme orchestrateur des différents cluster en production mais au fil du temps on a migré notre stack sur Kubernetes (k8s) vu la maturité sur projet et son adoption à grande échelle.

Cet article décrit comment on utilise k8s en environnement de production.

Toutes les applications, qu’elles soient StateFul ou Stateless, ont besoin d’un environnement avec ces trois fondamentales :

Mode découverte

Les conteneurs docker sont par nature élastique, chaque conteneur est chargé avec une adresse IP dynamique et l'accès à l’instance ce fait grace au mode découverte (service discovery). Kubernetes prend en charge deux modes de découverte: Variables d’environnement et DNS.

Si on lance le container MongoDB par exemple , son adresse IP sera disponible en tant que variable d’environnement MONGODB_HOST et également en nom domaine local mongodb.default.svc.cluster.local (“default” c’est le namespace par défault de k8s).

La discovery via DNS est le plus utilisée parmi les deux mode, il faut faire attention avec certain client DNS dont le cache TTL peut trop élevée, ce qui rend la résolution DNS obsolète.

Ingress

Kubernetes Ingress permet d’exposer les services hors du cluster et acheminer le trafic vers un ou plusieurs conteneur. Il fournit également les mécanismes de distributions de charge (Load Balance) entre les pods qu’il contient, une terminaison SSL et des règles de routage basées sur des chemins URL .

Un service Ingress permet de regrouper plusieurs réplicas de pods, afin d’accéder à ceux-ci via une seule terminaison (ou endpoint) résolue par un nom de domaine correspondant au nom du service.

Ingress est une couche d’abstraction qui peut utiliser par plusieurs contrôleurs. Les implémentations actuelles du contrôleur Ingress incluent Nginx Ingress (basé sur Nginx), Voyager (basé sur HAProxy) et Contour (basé sur EnvoyProxy).

On utilise Voyager (avec GCK) pour le routage de trafic HTTP et TCP.

HAProxy est un proxy conçu spécifiquement pour les applications natives cloud modernes et Voyager donne la possibilité de configurer HAProxy de manière plus fine. Voyager offre également un support native de gRPC ainsi que la prise en charge automatique des certificats SSL avec Let ‘s Encrypt.

Exemple de configuration Ingress avec Voyager

Monitoring

L’application est définie par plusieurs objets Kubernetes, tels que les pods, les services et les entrées… d’où l’importance de surveiller l’état de chacun d’eux.

Prometheus est certainement le meilleure choix pour le monitoring des applications et du cluster Kubernetes en général. Il a une service de discovery intégrée pour les objets k8s. Alertmanager est utilisé pour la gestion des alerts et l'intégration avec des services tiers comme Slack.

Prometheus est utilisé en combinaison avec Heapster, qui peut être servir de pont vers de nombreuses solutions de monitoring open-source comme InfluxDB et Riemann.
On peut ajouter à la liste cAdvisor si vous voulez avoir des mesures précises au niveau des containers docker.

Déploiement

Nous regroupons toutes nos applications en images Docker avec ses dépendances, pour que le pipeline de déploiement reste propre. Helm, le gestionnaire de paquets pour les k8, est un excellent moyen pour déployer des applications sur Kubernetes. Il existe de nombreux charts helm proposés par la communauté prêts à être utilisés en production.

Puisque Helm ne fournit pas un moyen pratique de stocker des secrets, on utilise Ansible Vault avec le module ansible-helm.

Certificate SSL

Près de 90% des applications modernes exposent un point de terminaison HTTP. Pour sécuriser ces services HTTP, vous devez d’abord installer un certificat SSL pour activer les communications cryptées.

La mise en service, l’installation et la mise à jour de ces certificats peuvent s’avérer fastidieuses si elles ne sont pas automatisées correctement.

La génération automatique des certificats Let ‘s Encrypt pour les entrées K8s est réalisé avec Voyager.

Conclusion

Dans cet article, nous avons vu l’intérêt d’utiliser Kubernetes pour votre prochain projet. Notre récent projet Yala utilise cette architecture et nous allons approfondir quelques-uns de ces sujets prochainement sur ce blog.

PS : Besoin de conseils de mise en place d’architecture kubernetes, contactez-nous : contact@interactive-object.com

--

--