Utiliser un Service pour accéder à une application dans un cluster

Cette page montre comment créer un Service Kubernetes que des clients externes peuvent utiliser pour accéder à une application s'exécutant dans un cluster. Le Service fournit une répartition de charge pour une application ayant deux instances en cours d'exécution.

Pré-requis

Vous devez disposer d'un cluster Kubernetes et l'outil de ligne de commande kubectl doit être configuré pour communiquer avec votre cluster. Si vous ne possédez pas déjà de cluster, vous pouvez en créer un en utilisant Minikube, ou vous pouvez utiliser l'un de ces environnements Kubernetes:

Objectifs

  • Exécuter deux instances d'une application Hello World.
  • Créer un Service qui expose un port du nœud.
  • Utiliser le Service pour accéder à l'application en cours d'exécution.

Création d'un service pour une application s'exécutant dans deux pods

Voici le fichier de configuration pour le déploiement de l'application :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world
spec:
  selector:
    matchLabels:
      run: load-balancer-example
  replicas: 2
  template:
    metadata:
      labels:
        run: load-balancer-example
    spec:
      containers:
        - name: hello-world
          image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
          ports:
            - containerPort: 8080
              protocol: TCP
  1. Exécutez une application Hello World dans votre cluster : Créez le déploiement de l'application en utilisant le fichier ci-dessus :

    kubectl apply -f https://k8s.io/examples/service/access/hello-application.yaml
    

    La commande précédente crée un Deployment et un ReplicaSet associé. Le ReplicaSet possède deux Pods, chacun exécutant l'application Hello World.

  2. Affichez les informations du déploiement :

    kubectl get deployments hello-world
    kubectl describe deployments hello-world
    
  3. Affichez les informations des ReplicaSet :

    kubectl get replicasets
    kubectl describe replicasets
    
  4. Créez un Service qui expose le déploiement :

    kubectl expose deployment hello-world --type=NodePort --name=example-service
    
  5. Affichez les informations sur le Service :

    kubectl describe services example-service
    

    Le résultat sera similaire à ceci :

    Name:                   example-service
    Namespace:              default
    Labels:                 run=load-balancer-example
    Annotations:            <none>
    Selector:               run=load-balancer-example
    Type:                   NodePort
    IP:                     10.32.0.16
    Port:                   <unset> 8080/TCP
    TargetPort:             8080/TCP
    NodePort:               <unset> 31496/TCP
    Endpoints:              10.200.1.4:8080,10.200.2.5:8080
    Session Affinity:       None
    Events:                 <none>
    

    Notez la valeur de NodePort pour le service. Par exemple, dans le résultat précédent, la valeur de NodePort est 31496.

  6. Répertoriez les pods qui exécutent l'application Hello World :

    kubectl get pods --selector="run=load-balancer-example" --output=wide
    

    Le résultat est similaire à ceci :

    NAME                           READY   STATUS    ...  IP           NODE
    hello-world-2895499144-bsbk5   1/1     Running   ...  10.200.1.4   worker1
    hello-world-2895499144-m1pwt   1/1     Running   ...  10.200.2.5   worker2
    
  7. Obtenez l'adresse IP publique de l'un de vos nœuds qui exécute un pod Hello World. L'obtention de cette adresse dépend de la manière dont vous avez configuré votre cluster. Par exemple, si vous utilisez Minikube, vous pouvez voir l'adresse du nœud en exécutant kubectl cluster-info. Si vous utilisez des instances Google Compute Engine, vous pouvez utiliser la commande gcloud compute instances list pour voir les adresses publiques de vos nœuds.

  8. Sur le nœud choisi, créez une règle de pare-feu autorisant le trafic TCP sur votre port. Par exemple, si votre Service a une valeur NodePort de 31568, créez une règle de pare-feu autorisant le trafic TCP vers le port 31568. Différents fournisseurs cloud offrent différentes façons de configurer des règles de pare-feu.

  9. Utilisez l'adresse du nœud et le port de nœud pour accéder à l'application Hello World :

    curl http://<adresse-ip-publique>:<port>
    

    <adresse-ip-publique> est l'adresse IP publique de votre nœud, et <port> est la valeur de NodePort pour votre service. La réponse à une requête réussie est un message de bienvenue :

    Hello, world!
    Version: 2.0.0
    Hostname: hello-world-2895499144-bsbk5
    

Utilisation d'un fichier de configuration de service

Au lieu d'utiliser kubectl expose, vous pouvez utiliser un fichier de configuration de service pour créer un Service.

Cleanup

Pour supprimer le Service, saisissez cette commande :

kubectl delete services example-service

Pour supprimer le Déploiement, le ReplicaSet et les Pods qui exécutent l'application Hello World, saisissez cette commande :

kubectl delete deployment hello-world

A suivre

Suivez le tutoriel Connecter des applications avec les Services.

Dernière modification June 04, 2024 at 9:59 AM PST: Update node-hello image to Google's newer image (93a3bdb334)