Aller au contenu principal

Tutoriel - Déployer votre première application

Objectifs

Ce tutoriel vous guide pas à pas pour réaliser votre premier déploiement sur un cluster Managed Kubernetes. À la fin de ce guide, vous aurez :

  • Déployé une application web simple.
  • Exposé cette application à l'intérieur du cluster via un Service.
  • Rendu l'application accessible depuis Internet via un Ingress.

Prérequis

  • Vous avez configuré votre accès au cluster comme décrit dans le guide de démarrage rapide.
  • Vous disposez d'un namespace sur lequel vous avez les droits de déploiement. Dans ce tutoriel, nous utiliserons un namespace nommé hello-world.

Étape 1 : Créer un namespace

Si ce n'est pas déjà fait, créez un namespace pour isoler votre application.

kubectl create namespace hello-world

Étape 2 : Déployer une application "Hello World"

Nous allons déployer une application de démonstration qui affiche une simple page web.

  1. Créez un fichier nommé deployment.yaml avec le contenu suivant :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: hello-world-deployment
    namespace: hello-world
    labels:
    app: hello-world
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: hello-world
    template:
    metadata:
    labels:
    app: hello-world
    spec:
    containers:
    - name: hello-world
    image: nginxdemos/hello:plain-text
    ports:
    - containerPort: 80
  2. Appliquez ce manifeste à votre cluster :

    kubectl apply -f deployment.yaml
  3. Vérifiez que le déploiement a été créé et que les pods sont en cours d'exécution :

    kubectl get deployment -n hello-world
    # Vous devriez voir votre déploiement avec 2/2 replicas prêts.
    NAME READY UP-TO-DATE AVAILABLE AGE
    hello-world-deployment 2/2 2 2 102s

    kubectl get pods -n hello-world
    # Vous devriez voir deux pods avec le statut "Running".
    NAME READY STATUS RESTARTS AGE
    hello-world-deployment-669dfbd799-294zz 1/1 Running 0 2m21s
    hello-world-deployment-669dfbd799-plcbg 1/1 Running 0 2m21s

Étape 3 : Exposer l'application dans le cluster (Service)

Pour permettre aux différents composants du cluster de communiquer avec notre application, nous devons créer un Service.

  1. Créez un fichier nommé service.yaml :

    apiVersion: v1
    kind: Service
    metadata:
    name: hello-world-service
    namespace: hello-world
    spec:
    selector:
    app: hello-world
    ports:
    - protocol: TCP
    port: 80
    targetPort: 80
    type: ClusterIP
  2. Appliquez le manifeste :

    kubectl apply -f service.yaml

    Votre application est maintenant accessible via le nom hello-world-service.hello-world depuis n'importe quel autre pod du cluster.

Étape 4 : Rendre l'application accessible depuis Internet (Ingress)

Pour exposer notre service sur Internet, nous allons utiliser une ressource Ingress. L'offre Managed Kubernetes fournit plusieurs ingressClassName préconfigurés. Nous utiliserons nginx-external pour une exposition publique.

  1. Créez un fichier ingress.yaml. Pensez à remplacer votre-cluster-id par l'identifiant de votre cluster (ex: ctodev).

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: hello-world-ingress
    namespace: hello-world
    spec:
    ingressClassName: nginx-external
    rules:
    - host: "hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com" # changez moi
    http:
    paths:
    - path: /
    pathType: Prefix
    backend:
    service:
    name: hello-world-service
    port:
    number: 80
  2. Appliquez le manifeste :

    kubectl apply -f ingress.yaml

Étape 5 : Vérifier l'accès

Une entrée DNS "*" fait déjà pointer toutes les url se terminant par ".external.votre-cluster-id.mk.ms-cloud-temple.com" vers l'IP de l'ingress "external". les applications publiées sur ce suffixe DNS sont donc directement accessibles.

curl http://hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com

Vous devriez recevoir une réponse du serveur NGINX de démo.

StatusCode : 200
StatusDescription : OK
Content : Server address: 10.247.1.223:80
Server name: hello-world-deployment-669dfbd799-plcbg
Date: 29/Oct/2025:15:40:04 +0000
URI: /
Request ID: 2df985e0630c3a123b5cde23b687a033

RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 170
Cache-Control: no-cache
Content-Type: text/plain
Date: Wed, 29 Oct 2025 15:40:04 GMT
Expires: Wed, 29 Oct 2025 15:40:03 GMT
Server: ng...

:::warning[Pour aller plus loin : la sécurité en production ] Ce tutoriel vous a montré les bases du déploiement. Pour un environnement de production, il est crucial d'appliquer des mesures de sécurité supplémentaires :

  • Utilisez des images sécurisées : Privilégiez des images provenant de votre registre d'entreprise sécurisé comme Harbor plutôt que des images publiques.
  • Contrôlez les flux réseau : Mettez en place des NetworkPolicies pour restreindre les communications aux seuls flux nécessaires entre vos applications.
  • Appliquez des politiques de gouvernance : Utilisez des outils comme Kyverno pour imposer des règles de sécurité (ex: interdire les conteneurs "root", exiger des requests et limits de ressources, etc.). :::

Nettoyage

Pour supprimer toutes les ressources que vous avez créées pendant ce tutoriel, vous pouvez simplement supprimer le namespace :

kubectl delete namespace hello-world

Félicitations, vous avez déployé et exposé votre première application sur Managed Kubernetes !