Note de traduction.: L'auteur de l'article original est Théo Chamley, architecte de solutions cloud chez Google. Dans cette publication pour le blog Google Cloud, il présente un bref aperçu d'un guide plus détaillé de son entreprise, intitulé "». Dans ce guide, des experts de Google ont rassemblé les meilleures pratiques pour l'exploitation des conteneurs dans le contexte de l'utilisation de Google Kubernetes Engine et au-delà , abordant une large gamme de sujets : de la sécurité à la surveillance et à la journalisation. Quelles sont donc, selon Google, les pratiques les plus importantes à suivre lors de l'utilisation des conteneurs ?

(un service basĂ© sur Kubernetes pour exĂ©cuter des applications conteneurisĂ©es dans Google Cloud â Note de traduction.) â est l'un des meilleurs moyens de dĂ©ployer des charges de travail nĂ©cessitant une mise Ă l'Ă©chelle. Cela garantira le bon fonctionnement de la plupart des applications, Ă condition qu'elles soient conteneurisĂ©es. Mais si vous souhaitez que votre application soit facile Ă gĂ©rer et que vous souhaitiez tirer parti de tous les avantages de Kubernetes, il est nĂ©cessaire de suivre les meilleures pratiques. Celles-ci faciliteront l'exploitation de l'application, sa surveillance et son dĂ©pannage, tout en amĂ©liorant la sĂ©curitĂ©.
Dans cet article, nous passerons en revue les Ă©lĂ©ments Ă connaĂźtre et Ă mettre en Ćuvre pour le fonctionnement efficace des conteneurs dans Kubernetes. Pour ceux qui souhaitent approfondir les dĂ©tails, nous vous encourageons Ă lire le matĂ©riel , ainsi qu'Ă jeter un Ćil Ă notre sur la crĂ©ation de conteneurs.
1. Utilisez les mécanismes natifs des conteneurs pour la journalisation
Si l'application s'exĂ©cute dans un cluster Kubernetes, il n'y a pas besoin de beaucoup de log. Un systĂšme de journalisation centralisĂ© est probablement dĂ©jĂ intĂ©grĂ© dans le cluster utilisĂ©. Dans le cas de Kubernetes Engine, cela est gĂ©rĂ© par . (Note de traduction.: Et dans le cas d'une installation Kubernetes autonome, nous recommandons d'explorer notre solution open source â .) Ne vous compliquez pas la vie et utilisez les mĂ©canismes de journalisation natifs des conteneurs. Ăcrivez les logs dans stdout et stderr â ils seront automatiquement rĂ©cupĂ©rĂ©s, stockĂ©s et indexĂ©s.
Si vous le souhaitez, vous pouvez également écrire les logs au format . Cette approche permettra d'ajouter facilement des métadonnées. Et avec celles-ci, il sera possible de rechercher dans Stackdriver Logging les logs en utilisant ces métadonnées.
2. Assurez-vous que les conteneurs sont sans état et immuables
Pour un fonctionnement correct des conteneurs dans un cluster Kubernetes, ceux-ci doivent ĂȘtre sans Ă©tat et immuables. Lorsque ces conditions sont remplies, Kubernetes sera capable de remplir sa fonction en crĂ©ant et dĂ©truisant des entitĂ©s d'application quand et oĂč cela est nĂ©cessaire.
Sans Ă©tat signifie que tout Ă©tat (donnĂ©es permanentes de tout type) est stockĂ© en dehors du conteneur. Pour cela, selon les besoins, diffĂ©rents types de stockage externe peuvent ĂȘtre utilisĂ©s : , , , ou d'autres bases de donnĂ©es gĂ©rĂ©es. (Note de traduction.: Pour en savoir plus, consultez Ă©galement notre article «».)
Immuable signifie que le conteneur ne sera pas modifiĂ© durant sa vie : pas de mises Ă jour, de correctifs, ou de modifications de configuration. Si vous devez mettre Ă jour le code de l'application ou appliquer un correctif, crĂ©ez une nouvelle image et dĂ©ployez-la. Il est recommandĂ© de sortir la configuration du conteneur (port d'Ă©coute, options de l'environnement d'exĂ©cution, etc.) Ă l'extĂ©rieur â dans et . Ceux-ci peuvent ĂȘtre mis Ă jour sans avoir besoin de reconstruire une nouvelle image de conteneur. Pour crĂ©er facilement des pipelines de construction d'images, vous pouvez utiliser . (Note de traduction.: Pour ces objectifs, nous utilisons l'outil Open Source .)

Exemple de mise à jour de la configuration Deployment dans Kubernetes à l'aide de ConfigMap, monté dans les pods comme configuration
3. Ăvitez les conteneurs privilĂ©giĂ©s
Vous ne lancez pas vos applications en tant que root sur vos serveurs, n'est-ce pas ? Si un attaquant pĂ©nĂštre dans l'application, il obtiendra l'accĂšs avec les droits root. Les mĂȘmes considĂ©rations s'appliquent pour ne pas lancer de conteneurs privilĂ©giĂ©s. Si vous devez modifier des paramĂštres sur l'hĂŽte, vous pouvez donner au conteneur des des capacitĂ©s avec l'option dans Kubernetes. Si vous devez modifier les sysctls, Kubernetes dispose d pour cela. En gĂ©nĂ©ral, essayez d'utiliser au maximum les et les conteneurs sidecar pour effectuer des opĂ©rations privilĂ©giĂ©es similaires. Ils n'ont pas besoin d'ĂȘtre accessibles ni pour le trafic interne, ni pour le trafic externe.
Si vous administrez un cluster, vous pouvez utiliser pour restreindre l'utilisation de conteneurs privilégiés.
4. Ăvitez de lancer en tant que root
Il a déjà été question des conteneurs privilégiés, mais il serait encore mieux que vous ne lanciez pas d'applications en tant que root à l'intérieur du conteneur. Si un attaquant trouve une vulnérabilité à distance dans une application exécutée avec des droits root, lui permettant d'exécuter du code, puis réussit à sortir des limites du conteneur via une vulnérabilité encore inconnue, il obtiendra des droits root sur l'hÎte.
Le meilleur moyen d'éviter cela est avant tout de ne rien exécuter en tant que root. Pour cela, vous pouvez utiliser la directive UTILISATEUR dans Dockerfile ou runAsUser dans Kubernetes. L'administrateur du cluster peut également configurer un comportement forcé à l'aide de .
5. Rendez l'application facile Ă surveiller
Tout comme le journalisation, la surveillance est une partie intĂ©grante de la gestion de l'application. Une solution populaire de surveillance dans la communautĂ© Kubernetes est â un systĂšme qui dĂ©couvre automatiquement les pods et les services nĂ©cessitant une surveillance. (Note de traduction.: Voir Ă©galement notre sur la surveillance avec Prometheus et Kubernetes.) peut surveiller les clusters Kubernetes et inclut sa propre version de Prometheus pour la surveillance des applications.

Le tableau de bord Kubernetes dans Stackdriver
Prometheus s'attend à ce que l'application expose des métriques sur un endpoint HTTP. Pour cela, des sont disponibles. Un format similaire est utilisé par d'autres outils comme et .
6. Rendez l'état de santé de l'application accessible
La gestion d'une application en production est aidĂ©e par sa capacitĂ© Ă communiquer son Ă©tat Ă l'ensemble du systĂšme. L'application est-elle en cours d'exĂ©cution ? Est-elle en bon Ă©tat ? PrĂȘte Ă recevoir du trafic ? Comment se comporte-t-elle ? La maniĂšre la plus courante de rĂ©soudre ce problĂšme est de mettre en Ćuvre des contrĂŽles de santĂ© (health checks). Kubernetes a deux types : .
Pour un liveness probe (contrĂŽle de l'Ă©tat de vie) l'application doit avoir un endpoint HTTP renvoyant une rĂ©ponse « 200 OK » si elle fonctionne et que ses principales dĂ©pendances sont satisfaites. Pour un readiness probe (contrĂŽle de la disponibilitĂ©) L'application doit avoir un autre point de terminaison HTTP, renvoyant une rĂ©ponse « 200 OK », si l'application est en bon Ă©tat, que les Ă©tapes d'initialisation sont terminĂ©es et qu'aucune requĂȘte correcte ne gĂ©nĂšre d'erreur. Kubernetes dirigera le trafic vers le conteneur uniquement lorsque l'application sera prĂȘte selon ces vĂ©rifications. Les deux points de terminaison peuvent ĂȘtre combinĂ©s si l'Ă©cart entre les Ă©tats de viabilitĂ© (liveness) et de prĂ©paration (readiness) n'existe pas.
Pour en savoir plus, vous pouvez lire l'article correspondant de Sandeep Dinesh, Developer Advocate chez Google : «».
7. Choisissez attentivement la version de l'image
La plupart des images publiques et privĂ©es utilisent un systĂšme de balisage similaire Ă celui dĂ©crit dans . Si l'image applique un systĂšme proche de , il faut tenir compte des spĂ©cificitĂ©s du balisage. Par exemple, la balise latest peut souvent ĂȘtre dĂ©placĂ©e d'une image Ă l'autre â elle ne peut pas ĂȘtre fiable si vous avez besoin de constructions et d'installations prĂ©visibles et reproductibles.
Vous pouvez utiliser la balise X.Y.Z (elles sont presque toujours constantes), mais dans ce cas, suivez tous les correctifs et mises à jour de l'image. Si l'image utilisée a la balise X.Y, c'est une bonne option de compromis. En choisissant celle-ci, vous obtenez automatiquement des correctifs tout en vous appuyant sur une version stable de l'application.
P.S. de l'auteur
Lisez aussi dans notre blog :
- «»;
- «»;
- «»;
- «» (aperçu et vidéo de la présentation);
- «» (aperçu et vidéo de la présentation);
- «» (aperçu et vidéo de la présentation);
- «» (aperçu et vidéo de la présentation);
- «».
Source : habr.com
