Bientôt disponible ! Suivez-nous pour être informé dès la sortie
Caractéristiques
Reliure spirale - 17 x 21 cm (Médian)
ISBN : 978-2-409-04736-7
EAN : 9782409047367
Ref. ENI : EIM3KUB
Ce support s’adresse aux administrateurs système qui souhaitent maîtriser le déploiement de Kubernetes et comprendre en quoi il répond aux nouveaux enjeux informatiques liés à l’arrivée des conteneurs. Le lecteur découvre ainsi les différentes fonctionnalités de Kubernetes qui lui permettront de gérer des conteneurs et leur cycle de vie et de mettre en place toutes les briques indispensables à un cluster de production. Pour appréhender au mieux la lecture de ce support, des notions sur...
Ce support s’adresse aux administrateurs système qui souhaitent maîtriser le déploiement de Kubernetes et comprendre en quoi il répond aux nouveaux enjeux informatiques liés à l’arrivée des conteneurs. Le lecteur découvre ainsi les différentes fonctionnalités de Kubernetes qui lui permettront de gérer des conteneurs et leur cycle de vie et de mettre en place toutes les briques indispensables à un cluster de production.
Pour appréhender au mieux la lecture de ce support, des notions sur l’administration d’un système Linux, sur le principe de fonctionnement des couches réseau, sur l’utilisation de Git ainsi que la connaissance d’un environnement Cloud sont recommandées. Tout au long du support, l’auteur s’appuie sur des exemples concrets pour aider le lecteur dans sa découverte de Kubernetes et dans l’assimilation des concepts étudiés.
Après l’installation de l’environnement et des outils indispensables pour suivre les exemples du support, l’auteur familiarise le lecteur avec les concepts propres à Kubernetes tels que le cycle de vie d’un conteneur, les pods, les services ou le tableau de bord. Au fur et à mesure, le lecteur découvre des concepts plus avancés comme la persistance des données, l’hébergement d’applications en cluster, la mise en place de réplications entre plusieurs pods, la mise en place d’outils de sécurité, l’utilisation de règles de haute disponibilité, la gestion des briques internes de Kubernetes ou le gestionnaire de paquets Helm.
Puis l’auteur présente comment installer et configurer Kubernetes afin d’aider le lecteur à mettre en place un cluster, dans le cloud ou sur des machines classiques, avant de détailler l’exposition d’une application sur Internet, les polices réseau, la sécurisation SSL, les montées en charge, le choix des machines dans le cloud, la surveillance applicative ou encore la mise en place de règles d’hébergement. Pour finir, le lecteur trouve dans les derniers chapitres une introduction au maillage de services avec Istio, ainsi que des informations sur la gestion des droits d’accès, sur la notion d’opérateur ou encore sur la gestion de l’application dans un système d’intégration continue.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
3.1.4 Déclaration des points de collecte dans Kubernetes
3.1.5 Consultation des points de collecte dans Prometheus
3.2 Définition des alertes
3.2.1 Consultation de la liste des alertes
3.2.2 Structure d’une règle d’alerte
3.2.3 Définition d’alertes
3.3 Gestionnaire d’alertes
3.3.1 Rôle du gestionnaire d’alertes
3.3.2 Consultation du gestionnaire d’alertes
3.3.3 Configuration des alertes
3.3.4 Désactivation des alertes scheduler et manager (clusters managés)
3.3.5 Configuration de l'envoi des notifications
3.3.6 Adresse de l’API de Slack
4. Tableaux de bord Grafana
4.1 Présentation de Grafana
4.2 Configuration de Grafana
4.2.1 Branchement au moteur Prometheus
4.2.2 Définition des tableaux de bord
4.3 Interface Grafana
4.4 Sécurisation de l'accès à Grafana
5. Suppression du chart de Prometheus
Centralisation des journaux d’activité
1. Objectifs du chapitre et prérequis
2. Principe de la centralisation des journaux
2.1 Architecture
2.2 Caractéristiques de l’agent déployé
2.3 Mécanisme de centralisation des journaux
3. Centralisation dans le cloud
3.1 Centralisation à l’aide d’un service managé
3.2 Google Stackdriver
3.2.1 Présentation de Stackdriver
3.2.2 Pod Fluent Bit (cluster GKE)
3.2.3 Consultation des journaux
3.3 Azure Monitor
3.3.1 Présentation d'Azure Monitor
3.3.2 Consultation des journaux
3.4 Amazon Cloudwatch
3.4.1 Présentation de Cloudwatch
3.4.2 Activation de Cloudwatch sur le centre de contrôle
3.4.3 Configuration de Cloudwatch
3.4.4 Création de la police de communication avec Cloudwatch
3.4.5 Création d’un compte et rattachement à la police
3.4.6 Création d’une clé d’accès
3.4.7 Envoi des journaux dans Cloudwatch
3.4.8 État des pods déployés
3.4.9 Consultation des journaux dans Cloudwatch
4. Centralisation des journaux avec Loki
4.1 Présentation de Loki
4.1.1 Origine de Loki
4.1.2 Loki vs Opensearch/Elasticsearch
4.1.3 Conseil d’utilisation
4.2 Installation de Loki
4.3 Configuration de la source de données Grafana
4.4 Consultation des journaux dans Grafana
4.4.1 Vérification des sources de données
4.4.2 Consultation des journaux
5. Centralisation des journaux avec Opensearch/Elasticsearch
5.1 Avertissements et limitations
5.2 À propos d’Opensearch et d’Elasticsearch
5.3 Déploiement des briques Opensearch/Elasticsearch
5.3.1 Installation d’Opensearch
5.3.2 Installation de l’agent Fluent-bit
5.3.3 Installation de Kibanad/Opensearch Dashboards
5.4 État des différentes briques
5.4.1 État du moteur Elasticsearch
5.4.2 Agent Fluent-bit
6. Gestion d’Opensearch/Elasticsearch
6.1 Utilisation de Kibana/Opensearch Dashboards
6.1.1 Accéder à l’interface de Kibana ou Opensearch Dashboards
6.1.2 Création de l’index
6.2 Branchement sur Grafana
6.2.1 Source de données Opensearch/Elasticsearch
6.2.2 Création d’un objet ConfigMap
Maillage de services
1. Objectifs du chapitre et prérequis
2. Présentation d'Istio
2.1 Micro-services et mise en réseau de services
2.2 Présentation d’Istio
2.3 Principe de fonctionnement
3. Installation d’Istio
3.1 Configuration d'external-dns
3.2 Dépôt des charts Istio
3.3 Installation d’istio
3.4 Configuration d’Istio
3.4.1 Activation des tableaux de bord
3.4.2 Configuration d'Istio
3.5 Configuration du composant Gateway Istio
3.5.1 Présentation du mécanisme
3.5.2 Installation du composant Gateway
3.5.3 Génération du certificat
4. Utilisation d’Istio
4.1 Injection de pods dans le maillage de services
4.1.1 Installation d’istioctl
4.1.2 Injection du sidecar à l’aide d’istioctl
4.1.3 Injection du sidecar par annotation
4.1.4 Désactivation du sidecar par annotation
4.2 Déploiement d’une application de test
4.2.1 Principe de l’exposition d’application avec Istio
4.2.2 Préparation du fichier de déploiement Mailpit
4.2.3 Déclaration du service Mailpit
4.2.4 Création de l’objet Gateway
4.2.5 Création du service virtuel (VirtualService)
4.3 Sécurisation des flux
4.3.1 Activation de Mutual TLS (mTLS)
4.3.2 Consultation des polices du service Mailpit
4.3.3 Forcer l’utilisation de mTLS
5. API Gateway
5.1 Origine du besoin
5.2 Principe de fonctionnement
5.3 Installation de l’API Gateway
5.4 Définition de l’objet Gateway
5.5 Définition de l’objet HTTPRoute
5.6 Configuration du module external-dns
5.7 Un mot sur les limitations actuelles
6. Tableaux de bord
6.1 Présentation des différentes briques
6.2 Interface Kiali
6.3 Interface Grafana
6.4 Interface Jaeger
Compilation et stockage d’images Docker
1. Objectifs du chapitre et prérequis
2. Création d’une image Docker
2.1 Application d’exemple Flask HealthCheck
2.1.1 Présentation de l’application
2.1.2 Présentation des dépendances
2.1.3 Description des dépendances
2.1.4 Installation des dépendances
2.1.5 Initialisation de l’application
2.1.6 Fonction racine
2.1.7 Lancement du programme
2.2 Environnement de compilation
2.3 Un mot sur les alternatives à Docker
2.4 Le fichier Dockerfile
2.4.1 Présentation du format
2.4.2 Création de l’image
2.4.3 Compilation et tag de l’image
2.4.4 Authentification sur le registre d’images Docker
2.4.5 Pousser l’image sur le registre
3. Image Docker multi-étape (multi-stage)
3.1 Origine du besoin
3.2 Exemple de compilation avec Maven
4. Analyse d’images
4.1 Historique des commandes
4.2 Analyse de l’image : Dive
4.2.1 Présentation de Dive
4.2.2 Installation de Dive
4.2.3 Consultation du contenu d’une image
5. Analyse de failles de sécurité avec Trivy
5.1 Origine du besoin
5.2 Installation de Trivy
5.3 Lancement de l’analyse
5.4 Configuration de l’analyse
6. Utilisation de registres Docker privés
6.1 Origine du besoin
6.2 Déploiement d’image d’un registre privé
6.2.1 Exposition de la problématique
6.2.2 Création du secret
6.2.3 Utilisation du secret
6.2.4 Utilisation d’un compte de service
6.2.5 Recopie d’un secret entre espaces de noms
6.3 Erreurs de récupération des images
6.3.1 Détection des erreurs
6.3.2 Erreur sur le nom de l’image
6.3.3 Secret absent ou non spécifié
6.3.4 Identifiants invalides
6.4 Services de registres managés
6.4.1 Solutions managées
6.4.2 Service Google Container Registry
6.4.3 GitLab.com
Usine logicielle
1. Objectifs du chapitre et prérequis
2. Compilation à l’aide de GitLab
2.1 Application à compiler
2.2 Mécanisme de pipeline GitLab
2.3 Adresse et contenu du dépôt
2.4 Structure du fichier .gitlab-ci.yml
2.5 Exemple de fichier .gitlab-ci.yml de compilation d’image
2.6 Construction d’image à l’aide de Kaniko
2.7 Pour la suite
3. Déploiement continu avec Jenkins
3.1 À propos de Jenkins
3.2 Installation de Jenkins
3.2.1 Configuration du chart
3.2.2 Vérification de l’installation
3.2.3 Connexion à l’interface de Jenkins
3.2.4 Installation d’extensions
4. Pipeline de déploiement continu avec Jenkins
4.1 Prérequis
4.2 Présentation du mécanisme de déploiement continu
4.3 Stockage des identifiants Docker
4.4 Création de l’environnement develop
4.5 Création du pipeline
4.5.1 Création du pod de compilation
4.5.2 Squelette du pipeline de déploiement
4.5.3 Récupération du code source
4.5.4 Vérifications et tests
4.5.5 Compilation de l’image Docker
4.5.6 Connexion au registre et publication
4.5.7 Mise à jour du déploiement de test
4.5.8 Programme complet
4.6 Lancement de la compilation
4.6.1 Création du job
4.6.2 Lancement du build
4.7 Compte de service
4.7.1 Opérations à réaliser
4.7.2 Création d’un compte de service
4.7.3 Création du rôle de mise à jour
4.7.4 Affectation du rôle au compte de service
4.7.5 Affectation du compte de service
4.7.6 Relance de la compilation
4.8 Utilisation de Kaniko avec Jenkins
4.9 Mécanisme de Webhook
4.9.1 Présentation du mécanisme
4.9.2 Déclenchement du Webhook
4.9.3 Création du Webhook
5. Un mot sur Jenkins X
Packager son application avec Helm
1. Objectifs du chapitre et prérequis
2. Helm
2.1 Origine du besoin
2.2 Création d’un chart
2.3 Contenu d’un package
2.3.1 Structure d’un package
2.3.2 Variables .Values, .Chart et .Release
2.4 Adaptation à l’application Mailpit
2.4.1 Résumé des travaux à réaliser
2.4.2 Utilisation de l’image de Mailpit
2.4.3 Correction sur les ports de service
2.4.4 Ajout d’un ConfigMap
2.4.5 Ajout du volume persistant
2.4.6 Montage du volume dans le conteneur
2.4.7 Test de déploiement
2.5 Dépendances
2.5.1 Déclaration des dépendances
2.5.2 Récupération des dépendances
2.5.3 Déploiement du chart avec les dépendances
3. Template Go
3.1 Principe de fonctionnement
3.2 Substitution du contenu d’une variable
3.3 Blocs conditionnels
3.4 Gestion des conditions
3.4.1 Les valeurs de vrai ou faux
3.4.2 Opérateurs de comparaison
3.4.3 Conditions multiples et négation
3.5 Itération
3.5.1 Affichage du contenu d’un tableau
3.5.2 Suppression des sauts de lignes surnuméraires
3.5.3 Itération sur un groupe fixe d’éléments
3.5.4 Itération sur un tableau de hachage
3.5.5 Accéder à une variable globale depuis une boucle
3.6 Filtres
3.7 Valeurs par défaut
3.8 Fonction template
3.8.1 Exemple de définition de fonction
3.8.2 Passage de paramètres et contexte global
3.9 Redéploiement sur changement de configuration
3.9.1 Exposition de la problématique
3.9.2 Principe de la solution
3.9.3 Exemple d’implémentation
3.10 Génération de secret aléatoire « stable »
3.10.1 Exposition de la problématique
3.10.2 Principe de la solution et mise en œuvre
Restriction et délégation d’accès
1. Objectifs du chapitre et prérequis
2. Mise en place de quotas
2.1 Origine du besoin
2.2 Quotas par défaut sur un espace de noms
2.2.1 Création d’un espace de noms
2.2.2 Structure d’un objet LimitRange
2.2.3 Exemple de définition de limitations
2.2.4 Vérification de l’application des limitations
2.2.5 Test du mécanisme
2.2.6 Analyse du problème
2.3 Quotas globaux sur un espace de noms
2.3.1 Présentation des quotas de ressources (ResourceQuota)
2.3.2 Structure d’un quota de ressources
2.3.3 Exemples de restriction de consommation CPU et mémoire
2.3.4 Champs pour positionner des limitations (champ hard)
2.3.5 Test du mécanisme
2.3.6 Nettoyage en fin d’exercice
3. Authentification et autorisation
3.1 Origine du besoin
3.2 Prérequis
3.3 Activation des accès anonymes
3.3.1 Activation des accès anonymes sur Minikube
3.3.2 Création du fichier d’accès
3.3.3 Affectation des droits en lecture
3.3.4 Suppression des droits d’accès anonymes
3.4 Principe de l’authentification par certificat
3.5 Problème de la révocation des certificats
3.6 Génération du certificat
3.6.1 Création de la clé et du certificat client
3.6.2 Emplacement de la PKI
3.6.3 Signature du certificat
3.7 Authentification par certificat
3.7.1 Récupération des informations de connexion au cluster
3.7.2 Utilisation du certificat pour l’authentification
3.7.3 Test de la connexion
3.8 Quelques exemples d’erreurs de manipulation
3.8.1 Problème d’autorité de certification
3.8.2 Problème de couple clé/certificat
3.8.3 Pas d’identifiant renseigné
3.8.4 Utilisation de la demande de certificat à la place du certificat
3.9 Attributions de droits administrateur sur le cluster
3.9.1 Contexte et opérations à réaliser
3.9.2 Affectation des droits administrateur à un utilisateur
3.9.3 Test du nouvel administrateur
3.9.4 Création de nouveaux utilisateurs
3.9.5 Affectation des droits administrateur à un groupe
3.9.6 Administrateur d’un espace de noms
4. Mécanismes d’authentification externes
4.1 Présentation du mécanisme
4.2 Communication entre le fournisseur OAuth2 et le cluster
4.3 Création des identifiants
4.4 Modification des options de démarrage (Minikube)
4.5 Configuration des accès clients
4.5.1 Présentation de l’outil kubelogin/oidc-login
4.5.2 Installation de kubelogin/oidc-login
4.5.3 Génération des identifiants d’accès
4.5.4 Renseignement du cluster et contexte
4.5.5 Test de connexion
4.6 Attribution des droits d’accès
5. Mise en place de comptes de service
5.1 Contexte
5.2 Création du compte de service
5.3 Attribution des droits d’administrateur au compte de service
5.4 Création du fichier Kubeconfig
5.4.1 Recopie des informations de connexion
5.4.2 Jeton de connexion du compte de service
5.4.3 Affectation de l’utilisateur
5.4.4 Test de la connexion
5.4.5 Révocation des accès
Les opérateurs Kubernetes
1. Objectifs du chapitre et prérequis
2. Utilisation des opérateurs
2.1 Présentation du principe
2.2 L’opérateur de Prometheus
2.2.1 Retour sur le chart prometheus-operator
2.2.2 Structure d’un objet Prometheus
2.3 Ressources externes sur les opérateurs existants
2.4 Présentation des opérateurs MySQL et MariaDB
2.4.1 Choix de l’opérateur
2.4.2 Déploiement de l’opérateur
2.5 Création d’une instance MariaDB
2.5.1 Création du cluster
2.5.2 Problèmes de droits sur le volume persistant
2.6 Objets créés au déploiement du cluster
2.6.1 Volumes persistants
2.6.2 Services MariaDB
2.7 Test de la réplication
2.7.1 Initialisation de l’environnement de test
2.7.2 Connexion aux instances maître et esclave
2.7.3 Création d’une table
2.7.4 Alimentation de la table
2.7.5 Changement du nombre de réplicas
2.8 Pour conclure
Annexes
1. bash vs zsh
1.1 Les shells Unix
1.2 zsh et oh-my-zsh
1.3 Tester zsh et oh-my-zsh
1.4 Configurer zsh comme shell pour l’utilisateur courant
2. Déploiement du tableau de bord Kubernetes
2.1 Installation du tableau de bord (application dashboard)
2.2 Création du compte d’accès
2.3 Récupération du jeton de connexion
2.4 Décodage du contenu du jeton
2.5 Connexion au tableau de bord
Index
Yannig PERRÉ
Administrateur système depuis de nombreuses années, Yannig PERRÉ est aujourd'hui spécialiste de la gestion d'applications à l'aide de conteneurs. Il associe naturellement à ce savoir-faire différents outils pour gérer les problématiques d'installation, de résilience, de scalabilité, de surveillance ainsi que de publication des applications sur Internet. Associée à sa longue expérience du monde open source, cette expertise lui permet de transmettre aux lecteurs des livres réellement efficaces sur la mise en œuvre d’Ansible, Kubernetes ou encore Prometheus et Grafana.