Table des matières

TP noté Kubetnetes

Attention ce sujet est le sujet de la séance du jeudi 16 janvier, ne le suivez pas si vous commencer le vendredi 17 !

Pour ce TP vous utiliserez votre plateforme kubernetes créée au TP précédant. Pour finir, il faut que votre plateforme soit fonctionnelle avec un ingress-controler fonctionnel aussi. Un embryon de script de test est disponible ici test-kube.zip

Description de l'architecture

Vous devez avoir 2 déploiement,

  1. le premier avec un pod qui n'est pas répliqué et qui est basé sur le serveur redis :
    1. Il servira à stocker les sessions web.
    2. Il doit être accessible du second via un service.
    3. Il devra être initialisé pour demander une authentification via un secret.
  2. le second avec un pod dupliqué 3 fois basé sur une image php compatible avec redis :
    1. Il servira de serveur web.
    2. Il sera accessible de l'extérieur via un service ingress
    3. Il sera initialisé en récupérant le code php et via des secrets.

Pour le fonctionnement, il faut donc un secret et 2 services (un normal et un ingress).

Description des pods

Pour ce TP noté automatiquement, vous devez faire bien attention à utiliser les noms qui sont demandé

Le secret

Créez un secret :

Si vous créer le secret avec un fichier yml appelez le secret.yml. Si c'est avec une commande, recopiez-la dans secret.sh.

Le déploiement redis

Dans ce qui suis, NOMDEGROUPE doit être remplacé par le nom de votre groupe.

requirepass NOMDELOGIN

Cela va exécuter un serveur redis qui réclame une authentification. Pour le tester, vous pouvez utiliser la commande redis-client dans le pod. Pour cela

$ kubectl exec -it NOMDUPOD redis-cli
# on est connecé dans le serveur redis
# test de la commande HELP
127.0.0.1:6379> HELP
redis-cli 5.0.7
To get help about Redis commands type:
      "help @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" to get a list of possible help topics
      "quit" to exit

To set redis-cli preferences:
      ":set hints" enable online hints
      ":set nohints" disable online hints
Set your preferences in ~/.redisclirc
# Test de la commande MGET
127.0.0.1:6379> MGET *
(error) NOAUTH Authentication required.
# Authentification, le login que j'utilise est ''fabien''
127.0.0.1:6379> AUTH fabien
OK
# Retest de MGET, il n'y a pas de variable dans le serveur qui est vide au démarrage
127.0.0.1:6379> MGET *
1) (nil)
127.0.0.1:6379> QUIT

Service redis

Pour le tester vous pouvez utiliser le pod busybox du dernier TP :

$ kubectl exec -it NOMDUPOD sh
/ # telnet serv-redis-tpnote 6379
Connected to serv-redis-tpnote
GET TOTO
-NOAUTH Authentication required.
AUTH ee
-ERR invalid password
AUTH fabien
+OK
MGET *
*1
$-1
QUIT
+OK
Connection closed by foreign host
/ # 

Le serveur php

Dans ce qui suis, NOMDEGROUPE doit être remplacé par le nom de votre groupe.

Rq : Pour les soucis d'initialisation, vous pouvez accéder au log d'un conteneurs d'initialisation en tapant :

kubectl logs NOMDUPOD -c NOMDUCONTENEUR

Publication du site

À ce stade il est normal que le site ne trouve pas le mot de passe où le token

Pensez à supprimer le ingress du dernier TP qui pourrait perturber celui là. Pensez à noter le nom DNS utilisé dans tomuss.

Ajout du mot de passe et du token

Le mot de passe et le token doivent être dispribué via le secret utiliser. Vous trouverez le token dans les log du pod php.

Pour exporter seulement une partie de secret dans un volume et changer les nom des fichies générés, il faut utilisez le shema suivant lors de la définition du volume :

   name: NOMDUVOLUME
   secret:
     secretName: NOMDUSECRET
       items:
         - key: NOMDELACLEF1
           path: NOMDUFICHIERGENERE1
         - key: NOMDELACLEF2
           path: NOMDUFICHIERGENERE2