Aller au contenu principal

TP 6

Exposer une application avec un Deployment et un Ingress dans Kubernetes

Ce TP vise à expérimenter l'utilisation des Deployments pour gérer une application et utiliser un Ingress pour l'exposer via un point d'entrée HTTP.


Phase 1 : Déploiement de l'application

  • Action : Créer un Deployment pour une application web simple.
    Observation : L'application doit être accessible au sein du cluster.
    Contraintes :
    • Nom du namespace : mynamespace
    • Nom du Deployment : my-app
    • Image du container : nginx:latest
    • Port exposé : 80
Indice

Utiliser un Deployment avec kubectl apply -f <deployment.yaml> et vérifier l'état avec kubectl get pods.

Solution

Afficher
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: mynamespace
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:latest
ports:
- containerPort: 80

Phase 2 : Création du Service

  • Action : Exposer l'application avec un Service ClusterIP.
    Observation : Le service doit être accessible à l'intérieur du cluster.
    Contraintes :
    • Nom du service : my-app-service
    • Selector : app: my-app
    • Port : 80
Indice
Utiliser `kubectl get svc` pour voir si le service est bien créé.

Solution

Afficher
apiVersion: v1
kind: Service
metadata:
name: my-app-service
namespace: mynamespace
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP

Phase 3 : Exposition avec un Ingress

  • Action : Créer un Ingress pour exposer l'application via un nom de domaine.
    Observation : L'application doit être accessible via http://MY.DOMAIN.COM.
    Contraintes :
    • Nom de l'Ingress : my-app-ingress
    • Classe d'ingress : traefik
    • Hostname : MY.DOMAIN.COM
    • Service cible : my-app-service
    • Port cible : 80
Indice
S'assurer que le contrôleur **IngressTraefix** est installé et que l'entrée DNS `MY.DOMAIN.COM` pointe vers le cluster.

Solution

Afficher
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
namespace: mynamespace
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: traefik
rules:
- host: MY.DOMAIN.COM
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80

Phase avancée

  • Modifier l'Ingress pour ajouter HTTPS avec un certificat TLS.
  • Tester l'accès depuis l'extérieur avec un LoadBalancer.