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
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.
Affichez les informations du déploiement :
kubectl get deployments hello-world kubectl describe deployments hello-world
Affichez les informations des ReplicaSet :
kubectl get replicasets kubectl describe replicasets
Créez un Service qui expose le déploiement :
kubectl expose deployment hello-world --type=NodePort --name=example-service
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.
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
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 commandegcloud compute instances list
pour voir les adresses publiques de vos nœuds.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.
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>
où
<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.