Séance 6
Remarque
L'image à utiliser est docker.io/5clo1r/k8s-labo avec le tag 0.1.0
Les probes liveness et readiness doivent toujours être définie. Elles sont de type HTTP et sont disponible sur les path /liveness et /readiness
Variables d'environnement
Objectifs
- Donner des paramètres avant la création de mon pod pour avoir des containers différents.
Les variables d’environnement sont des paires clé-valeur accessibles par un process pour configurer son comportement sans avoir à toucher au code source.
Exemple : définir le nom de la base de données, le port du serveur, ou le nom d’un utilisateur.
Ingress
Objectifs
- Comprendre la différence avec un Service de type LoadBalancer ou NodePort.
- Apprendre à configurer des Ingress avec des règles host et path pour rediriger le trafic vers différents services.
Un Ingress sert à router le traffic externe (de type HTTP/HTTPS) vers les services internes du cluster. Il s'agit d'un point d'entrée unique qui permet de gérer différents services derrière une adresse IP unique ou encore derrière un même nom de domaine.
Un Ingress utilise des règles de routage basées sur le nom de domaine ou le path pour rediriger les requêtes vers le service adéquat.
Un Ingress peux gérer le TLS dans le cadre de mise en place de connexions HTTPS.
Les Ingress ne sont pas fournis nativement par Kubernetes, il est nécessaire d'installer un Ingress Controller tel que Traefik ou encore Nginx.
Un Ingress Controller est déployé par défaut sur K3S, il s'agit de Traefik. Le Service correspondant a une ip de type LoadBalancer. Pour vous permettre de l'utiliser, un enregistrement (record) DNS de type wildcard a été créé pour chaque groupe avec la structure suivante : *.grp-X-Y.5clo1r.in.esigoto.info (où X-Y représente votre groupe au sein de la classe. Par ex. 1-1).
Ils sont accessibles via le serveur dns interne à l'adresse 192.168.217.200.
Tâche 1
L'application Flask utilise la variable d'environnement BG_COLOR afin de définir la couleur de fond de la page web. Cette variable est utilisée par la propriété CSS background-color.
De manière déclarative, créez trois Service et Deployment correspondants qui auront chacun respectivement une couleur de fond rouge, vert et bleu.
Documentation Kubernetes : Définir des variables d'environnement pour un Container
| Exigences |
|---|
| Le Service doit être de type ClusterIP |
| Le Service doit exposer le port interne de l'application (TCP/5000) sur le port identique |
| Le Label à utiliser sur le Pod et le selector du Service doivent être app.kubernetes.io/color qui contiendra respectivement red, green et blue. |
| La variable d'environnement BG_COLOR doit être utilisée pour obtenir un fond rouge, vert et bleu. |
Vous pouvez valider la couleur de fond de la page web à l'aide d'un port-forward sur chaque service individuellement.
Exemple d'un Deployment avec définition d'une variable d'environnement MYVAR
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: container
image: nginx:latest
env:
- name: MYVAR
value: "HelloWorld"Questions
Quel est le contenu du fichier yaml pour créer les trois Service ainsi que les trois Deployment ?
Tâche 2
De manière déclarative, créez un Ingress pour chacun des Service et Deployment créés à la tâche précédente.
Exemple d'un Ingress simple
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/frontend-entry-points: http
name: my-ingress
spec:
rules:
- host: my-sub.domain.tld
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-svc
port:
number: 8080| Exigences |
|---|
| Le Path doit être / |
| L'Ingress Class à utiliser est traefik |
| L'annotation traefik.ingress.kubernetes.io/frontend-entry-points doit avoir la valeur http |
Le pattern à suivre pour le domaine à utiliser avec chaque Ingress est <shortname>-<color>.grp-<x>-<y>.5clo1r.in.esigoto.info |
Questions
Quel est le contenu du fichier YAML pour créer les différents Ingress
Tâche 3
De manière déclarative, créez un unique Ingress permettant d'accéder aux trois Service et Deployment créés à la tâche 1 via trois règles spécifiques.
| Exigences |
|---|
| Le path correspondant à chaque Service doit être /red, /green et /blue. |
| L'Ingress Class à utiliser est traefik |
| L'annotation traefik.ingress.kubernetes.io/frontend-entry-points doit avoir la valeur http |
Le pattern à suivre pour le domaine à utiliser avec chaque Ingress est <shortname>-all.grp-<x>-<y>.5clo1r.in.esigoto.info |
L'application Flask écoute sur le path /, il faut réécrire l'url. Avec un IngressControler de type traefik, cela se fait avec un objet de type Middleware qui permet de supprimer un prefixe du Path.
L'application du Middleware se fait sur un Ingress à l'aide d'une annotation spécifique. L'annotation à définir sur l'Ingress est traefik.ingress.kubernetes.io/router.middlewares avec la valeur <namesapce>-<middleware>@kubernetescrd. Avec l'exemple ci-dessous cela donne la valeur ns-apt-k8s-labo-red@kubernetescrd.
Exemples d'un Middleware simple
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: k8s-labo-red
namespace: ns-apt
spec:
stripPrefix:
prefixes:
- /red
# …Questions
Quel est le contenu du fichier YAML pour créer cet unique Ingress donnant accès aux différents Service et Deployment
Expliquez le rôle du paramètre pathType et les différentes valeurs possibles.