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

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).

  • Commencez par créer un répertoire ~/TpNOte sur le manager de votre cluster. Vous devrez placer tous les fichier du TP dans ce répertoire.
  • Sur tomuss, placez
    • les IPs de vos machines dans les colonnes IPManager, IPWorker1 et IPWorker2.
    • le nom DNS de votre cluster dans la colonne NomDNS.
    • le nom de votre groupe dans la colonne NomDeGroupe attention, les deux membres du groupe doivent remplir cette colonne, cela me permettra de retrouver les groupes. Ce nom va être utilisé dans le sujet et ne doit contenir que des lettres et des -.
    • un login dans la case Login et un mot de passe dans la case MotDePasse (PAs ceux de l'université !!).

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

Créez un secret :

  • dont le nom est secr-tpnote
  • qui contient un champs user_NOMDEGROUPENOMDEGROUPE doit être le nom de votre groupe et la valeur est le login déposé sur tomuss.
  • qui contient un champs pwd_NOMDEGROUPENOMDEGROUPE doit être le nom de votre groupe et la valeur est le mot de passe déposé sur tomuss.

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.

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

  • Créez un deploiement :
    1. dont le nom est redis-NOMDEGROUPE
    2. qui crée un seul réplica de pods
    3. le pod créé à les labels {app: redis, tp: note, groupe: NOMDEGROUPE}
    4. le pod utilise l'image publique redis
    5. la commande exécuté par le conteneur doit être ["redis-server", "/etc/redis/redis.conf"]
    6. il monte 2 volumes :
      1. un sur /data qui est vide au démarrage
      2. un sur /etc/redis/ contenant au démarrage le fichier redis.conf suivant (où NOMDELOGIN doit être le nom de l'utilisateur déposé sur tomuss récupéré à partir du secret):
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 que d'autres pods puisse utiliser le service, créez un service :
    1. dont le nom est serv-redis-tpnote
    2. qui envoie le port 6379 du service sur le port 6379 du pods 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
/ # 

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

  • Créez un déploiement :
    1. dont le nom est php-NOMDEGROUPE
    2. qui crée un seul réplica
    3. le pod créé utilise les labels {app: php, tp: note, groupe: NOMDEGROUPE}
    4. le pod utilise l'image publique forge.univ-lyon1.fr:4567/fabien.rico/tpnotekube/php-redis-cli
    5. le pod a une variable d'environnement SERVEUR_REDIS égale au nom du serveur redis qui doit être contacté
    6. le pod a une variable d'environnement CC_LOGIN égale au contenu du champs user_NOMDEGROUPE du secret
    7. le pod monte le volume /var/www/html initialisé avec le code php se trouvant dans l'archive http://perso.univ-lyon1.fr/fabien.rico/site/_media/cloud:2019:codephp.zip (les fichiers doivent être téléchargés, desarchivés et l'archive effacée durant l'initialisation).

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

  • Faire un service qui permet de contacter le site php. appelez ce service serv-NOMDEGROUPE.
  • À l'aide d'un ingress publiez le site php.
  • Testez votre service, il n'est pas immédiatement fonctionnel, mais vous devez arrivez sur une page de login.

À 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.

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

  • Ajoutez ce token au secret utilisé précédemment sous le nom de clef token.
  • Ajoutez au pod php un volume qui sera basé sur le secret et qui contiendra 2 fichiers :
    1. token contenant le token;
    2. password contenant le mot de passe.

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
  • Montez le volume créé dans le répertoire /secrets du pod php.
  • Vérifiez que le pod n'affiche plus d'erreur.
  • Tentez de vous loguer vous devez arriver à une page qui affiche vous y etes presque.
  • Passez le nombre de réplicat à 3 et appuyez sur tester le load balancing
  • Au bout de trois connections via des replica différent, la page affiche Bravo vous avez terminé.
  • cloud/2019/tp_kube_note_tiw.txt
  • Dernière modification : 2020/01/17 12:52
  • de fabien.rico