Isoler les charges de travail avec les espaces de noms (namespace)

KubernetesKubernetesBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Kubernetes propose des espaces de noms (namespaces) comme moyen d'isoler les charges de travail et les ressources dans un cluster. Dans ce laboratoire, vous apprendrez à utiliser les espaces de noms pour isoler les charges de travail et les ressources. Vous allez créer un espace de noms, déployer une application web simple dans cet espace de noms, et vérifier que l'application web est isolée des autres ressources du cluster.

Ceci est un Guided Lab, qui fournit des instructions étape par étape pour vous aider à apprendre et à pratiquer. Suivez attentivement les instructions pour compléter chaque étape et acquérir une expérience pratique. Les données historiques montrent que c'est un laboratoire de niveau débutant avec un taux de réussite de 97%. Il a reçu un taux d'avis positifs de 96% de la part des apprenants.

Démarrer le cluster Minikube

Avant de créer des ressources, vous avez besoin d'un cluster Kubernetes en cours d'exécution. Minikube est un environnement Kubernetes léger qui s'exécute sur votre machine locale.

  1. Accédez à votre répertoire de travail :

    Ouvrez le terminal et accédez au dossier de projet par défaut :

    cd /home/labex/project
  2. Démarrez Minikube :

    Démarrez Minikube pour initialiser un cluster Kubernetes :

    minikube start
    • Cette commande configure un cluster Kubernetes mono - nœud sur votre machine locale.
    • Minikube peut prendre quelques minutes à démarrer en fonction des performances de votre système.
  3. Vérifiez que Minikube est en cours d'exécution :

    Vérifiez l'état du cluster Minikube :

    minikube status
    • Recherchez des composants tels que kubelet et apiserver listés comme Running (en cours d'exécution).
    • Si le cluster n'est pas en cours d'exécution, relancez la commande minikube start.

Si vous rencontrez des problèmes lors du démarrage de Minikube, utilisez minikube delete pour réinitialiser l'environnement si nécessaire.

Créer un espace de noms (namespace)

Dans cette étape, vous allez créer un espace de noms appelé webapp pour isoler l'application web des autres ressources du cluster.

Créez un fichier appelé namespace.yaml avec le contenu suivant :

apiVersion: v1
kind: Namespace
metadata:
  name: webapp

Appliquez l'espace de noms à votre cluster avec la commande suivante :

kubectl apply -f namespace.yaml

Vérifiez que l'espace de noms a été créé avec la commande suivante :

kubectl get namespaces

Vous devriez voir l'espace de noms webapp dans la liste des espaces de noms.

Déployer une application web

Dans cette étape, vous allez déployer une application web simple dans l'espace de noms (namespace) webapp.

Créez un fichier appelé web-app.yaml avec le contenu suivant :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Ce fichier crée un déploiement (Deployment) avec une seule réplique d'un conteneur exécutant la dernière version du serveur web Nginx.

Appliquez le déploiement à votre cluster avec la commande suivante :

kubectl apply -f web-app.yaml

Vérifiez que l'application web est en cours d'exécution dans l'espace de noms webapp avec la commande suivante :

kubectl get pods -n webapp

Vous devriez voir le pod web-app dans la liste des pods en cours d'exécution dans l'espace de noms webapp.

Exposer l'application web

Dans cette étape, vous allez exposer l'application web au monde extérieur en utilisant un Service Kubernetes.

Créez un fichier appelé web-app-service.yaml avec le contenu suivant :

apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: webapp
spec:
  selector:
    app: web-app
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

Ce fichier crée un Service qui expose l'application web au cluster en utilisant une adresse IP de cluster (ClusterIP).

Appliquez le Service à votre cluster avec la commande suivante :

kubectl apply -f web-app-service.yaml

Vérifiez que le Service est en cours d'exécution dans l'espace de noms (namespace) webapp avec la commande suivante :

kubectl get services -n webapp

Vous devriez voir le service web-app dans la liste des services en cours d'exécution dans l'espace de noms webapp.

Vérifier l'isolement des espaces de noms (namespace)

Dans cette étape, vous allez vérifier que l'application web est isolée des autres ressources du cluster.

Créez un fichier appelé other-app.yaml avec le contenu suivant :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: other
spec:
  replicas: 1
  selector:
    matchLabels:
      app: other
  template:
    metadata:
      labels:
        app: other
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

Dans ce fichier, vous créez un autre déploiement (Deployment) appelé other dans l'espace de noms par défaut qui exécute un conteneur avec l'image nginx.

Appliquez le déploiement à votre cluster avec la commande suivante :

kubectl apply -f other-app.yaml

Vérifiez que le déploiement est en cours d'exécution dans l'espace de noms par défaut avec la commande suivante :

kubectl get pods | grep other

Vous devriez voir le pod other dans la liste des pods en cours d'exécution dans l'espace de noms par défaut.

Vérification de l'accès inter-namespaces

Tout d'abord, trouvez le nom du pod exécutant votre application en exécutant la commande suivante :

kubectl get pods -l app=other

Vous devriez voir le pod other. Notez le nom du pod.

Ensuite, exécutez la commande suivante pour ouvrir une session shell dans le conteneur exécutant votre application :

kubectl exec -it pod-name -- /bin/sh

Remplacez par le nom du pod que vous avez noté précédemment.

Une fois dans la session shell, exécutez la commande suivante pour accéder au Deployment web-app :

curl web-app.webapp

Vous devriez voir la réponse HTML du serveur web Nginx.

Résumé

Dans ce laboratoire, vous avez appris à utiliser les espaces de noms (namespace) pour isoler les charges de travail et les ressources dans un cluster Kubernetes. Vous avez créé un espace de noms, déployé une application web simple dans cet espace de noms, exposé l'application web au monde extérieur en utilisant un Service Kubernetes et vérifié que l'application web est isolée des autres ressources du cluster.