Skip to content

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

yaml
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

yaml
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

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